Comparaison de données dans 2 fichiers distincts

brounch

XLDnaute Nouveau
Bonjour à toutes et à tous,

J'ai un petit problème en ce moment sur excel pour lier deux fichiers différents. Dans mon fichier A, je dois faire une sélection de références dans une colonne.

Mon fichier B comporte les mêmes références, mais celles-ci ne sont pas dans le même ordre. Le but ici est donc de trouver un moyen pour qu'une macro me renvoie les lignes où se trouvent dans mon fichier B, les quelques références que j'ai sélectionné dans mon fichier A.

Je crois savoir qu'il est possible de faire ça avec la fonction MATCH, mais je n'arrive pas à la faire fonction entre deux fichiers, et avec une sélection qui n'est pas forcément une plage type A1:G13, mais plutôt, sur une même colonne mais à des lignes différentes.

Merci d'avance à vous,

Bruno
 

vgendron

XLDnaute Barbatruc
Re : Comparaison de données dans 2 fichiers distincts

Bonjour Bruno,

Sans fichier exemple, ca va etre dur pour nous de t'aider..
plutot que la fonction Match, tu peux aussi utiliser la fonction find: l'aide (F1) de VBA te donne meme un exemple que tu peux adapter à tes ranges
 

brounch

XLDnaute Nouveau
Re : Comparaison de données dans 2 fichiers distincts

Bonjour vgendron,

merci pour ta réponse. Je sais bien qu'il est difficile de répondre sans fichier exemple, mais je ne peux pas envoyer les fichiers types de ma boite puisqu'ils sont confidentiels. Mais je pense qu'il n'est pas difficile de reproduire le cas de figure en copiant dans un fichier A des valeurs dans une colonne, et les mêmes dans le fichier B, mais pas dans le même ordre.

Je vais essayer ta solution et je te donne des nouvelles, merci encore.

Voilà par exemple ce que ça pourrait donner:
 

Pièces jointes

  • Archive.zip
    40.7 KB · Affichages: 29
  • Archive.zip
    40.7 KB · Affichages: 28
  • Archive.zip
    40.7 KB · Affichages: 28
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Comparaison de données dans 2 fichiers distincts

essaie ce code

Code:
Sub cherche()


ValeurCherchée = ActiveCell.Value
MsgBox ("on cherche la présence de la valeur: ") & ValeurCherchée

With Workbooks("fichierB.xlsx").Sheets("Sheet1").Range("A:A")

 Set trouve = .Find(ValeurCherchée)
 If Not trouve Is Nothing Then
    c = trouve.Row
End If
End With

 MsgBox ("la valeur cherchée est trouvée en ligne: ") & c
 
End Sub

avant de lancer la macro, clique sur une des lignes de la colonne A (qui contient une valeur)
PS: il faut que les deux fichiers soient ouverts
 

brounch

XLDnaute Nouveau
Re : Comparaison de données dans 2 fichiers distincts

OK, j'ai testé ton code, ça marche parfaitement, mais ça ne répond pas exactement au besoin.

Le résultat cherché est celui-là, mais ce doit être possible pour plusieurs cellules sélectionnées, et non simplement la cellule active.
 

vgendron

XLDnaute Barbatruc
Re : Comparaison de données dans 2 fichiers distincts

en fait ton besoin n'est pas clairement expliqué..

ce que je devine;
tu veux pouvoir selectionner les valeurs que tu souhaites chercher dans le deuxième fichier...??
après.. tu ne dis pas ce que tu veux faire..

teste ceci
Code:
Sub cherche()

Dim val As Range

Set ValeursCherchées = Application.InputBox("selectionnez la ou les ligne(s) à chercher", Type:=8)
For Each val In ValeursCherchées
    
ValEnCours = val.Value
MsgBox ("on cherche la présence de la valeur: ") & ValEnCours

With Workbooks("fichierB.xlsx").Sheets("Sheet1").Range("A:A")

 Set trouve = .Find(ValEnCours)
 If Not trouve Is Nothing Then
    c = trouve.Row
End If
End With

 MsgBox ("la valeur cherchée est trouvée en ligne: ") & c
 Next val

