Comparer 2 feuilles Excel VBA

Fermé
Norman - 26 mai 2011 à 05:44
 Norman - 3 juin 2011 à 17:12
Bonjour,

Je fais appel à votre savoir, ô spécialistes de VBA.

Voici un problème de bureautique que je n'arrive pas à résoudre.

J'ai une première feuille Excel (FEUILLE1) avec 3 colonnes.

- La colonne 1 (NAME) est une liste d'investisseurs. Elle contient la totalité des investisseurs.
- La colonne 2 (SHARES) est le nombre d'actions. Aucune donnée renseignée dans la colonne.
- La colonne 3 (DATE) est... une date. Aucune donnée renseignée dans la colonne.

Ma seconde feuille (FEUILLE2) contient les mêmes colonnes mais seulement une partie des investisseurs. Ici, les données SHARES et DATE sont renseignées.

La première feuille est la trame utilisée pour l'ensemble des projets, la seconde est un projet. A chaque nouveau projet, j'obtiens la liste des investisseurs concernés.

Mon objectif est de comparer le contenu de NAME dans les 2 feuilles et de réaliser les opérations suivantes dans FEUILLE1 :

1. si NAME est identique*, conserver les lignes et supprimer ou masquer les autres
2. pour chaque ligne conservée, copier les données des colonnes SHARES et DATE
3. si des lignes sont dans FEUILLE2 et pas dans FEUILLE1, les copier dans FEUILLE1

* Les noms des investisseurs pouvant varier, la comparaison se fera sur les 2 premiers mots

Merci de votre aide !

Norman

A voir également:

8 réponses

melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
26 mai 2011 à 15:06
Bonjour,

j'aurais pu t'aider mais le problème vient du fait que les noms de tes investisseurs peuvent varier.

Je peux quand même te proposer une aide si et seulement si :
les deux premiers mots ont le même nombre de caractères pour tous les investisseurs.

Si tel n'est pas le cas, je vois pas trop comment faire.
0
Bonjour Mélanie,
Merci pour ta réponse !
Je te confirme que les 2 premiers mots ont le même nombre de caractères !
Allez, dis moi que tu peux m'aider ! :)
Norman
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
26 mai 2011 à 16:18
Alors la oui, donne moi le nombre de caractères des deux mots.
Je te donnerais le code demain matin!!!
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
26 mai 2011 à 16:19
De plus, tu dis :

si NAME est identique*, conserver les lignes et supprimer ou masquer les autres


dans quelles feuilles figurent-elles et faut il les masque rou les supprimer, les 2 étant faisables?
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
26 mai 2011 à 16:25
Conserver quelles lignes : celles de la feuille2 ou de la feuille1?
Conserver une seule ligne correspondant à un seul investisseur?
Supprimer ou masquer les autres?
Ce point n'est pas clair.
0

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

Posez votre question
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
26 mai 2011 à 16:36
En attendant tes réponses, voici un premier code.
enregistres une copie de ton fichier et vois ce que ca donne.
Pour info, j'ai fixé à 5 caractères les 2 premiers mots, si c'est pas ca, modifies.

Un conseil appuies sur F8 sur le code pour voir ce que ca fait!!

Sub x()

'Permet de supprimer tous les doublons de la feuille 1
a = 1
Do While Sheets("Feuil1").Cells(a, 1) <> ""
valeur = Left(Sheets("Feuil1").Cells(a, 1), 5)
i = a + 1
Do While Sheets("Feuil1").Cells(i, 1) <> ""
If valeur = Left(Sheets("Feuil1").Cells(i, 1), 5) Then ' 5 représente le nombre de caractères de tes deux mots, remplaces par celui que tu souhaites
Rows(i).Select
Selection.Delete Shift:=xlUp
i = i - 1
End If

i = i + 1
Loop
a = a + 1
Loop

i = 1
Do While Sheets("Feuil2").Cells(i, 1) <> ""
a = 1
b = ""
Do While Sheets("Feuil1").Cells(a, 1) <> ""
If Left(Sheets("Feuil2").Cells(i, 1), 5) = Left(Sheets("Feuil1").Cells(a, 1), 5) Then ' 5 représente le nombre de caractères de tes deux mots, remplaces par celui que tu souhaites
Sheets("Feuil1").Cells(a, 2) = Sheets("Feuil2").Cells(i, 2)
Sheets("Feuil1").Cells(a, 3) = Sheets("Feuil2").Cells(i, 3)
b = 1
End If
a = a + 1
Loop
If b = "" Then
Sheets("Feuil1").Cells(a, 1) = Sheets("Feuil2").Cells(i, 1)
Sheets("Feuil1").Cells(a, 2) = Sheets("Feuil2").Cells(i, 2)
Sheets("Feuil1").Cells(a, 3) = Sheets("Feuil2").Cells(i, 3)
End If
i = i + 1
Loop
End Sub
0
Merci beaucoup pour ton aide Mélanie !

Je vais essayer d'être plus clair, purée c'est pas simple de mettre à l'écrit un problème sur Excel. Si je n'y arrive toujours pas, je pourrais toujours t'envoyer le fichier, ça sera peut-être plus simple.

