[VBA] Creer une macro qui echange des donnees entre feuilles

Creer une macro qui echange des donnees entre feuilles [VBA] - VB/VBA/VBS - Programmation

Marsh Posté le 01-05-2006 à 09:12:51    

Bonjour a tous,  
 
je debute sur vba et aurais besoin d'aide pour programmer une macro.  
 
je vous explique:  
j'ai feuil1 (qui est ma source de donnees) avec en colonne A les noms de 9 sites, en colonne B des numeros de serie et en colonne D des quantites.  
Debut de liste ligne 2.  
Il y a des doublons car le meme numero de serie peut apparaitre dans chaque site.  
 
Je souhaite renvoye les quantites sur une nouvelle feuille deja existante (feuil2) mais en separant les noms de sites par colonne.  
Debut de liste ligne 5.  
Cela m'evite les doublons.  
le numero de serie est en colonne A, les quantites s'inscrivent dans 9 colonnes (F a N) correspondant aux 9 sites que je separe.  
 
La macro doit donc garder les quantites en fonction du site mais aussi du numero de serie.  
 
En plus si un nouveau numero de serie apparait dans feuil1, la macro doit pouvoir l'inserer automatiquement dans feuil2.  
Et si un numero de serie disparait dans feuil1, la valeur 0 doit apparaitre dans feuil2.  
 
Si vous pouviez m'aider, merci.  

Reply

Marsh Posté le 01-05-2006 à 09:12:51   

Reply

Marsh Posté le 01-05-2006 à 12:17:29    

La meilleure solution dans ton cas est de debuter via le macro recorder
menu Outils/macro/nouvelle macro et malheureusement il n'y a qu'en forgeant que l'on devient forgeron pour ce qui sera de l'optimisation manuelle du code et de son ecriture


Message édité par kiki29 le 01-05-2006 à 12:18:16
Reply

Marsh Posté le 01-05-2006 à 18:35:00    

c'est sur. ce qui me manque le plus c'est le temps. Mais je persevere dans mon apprentissage tout en esperant qu'un expert me donne les grandes lignes.

Reply

Marsh Posté le 01-05-2006 à 22:39:12    

Bonjour,  
 
Pour assurer la "simultanéité" de ta macro, tu peux la placer dans une boucle en doevents, ou encore aller la placer dans  :  
 
 
Private Sub Workbook_SheetSelectionChange(ByVal Sh As Object, ByVal Target As Range)
'Macro
End Sub
 
Ou :  
 
private sub workbook_open
'macro
end sub
 
dans l' objet ThisWorkbook.
 
 
Mais as tu un début de code ?
 

Reply

Marsh Posté le 03-05-2006 à 13:51:31    

merci pour ces petits conseils. Je suis en train de tenter un code mais ce n'est pas brillant. J'enverrai le code des que je serai sorti un peu de ce bourbier.

Reply

Marsh Posté le 08-05-2006 à 22:40:23    

j'ai commence mais je voudrais generaliser car pour le moment mon prog ne fonctionne que poiur une cellule specifique. comment generaliser a toute la colonne. quelqu'un peut m'aiguiller ?
 

Code :
  1. Dim vSite As String
  2. Dim vPart As Variant
  3. Dim vPrime As Variant
  4. Dim vCellule As Object
  5. vSite = Sheets("dlyinveu" ).[A394]
  6. vPart = Sheets("dlyinveu" ).[B394]
  7. vPrime = Sheets("Inventory" ).[A60]
  8. For Each vCellule In Sheets("Inventory" ).[F60]
  9.     If vSite = "Athens" And vPart = vPrime Then
  10.     Sheets("dlyinveu" ).[D394].Copy
  11.     vCellule.PasteSpecial Paste:=xlValues
  12.     Application.CutCopyMode = False
  13.     End If
  14. Next
  15. End Sub


Reply

Marsh Posté le 10-05-2006 à 22:26:17    

Salut,  
 
 Tu pourrais le faire dans un type de boucle comme ça :  
 
dim cpt as integer
cpt=1
...
Loop until cpt=0
 
Et utiliser des "sendkeys" (enter pour aller à la ligne, right et left pour aller de droite à gauche...)
Par contre il ne faut pas que le nombre de site soit trop important : Ca prendrait trop de temp, et il ya aurait un rique de "surchauffe".

Reply

Marsh Posté le 15-05-2006 à 13:02:38    

salut,
 
Je vais essayer.
je te tiens au courant.
Merci.

Reply

Marsh Posté le 16-05-2006 à 00:17:19    

Un tableau dynamique croisé ne ferait pas l'affaire dans un cas comme celui ci ?
 
kenavo,
 
Jean-Marc


---------------
OtObOxBlOg - - - Etre seul à avoir tort  c'est plus difficile, mais c'est bien plus beau que d'avoir raison avec une bande de cons
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed