VBA tester valeur de deux colonnes pour en copier une troisième

Résolu
margol Messages postés 6 Date d'inscription jeudi 1 septembre 2011 Statut Membre Dernière intervention 2 février 2012 - 2 févr. 2012 à 11:35
margol Messages postés 6 Date d'inscription jeudi 1 septembre 2011 Statut Membre Dernière intervention 2 février 2012 - 2 févr. 2012 à 15:47
Bonjour,

J'ai un fichier excel composé de deux feuilles.
Je souhaite tester la colonne B de la feuille 2 par rapport à la colonne B de la feuille 1, et si la boucle trouve des valeurs identiques entre les colonnes B des deux feuilles et que la colonne C de la feuille 1 n'est pas vide, je voudrais coller le texte de la colonne C,feuille 1 en colonne E feuille 2 (sur la ligne qui répond aux critères du test).
J'ai pompé un truc sur internet, mais ca me colle le texte (col C, feuille 1) en feuille 2, col E mais pas sur la bonne ligne.
De plus je n'ai pas réussi à insérer le test colonne C, feuil 1 non vide.
Pouvez-vous m'aider? merci.

feuil1 feuil2

colB colC colB ColC ColD
1 1
1 1
1 2
1 2
2 ahahah 3
2 3
2 3
3
3
2
2

7 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 févr. 2012 à 12:59
Bien (on y voit plus clair).
Mais alors :
Y.Range("B50").End(xlUp).Row ' faire toute la colonne B 

faire toute la colonne B n'est pas exact !

puisque row sera la dernière ligne remplie avant la ligne 50
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 févr. 2012 à 13:01
Hé ! (j'ai réagi trop vite, là !) :
Regarde donc la syntaxe de Countif !
le premier argument : la plage à fouiller
Le second : l'expression de valeur à compter !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 févr. 2012 à 15:00
Bon...
(je dois aller voir la mer).
De toutes manières :
1) il est assez maladroit ici d'utiliser CountIf, qui force à parcourir à tous coups la totalité de la plage (puisque doit compter). Il est moins maladroit d'utiliser la méthode Find (qui, elle, s'arrêtera au 1er trouvé, si trouvé). Bien que, personnellement, j'agirais encore autrement, mais bon.
2) quelle que soit la méthode, elle n'a de réel intérêt que li la colonne de la feuille de référence ne comporte elle-même aucun doublon. Sinon ... (devine !)
3) enfin et surtout : Quel est l'intérêt de faire une telle opération ? (je ne le vois pas vraiment). Peux-tu expliquer ton but final ?



____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
3
margol Messages postés 6 Date d'inscription jeudi 1 septembre 2011 Statut Membre Dernière intervention 2 février 2012
2 févr. 2012 à 11:37
c'est encore moi,

la macro que j'ai commencé et celle-là

Sub Commentaire()
Dim X As Worksheet, Y As Worksheet
Dim i As Long
Set X = Sheets("extraction")
Set Y = Sheets("TCD")

For i = 3 To Y.Range("B50").End(xlUp).Row ' faire toute la colonne B
If Application.WorksheetFunction.CountIf(Y.Range("b" & i), X.Range("b:b")) = 0 Then
X.Range("C" & i).Copy Destination:=Y.Range("d" & i).End(xlUp).Offset(1, 0)
End If
Next
MsgBox "Terminé"
End Sub
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 févr. 2012 à 11:50
Bonjour
et si la boucle trouve des valeurs identiques entre les colonnes B des deux feuilles

Et je ne vois pas, dans ton code, une telle recherche
Une chose est de comparer qu'une cellule d'une feuille est égale à l'autre, de même adresse sur l'autre feuille
Une autre chose est de vérifier que l'autre feuille ne contient pas déjà (n'importe où dans une colonne) la valeur testée (une cellule d'une colonne d'une feuille
Pas vraiment( claire, comme tu le vois, ta demande !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
0
margol Messages postés 6 Date d'inscription jeudi 1 septembre 2011 Statut Membre Dernière intervention 2 février 2012
2 févr. 2012 à 11:59
Je pensais que cette phrase permettait de valider la cohérence colB, feuil1 et col.B, feuil 2?

If Application.WorksheetFunction.CountIf(Y.Range("b" & i), X.Range("b:b")) = 0 Then


effectivement, je souhaite prendre la cellule B3 de la feuille 2 et parcourir toutes les cellules de la colonne B feuil1 et coller à chaque fois le texte se trouvant dans la cellule en colC si celle-ci n'est pas vide.
Puis tester la cell B4 de la feuil2 avec les mêmes conditions etc, la B5 etc....

Merci d'avance.
0
margol Messages postés 6 Date d'inscription jeudi 1 septembre 2011 Statut Membre Dernière intervention 2 février 2012
2 févr. 2012 à 15:47
Désolée pour la réponse tardive car j'étais retenue en réunion.

en fait ma feuille 1 s'alimente avec une extraction provenant d'un logiciel.(données écrasées chaque jour)
Ma feuille 2 est un Tableau croisé dynamique qui reprend les données de la feuille1 et une série de formule ainsi qu'une première macro permettant le contrôle des données de l'extraction (temps, moyenne, etc...).
Le lien entre la feuille 1 et la feuille 2 est un numéro de lot qui se répète entre 4 et 10 fois(lignes) (en colonne B feuil 1, et en colonne B, feuil2 en dehors du TCD), à ce numéro de lot se rapporte un commentaire lorsque les contrôles ne sont pas cohérents(col C, feuil1), c'est pourquoi j'ai besoin de rapporter ces commentaires en feuil2,col C.

Pour ce qui est du B50, c'était juste pour ne pas mouliner jusqu'à la 6500... au cas ou ma macro serait trop lourde.
0
Rejoignez-nous