End Sub


PS: tu peux faire une sélection multiple avec la touche Ctrl
 

vgendron

XLDnaute Barbatruc
Re : Comparaison de données dans 2 fichiers distincts

petite modif: au cas ou la valeur cherchée n'existe pas

Code:
Sub cherche()

Dim val As Range

'sélection des différentes valeurs par l'utilisateur
Set ValeursCherchées = Application.InputBox("selectionnez la ou les ligne(s) à chercher", Type:=8)

'parcours de la selection pour rechercher chaque valeur
For Each val In ValeursCherchées
    ValEnCours = val.Value
    'affichage juste pour control de la valeur cherchée
    MsgBox ("on cherche la présence de la valeur: ") & ValEnCours
    
    With Workbooks("fichierB.xlsx").Sheets("Sheet1").Range("A:A")
        Set trouve = .Find(ValEnCours)
        If Not trouve Is Nothing Then
            c = trouve.Row
            'affichage de la ligne où a été trouvée la valeur dans le fichier B
            MsgBox ("la valeur cherchée est trouvée en ligne: ") & c
        Else: MsgBox ("la valeur " & ValEnCours & " n'existe pas dans le fichier")
        End If
    End With
Next val
End Sub
 

brounch

XLDnaute Nouveau
Re : Comparaison de données dans 2 fichiers distincts

Oui pardon, je me rend compte que je suis peut-être allé un peu vite dans l'explication de mon problème, et je te remercie d'essayer quand même de me fournir une réponse.

Encore une fois, je suis bluffé par la rapidité de ta réponse et par le fait que le code marche parfaitement. Je me rends simplement compte que l'affichage dans un msgbox du retour de la ligne n'est pas adapté. Est-il possible, au lieu d'un msgbox, d'afficher les valeurs trouvées dans c, successivement dans les cellules de la colonne C ?

J'ai essayé ça:

Code:
Sub cherche()
Dim val As Range
Dim i As Integer, nb As Integer

'sélection des différentes valeurs par l'utilisateur
Set ValeursCherchées = Application.InputBox("selectionnez la ou les ligne(s) à chercher", Type:=8)

'parcours de la selection pour rechercher chaque valeur
For Each val In ValeursCherchées
    ValEnCours = val.Value
    'affichage juste pour control de la valeur cherchée
    MsgBox ("on cherche la présence de la valeur: ") & ValEnCours
    
    With Workbooks("fichierB.xlsx").Sheets("Sheet1").Range("A:A")
        Set trouve = .Find(ValEnCours)
        If Not trouve Is Nothing Then
            c = trouve.Row
            'affichage de la ligne où a été trouvée la valeur dans le fichier B
            MsgBox ("la valeur cherchée est trouvée en ligne: ") & c
        Else: MsgBox ("la valeur " & ValEnCours & " n'existe pas dans le fichier")
        End If
    End With
    Next val
    
    nb = Application.WorksheetFunction.Count(ValeursCherchées)
    
    i = 1
    
    Do While i < nb
        Cells(i, 3).Value = c
        i = i + 1
    Loop
    
End Sub

mais ça me renvoi dans les cellules de la colonne C simplement la dernière valeur de c
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Comparaison de données dans 2 fichiers distincts

normal, la valeur c est modifiée à chaque itération dans le for each---Next
et il n'y a aucune "sauvegarde" de tous les résultats de recherche..

il te suffit donc juste de sauvegarder au fur et à mesure, à la place du message box que j'ai mis en commentaire pour le désactiver..
ce qui donne:

Code:
Sub cherche()

Dim val As Range

'sélection des différentes valeurs par l'utilisateur
Set ValeursCherchées = Application.InputBox("selectionnez la ou les ligne(s) à chercher", Type:=8)

