VBA tester valeur de deux colonnes pour en copier une troisième [Résolu]

Messages postés
6
Date d'inscription
jeudi 1 septembre 2011
Statut
Membre
Dernière intervention
2 février 2012
- - Dernière réponse : 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
Afficher la suite 

7 réponses

Meilleure réponse
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 191 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
6
Date d'inscription
jeudi 1 septembre 2011
Statut
Membre
Dernière intervention
2 février 2012
0
Merci
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
Commenter la réponse de margol
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
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
Commenter la réponse de ucfoutu
Messages postés
6
Date d'inscription
jeudi 1 septembre 2011
Statut
Membre
Dernière intervention
2 février 2012
0
Merci
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.
Commenter la réponse de margol
Messages postés
6
Date d'inscription
jeudi 1 septembre 2011
Statut
Membre
Dernière intervention
2 février 2012
0
Merci
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.
Commenter la réponse de margol