Bon allez, j'essaie quand même :)

J'ai 2 feuilles, FEUILLE1 et FEUILLE2 qui contiennent chacune une liste d'investisseurs dans une colonne qui s'appelle NAME. Ces feuilles contiennent également 2 autres colonnes qui s'appellent SHARES et DATE.

FEUILLE1 est ma trame et ne contient pas de données dans les colonnes SHARES et DATE, uniquement la liste complète des investisseurs. J'utilise FEUILLE1 car elle contient d'autres colonnes qui me servent pour autre chose.

FEUILLE2 contient les données qui m'intéressent et n'a que 3 colonnes : les investisseurs concernés dans NAME, le nombre d'actions dans SHARES et une date dans DATE. Je reçois ce document au début de chaque projet

Pour faire simple, je souhaite intégrer les lignes de FEUILLE2 dans FEUILLE1.

J'aimerais que ma macro compare les caractères de la colonne NAME des 2 feuilles et masque ou supprime les lignes dans FEUILLE1 qui ne sont pas dans FEUILLE2. Ces investisseurs ne participe pas au projet et ne doivent pas apparaître dans ma feuille.

Si les X premiers caractères d'une cellule sont similaires, je souhaite copier coller les données des colonnes SHARES et DATE de FEUILLE2 vers FEUILLE1.

Il peut également arriver que de nouveaux investisseurs viennent s'ajouter à la liste. Dans notre programme cela signifie qu'une chaîne de X caractères dans FEUILLE2 n'existe pas dans FEUILLE1. Dans ce cas je souhaite copier les 3 cellules NAME, SHARES et DATE de FEUILLE2 vers FEUILLE1.

Voici quelques exemples de ce qu'il peut y avoir dans la colonne NAME :

MERRILL LYNCH & CO
MERRILL LYNCH ASSET MGT
MERRILL LYNCH INVEST CDN
MERRILL LYNCH INVESTMENT MANAGEMENT (NJ)
MERRILL LYNCH INVESTMENT MANAGERS (UK) LTD.

5 caractères serait donc trop juste, j'ai fait le tour de la liste et 20 caractères fonctionne. J'espère que les espaces ne posent pas de problème.

Voila, j'espère avoir répondu à tes questions, n'hésite pas si tu as le moindre doute.

Et merci encore!

Norman
0
melanie1324 Messages postés 1505 Date d'inscription vendredi 25 mai 2007 Statut Membre Dernière intervention 31 janvier 2018 154
27 mai 2011 à 08:26
essaie avec ca :

Sub x()
'permet de renseigner les colonnes de tes investisseurs

i = 1
Do While Sheets("Feuil2").Cells(i, 1) <> ""
a = 1
b = ""
Do While Sheets("Feuil1").Cells(a, 1) <> ""
If Left(Sheets("Feuil2").Cells(i, 1), 20) = Left(Sheets("Feuil1").Cells(a, 1), 5) Then ' 5 représente le nombre de caractères de tes deux mots, remplaces par celui que tu souhaites
Sheets("Feuil1").Cells(a, 2) = Sheets("Feuil2").Cells(i, 2)
Sheets("Feuil1").Cells(a, 3) = Sheets("Feuil2").Cells(i, 3)
Sheets("Feuil1").Cells(a, 58) = "X"
b = 1
End If
a = a + 1
Loop
If b = "" Then
Sheets("Feuil1").Cells(a, 1) = Sheets("Feuil2").Cells(i, 1)
Sheets("Feuil1").Cells(a, 2) = Sheets("Feuil2").Cells(i, 2)
Sheets("Feuil1").Cells(a, 3) = Sheets("Feuil2").Cells(i, 3)
Sheets("Feuil1").Cells(a, 58) = "X"
End If
i = i + 1
Loop


'Permet de supprimer les investisseurs qui ne figurent pas dans feuil2 :

i = 1
Do While Sheets("Feuil1").Cells(i, 1) <> ""
If Sheets("Feuil1").Cells(i, 58) <> "X" Then
Sheets("Feuil1").Select
Rows(i).Select
Selection.Delete Shift:=xlUp
Else
Sheets("Feuil1").Cells(i, 58) = ""
End If
i = i + 1
Loop
End Sub
0
Bonjour Mélanie,

Merci beaucoup pour ton code ! Ça marche ! :)

La copie fonctionne bien, par contre je dois lancer la macro 5 ou 6 fois pour que tous les doublons soient supprimés. Peut-être un problème dans la boucle?

2 nouvelles questions :

- Est-il possible de masquer les lignes plutôt que de les supprimer?

- Dans le cas où des nouveaux investisseurs sont dans la FEUILLE2 et pas dans la FEUILLE1 (dans notre programme cela signifie qu'une chaîne de X caractères dans FEUILLE2 n'existe pas dans FEUILLE1), je souhaiterais insérer une ligne et copier les 3 cellules NAME, SHARES et DATE de FEUILLE2 vers FEUILLE1.

Tiens moi au courant quand tu as un moment pour regarder ça !

Et merci encore
0