'parcours de la selection pour rechercher chaque valeur
For Each val In ValeursCherchées
    ValEnCours = val.Value
    'affichage juste pour control de la valeur cherchée
    MsgBox ("on cherche la présence de la valeur: ") & ValEnCours
    
    With Workbooks("fichierB.xlsx").Sheets("Sheet1").Range("A:A")
        Set trouve = .Find(ValEnCours)
        If Not trouve Is Nothing Then
            c = trouve.Row
            'affichage de la ligne où a été trouvée la valeur dans le fichier B
            'MsgBox ("la valeur cherchée est trouvée en ligne: ") & c
            Cells(val.Row, 3) = c
        Else: MsgBox ("la valeur " & ValEnCours & " n'existe pas dans le fichier")
        End If
    End With
Next val
End Sub
 

brounch

XLDnaute Nouveau
Re : Comparaison de données dans 2 fichiers distincts

Parfait ! Je pense essayer de faire quelque modifs, et je reviendrais vers vous si je rencontre des problèmes que je n'arrive pas ç surmonter.

Merci beaucoup pour votre aide précieuse
 

brounch

XLDnaute Nouveau
Re : Comparaison de données dans 2 fichiers distincts

J'ai remplacé dans le code à la ligne:

With Workbooks("fichierB.xlsx").Sheets("Sheet1").Range("A:A")

le range par:

With Workbooks("fichierB.xlsx").Sheets("Sheet1").Range("D: D")

Pour que cela marche, faut-il nécessairement que les deux colonnes soient les mêmes, et qu'elles soient dans la colonne A forcément ?

Merci d'avance

Edit: Visiblement ce n'est pas ça puisque j'ai essayer dans mes fichiers A et B et ça marche très bien, je ne sais pas pourquoi ça ne marche pas quand je test avec mes vrais fichiers... Mais c'est bien sur cette ligne qu'il y a un soucis.

Je ne sais pas si cela peut aider, il me met comme message "subscript out of range"
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Comparaison de données dans 2 fichiers distincts

Salut:

suis pas sur.. mais enlève les espaces en trop dans ta syntaxe au niveau de Range apparemment ca fait planter.

With Workbooks("fichierB.xlsx").Sheets("Sheet1").Range( "D: D")
devient

With Workbooks("fichierB.xlsx").Sheets("Sheet1").Range("D:D")
 

brounch

XLDnaute Nouveau
Re : Comparaison de données dans 2 fichiers distincts

Salut,

En fait, l'espace du deuxième D dans mon range c'est parce que ça m'affichait un smiley du coup je l'ai rajouté. Mais il n'y en a pas dans mon fichier.

J'ai cette ligne:
Code:
With Workbooks("deviscopie.xlsx").Sheets("Sheet1").Range( "D:D")

J'ai essayé en changeant sheet1 par Page 1 (puisque c'est le nom de la feuille), mais le problème est toujours le même.
 
Dernière édition:

vgendron

XLDnaute Barbatruc
Re : Comparaison de données dans 2 fichiers distincts

pour désactiver les smiley tu peux aller en mode avancé (sous la fenetre de saisie du post) et tu cliques sur "désactiver les smiley dans le message"

du coup.. je vois pas bien ce qui peut provoquer ton erreur..

est ce que ta colonne D a exactement le meme format que ta colonne A?
y aurait il une celulle fusionnée: VBA n'aime pas trop ces cellules...
 

brounch

XLDnaute Nouveau
Re : Comparaison de données dans 2 fichiers distincts

Non, il n'y a aucune cellule fusionnée, je ne comprends pas d'où peut venir ce problème. Les fichiers sont tous les deux dans le même répertoire (sur le bureau) et quand je teste la macro, les deux fichiers sont ouverts...

J'ai une autre demande qui vient de mes supérieur, finalement la solution précédente ne leur va pas. Ils veulent que la macro me trouve dans le fichierB les éléments sélectionnés dans le fichierA, et qu'elle les colorent.

J'ai essayé ça:
Code:
Cells(val.Row, 1).Interior.ColorIndex = 4

mais ça me colore les lignes sélectionnées dans mon fichierA et non dans mon fichierB
 
Dernière édition:

Discussions similaires

Réponses
6
Affichages
295

Statistiques des forums

Discussions
312 836
Messages
2 092 656
Membres
105 480
dernier inscrit
Galbius