Macro pour comparer les cellules de deux colonnes

a.ammar.enr Messages postés 3 Date d'inscription mardi 29 mars 2016 Statut Membre Dernière intervention 30 mars 2016 - 29 mars 2016 à 15:29
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 - 30 mars 2016 à 11:20
Bonjour à toutes et à tous,

Pourriez-vous m'aider s'il vous plaît, mon problème est le suivant:

J'ai un fichier Excel contenant deux feuilles, Chaque feuille contient deux colonnes. Je veux créer un code me permettant de parcourir les i cellules de la colonne A1 de la feuille 1 et la comparer avec les j cellules de la colonne A2 de la feuille 2.

si A1(i) = A2(j) alors B1(i) = B2(j)

Après si après le parcours de la colonne A1 on ne trouve aucune cellule identique à celle de A2, je voudrais mettre en couleur cette cellule de la colonne A2.

Voilà tout,

Merci d'avance :)

3 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
Modifié par ucfoutu le 29/03/2016 à 23:53
Bonjour,
Que sont exactement A1, etc ... dans ton explication ?
parcourir les i cellules de la colonne A1

n'a par exemple aucun sens en Excel (aucune colonne A1) !!!
Si tu veux de l'aide, efforce-toi au moins de ne pas écrire n'importe quoi. Relis-toi.

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
a.ammar.enr Messages postés 3 Date d'inscription mardi 29 mars 2016 Statut Membre Dernière intervention 30 mars 2016
29 mars 2016 à 23:52
Bonsoir,

Désolé je me suis mal exprimé !

En fait A1 veut dire la colonne A de la feuille 1 et A2 la colonne A de la feuille excel 2.

Idem pour B1 et B2.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 30/03/2016 à 07:58
Hé bé !
On va essayer de traduire tout cela en langage simple et précis :
serait-ce ceci ? ===>>>
1) comparer le contenu de toute cellule de la colonne A de la feuil2
au contenu de chacune des cellules présentes dans l'une quelconque des cellules de la colonne A de la feuil1 ?
Et :
--si égalité ===>> attribuer à la cellule concernée de la colonne B de Feuil1 la valeur de la colonne B de Feuil2

--- si aucune occurrence trouvée ===>> colorier de rouge la cellule concernée de la colonne A de Feuil2
Réponse OUI ou réponse NON

2) Je ne comprends alors pas ton :
alors B1(i) = B2(j)

qui demeurerait assez imprécis, puisqu'à un i d'une colonne A pourraient correspondre plusieurs j de l'autre colonne A, ou inversement .
Ta démarche n'a de sens que si ET SEULEMENT SI aucun doublon n'est assurément présent dans chacune des colonnes A . Or, je ne vois dans tes explications aucune précision à ce sujet.

Veux-tu bien s'il te plait te montrer extrêmement précis quant à ce que contient chacune de tes deux colonnes A (nombre de lignes remplies, si triées ou non, si doublons ou non, si exactement les mêmes articles ou non , etc ...) ?
Et qui dit "colonne", dit la totalité des cellules d'une colonne. Quid (comment les traites-tu) des cellules vides des deux côtés(colonnes) ? Elles seront identiques en colonne A, mais pourraient être différentes en colonne B ...
Tu prends là la mesure de toutes tes imprécisions et de la nécessité d'utiliser les termes techniques. Une colonne est une plage de cellules (un Range), mais une plage de cellules d'une colonne n'est pas forcément une colonne.
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
a.ammar.enr Messages postés 3 Date d'inscription mardi 29 mars 2016 Statut Membre Dernière intervention 30 mars 2016
30 mars 2016 à 09:03
Bonjour,

La réponse à ta première question est OUI, t'as bien tout compris.

Parlons maintenant de la colonne A (Que ce soit dans la feuille 1 ou 2 puisque c'est le même format): La première chose à savoir c'est qu'il n'existe pas de doublons et j'en suis certain).

Prenons un exemple pour mieux comprendre:

Imaginons que dans la feuille 1 on a:

- Dans la colonne A: Le nom de villes de France.
- La colonne B: Elle est vide pour le moment

Dans la feuille 2 maintenant on a:

- Dans la colonne A: Le nom de villes de France.
- La colonne B: Le nombre d'habitants par ville.

Donc l'idée est de parcourir les villes de la Colonne A de la feuille 1 et les comparer avec les villes de la Colonne A de la feuille 2. S'il y a ressemblance, alors attribuer à la cellule concernée de la colonne B de Feuil1 la valeur de la colonne B de Feuil2, sinon colorier de rouge la cellule concernée de la colonne A de Feuil2.

Maintenant concernant les lignes, on va supposer que j'ai le même fichier pour la France que pour d'autre pays, donc le nombre de ligne varie et ça aussi c'est une problématique. Cependant, ce dont je suis certain c'est qu'il n'y ait pas de vide entre les cellules remplies. Pour résumer, je ne suis pas très connaisseur en algorithmique mais à mon avis il faudrait que le code puisse identifier pour la colonne A de chaque feuille (1 et 2), le nombre de ligne remplies (Je précise qu'il y a aucune cellule vide entre les cellules remplies pour toutes les colonnes).
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 30/03/2016 à 11:21
Bon ...
Je vais ici t'indiquer ce que tu dois connaître et utiliser :
- le rang (ligne) la_der_ligne de la dernière cellule remplie d'une colonne X de la feuille "toto" se détermine ainsi :
a_der_ligne = Worksheets("toto").Range("X" & Rows.Count).End(xlUp).Row

-on peut par courir ainsi la plage des lignes remplies de la colonne X :
Dim c As Range
For Each c In Worksheets("toto").Range("X1:X" & la_der_ligne)
MsgBox "en ligne " & c.Row & " : " & c.Value
Next

la propriété Value d'une cellule est accessible en lecture et écriture et s'exprime ainsi :
worksheets("...").range(....).value
- les propriétés .row et .column d'une cellule sont sa ligne et sa colonne
la propriété color de l'objet interior d'une cellule, accessible en lecture et écriture, s'exprime ainsi :
Worksheets("....").range(.....).interior.color

si on la met à vbred ===>>> cellule coloriée en rouge
- la méthode Find te permet de rechercher si une valeur est présente dans une plage de cellules. Ouvre ton aide VBA à la rubrique Range.Find, méthode et applique-la
le reste est- trop élémentaire (simples expressions conditionnelles) pour que je m'y étende ici (si tu y viens, c'est en qualité de développeur. Et, même débutant, ces bases sont à acquérir avant toute autre chose)
Voilà de quoi t'y mettre et te retrousser un peu les manches.
Reviens ici, si encore en difficulté malgré ces indications, avec le code tenté ...

________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Rejoignez-nous