Mise à jour d'une feuille à partir d'une autre feuille en vba

Mise à jour d'une feuille à partir d'une autre feuille en vba - VB/VBA/VBS - Programmation

Marsh Posté le 23-12-2008 à 17:59:24    

Bonsoir,
 
ça fait plusieurs jours que je bloque sur un problème de boucle en langage vba avec le logiciel excel !!!
 
Je souhaite mettre à jour la colonne 2 de ma feuil1 à partir de la colonne 2 de ma feuil2.
La 1ère colonne des deux feuilles sert de champ clé.
Il est impossible que les lignes de la feuil2 ne soit pas dans la feuil1.
 
En faite j'arrive seulement à mettre à jour le 1er champ clé de la feuil, après il ne modifie plus rien.
 
 
 
Sub pop()
 
Dim trouve As Boolean
 
 
x = 2 'x ligne de la feuil1
y = 2 'y ligne de la feuil2
 
Do While Worksheets("feuil1" ).Cells(x, 1) <> ""
If Worksheets("feuil1" ).Cells(x, 1) = Worksheets("feuil2" ).Cells(y, 1) Then
Worksheets("feuil1" ).Cells(x, 3) = worksheets("feuil2" ).cells(y,2)
 
 
End If
x = x + 1
Loop
 
 
 
End Sub
 
Pour info, je préfère do while à for car mon fichier n'aura pas forcément à l'avenir le même nombre de lignes.
 
quelqu'un peut-il m'aider ?
 
 
Merci et bonnes fêtes à tous

Reply

Marsh Posté le 23-12-2008 à 17:59:24   

Reply

Marsh Posté le 24-12-2008 à 00:01:06    

si j'ai bien compris ton code, car tes explications sont pas géniales,
 
tu veux, pour chaque ligne de la feuille 1, trouver la ligne de la feuille 2 ayant la meme valeur dans la colonne 1, et recopier la valeur de la colonne 2 de cette ligne dans la colonne 3 de la premiere feuille ?
 
si oui, il te faut 2boucles, dans ton code, tu as bien 2 variables, mais une seule boucle, ton y reste a 2, donc rajoute une deuxième boucle imbriqué:
 
Sub pop()
 
Dim trouve As Boolean
 
 
x = 2 'x ligne de la feuil1
 
Do While Worksheets("feuil1" ).Cells(x, 1) <> ""
y = 2 'faut la reinitialiser à chaque fois
Do While Worksheets("feuil1" ).Cells(y, 1) <> ""
If Worksheets("feuil1" ).Cells(x, 1) = Worksheets("feuil2" ).Cells(y, 1) Then
Worksheets("feuil1" ).Cells(x, 3) = worksheets("feuil2" ).cells(y,2)
 
 
End If
y = y + 1
Loop
x = x + 1
Loop
 
 
End Sub

Reply

Marsh Posté le 24-12-2008 à 07:18:19    

Bonjour,
si la macro ne t'est pas indispensable, pourquoi ne pas mettre:
=SIERREUR(RECHERCHEV(A1;Feuil2!A:B;2;FAUX);"" )
dans C2 de la feuil1 puis l'étendre sur la colonne??
Cordialement


Message édité par seniorpapou le 24-12-2008 à 07:19:16
Reply

Marsh Posté le 24-12-2008 à 07:55:10    

Oui merci Satirik, ça marche, il fallait y penser pour la réinitialisation du y !
 
en me relisant c'est vrai que je n'étais pas forcément très clair dans mes explications.
 
en tout cas merci pour ton aide tu m'enlèves une grosse épine dans mon pied et surtout bonnes fêtes
 
 
 
 
quotemsg=1831029,2,44483]si j'ai bien compris ton code, car tes explications sont pas géniales,
 
tu veux, pour chaque ligne de la feuille 1, trouver la ligne de la feuille 2 ayant la meme valeur dans la colonne 1, et recopier la valeur de la colonne 2 de cette ligne dans la colonne 3 de la premiere feuille ?
 
si oui, il te faut 2boucles, dans ton code, tu as bien 2 variables, mais une seule boucle, ton y reste a 2, donc rajoute une deuxième boucle imbriqué:
 
Sub pop()
 
Dim trouve As Boolean
 
 
x = 2 'x ligne de la feuil1
 
Do While Worksheets("feuil1" ).Cells(x, 1) <> ""
y = 2 'faut la reinitialiser à chaque fois
Do While Worksheets("feuil1" ).Cells(y, 1) <> ""
If Worksheets("feuil1" ).Cells(x, 1) = Worksheets("feuil2" ).Cells(y, 1) Then
Worksheets("feuil1" ).Cells(x, 3) = worksheets("feuil2" ).cells(y,2)
 
 
End If
y = y + 1
Loop
x = x + 1
Loop
 
 
End Sub [/quotemsg]

Reply

Sujets relatifs:

Leave a Replay

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