Vba : comparer 2 colonnes de 2 fichiers
bonzai7584
-
Bidouilleu_R Messages postés 1181 Date d'inscription Statut Membre Dernière intervention -
Bidouilleu_R Messages postés 1181 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je cherche à comparer les données d'une colonne (colonne D dont le nombre de ligne i variable) pour voir si elles font bien parties d'une autre source (dans ce script c'est sur la colonne O).
J'ai réussi à programmer quelques chose, cela fonctionne mais avec des colonnes sur le même onglet.
Quand je cherche à déplacer la source vers un autre fichier (la colonne O vers un autre fichier Fichier2.xls) je n'y arrive plus. La fonction find ne suit plus. Pouvez-vous svp m'aider ?
Je serai vraiment soulagée...
Sub vérif()
'
'Vérification des centres
Dim i As Integer
Dim Mavaleur As String
Sheets("Base").Select
n = ActiveSheet.UsedRange.Rows.Count
For i = 2 To n
Mavaleur = Range("D" & i)
Set c = Range("O3:O" & Range("O65000").End(xlDown).Row).Find(Mavaleur, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
Sheets("Base").Range("M" & i) = "centre OK"
Else
Sheets("Base").Range("M" & i) = "centre pas OK"
End If
Next
End Sub
Je voudrais que le set c puisse aller chercher sur classeur 2, mais
Set c = Windows("classeur2.xls).Sheets("liste").Range("A1:A" & Range("A65000").End(xlDown).Row).Find(Mavaleur, LookIn:=xlValues, lookat:=xlWhole) ne fonctionne pas...
Merci d'avance
Je cherche à comparer les données d'une colonne (colonne D dont le nombre de ligne i variable) pour voir si elles font bien parties d'une autre source (dans ce script c'est sur la colonne O).
J'ai réussi à programmer quelques chose, cela fonctionne mais avec des colonnes sur le même onglet.
Quand je cherche à déplacer la source vers un autre fichier (la colonne O vers un autre fichier Fichier2.xls) je n'y arrive plus. La fonction find ne suit plus. Pouvez-vous svp m'aider ?
Je serai vraiment soulagée...
Sub vérif()
'
'Vérification des centres
Dim i As Integer
Dim Mavaleur As String
Sheets("Base").Select
n = ActiveSheet.UsedRange.Rows.Count
For i = 2 To n
Mavaleur = Range("D" & i)
Set c = Range("O3:O" & Range("O65000").End(xlDown).Row).Find(Mavaleur, LookIn:=xlValues, lookat:=xlWhole)
If Not c Is Nothing Then
Sheets("Base").Range("M" & i) = "centre OK"
Else
Sheets("Base").Range("M" & i) = "centre pas OK"
End If
Next
End Sub
Je voudrais que le set c puisse aller chercher sur classeur 2, mais
Set c = Windows("classeur2.xls).Sheets("liste").Range("A1:A" & Range("A65000").End(xlDown).Row).Find(Mavaleur, LookIn:=xlValues, lookat:=xlWhole) ne fonctionne pas...
Merci d'avance
A voir également:
- Vba : comparer 2 colonnes de 2 fichiers
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Mkdir vba ✓ - Forum VB / VBA
- Dépassement de capacité vba ✓ - Forum Excel
3 réponses
voilà un code qui va t'aider
analyse et adapte
' j'ai déplacé la fonction dans une procedure
et la variable trouve dis si tu trouve ou pas.
tiens moi aucourant
Public Trouve As Boolean
Public Nom1 As String
Public Nom2 As String
Sub essai()
Dim i As Integer
Dim Mavaleur As String
Dim N As Integer
'j'ouvre les deux classeur
Nom1 = ThisWorkbook.Name 'Fichier1.xls
Workbooks.Open Filename:= _
"C:\DATA\Works_In_Progress\Informatique\Roger\Fichier2.xls"
Nom2 = ActiveWorkbook.Name ' fichier2.xls
Windows(Nom1).Activate
'Vérification des centres
Sheets("Base").Select
N = ActiveSheet.UsedRange.Rows.Count
For i = 2 To N
Mavaleur = Range("D" & i)
Trouve = False
If Mavaleur <> "" Then
Trouve_La_Valeur Mavaleur
If Trouve Then
' on a trouvé
Sheets("Base").Range("M" & i) = "centre OK"
Else
' on a rien trouvé
Sheets("Base").Range("M" & i) = "centre pas OK"
End If
End If
Next
'fermer le classeur pour éviter l'erreur s'il est déjà ouvert
Workbooks(Nom2).Close
End Sub
Sub Trouve_La_Valeur(Val_c)
Windows(Nom1).Activate
Sheets("base").Select
Range("C2").Select
Application.ScreenUpdating = False
With Worksheets("base").Range("O2:O" & N + 1)
Set Ce = .Find(Val_c, LookIn:=xlValues) ' trouve Le_Global_Code
If Not Ce Is Nothing Then
Trouve = True
End If
End With
If Not Trouve Then
' on cherche sur l'autre classeur
Windows(Nom2).Activate
Nlig = Range("A1").CurrentRegion.Rows.Count ' la plage de la feuille liste
With Worksheets("Liste").Range("A2:A" & Nlig + 1)
Set Ce = .Find(Val_c, LookIn:=xlValues) ' trouve La valeur fichier2
If Not Ce Is Nothing Then
Trouve = True
End If
End With
End If
Windows(Nom1).Activate
End Sub
analyse et adapte
' j'ai déplacé la fonction dans une procedure
et la variable trouve dis si tu trouve ou pas.
tiens moi aucourant
Public Trouve As Boolean
Public Nom1 As String
Public Nom2 As String
Sub essai()
Dim i As Integer
Dim Mavaleur As String
Dim N As Integer
'j'ouvre les deux classeur
Nom1 = ThisWorkbook.Name 'Fichier1.xls
Workbooks.Open Filename:= _
"C:\DATA\Works_In_Progress\Informatique\Roger\Fichier2.xls"
Nom2 = ActiveWorkbook.Name ' fichier2.xls
Windows(Nom1).Activate
'Vérification des centres
Sheets("Base").Select
N = ActiveSheet.UsedRange.Rows.Count
For i = 2 To N
Mavaleur = Range("D" & i)
Trouve = False
If Mavaleur <> "" Then
Trouve_La_Valeur Mavaleur
If Trouve Then
' on a trouvé
Sheets("Base").Range("M" & i) = "centre OK"
Else
' on a rien trouvé
Sheets("Base").Range("M" & i) = "centre pas OK"
End If
End If
Next
'fermer le classeur pour éviter l'erreur s'il est déjà ouvert
Workbooks(Nom2).Close
End Sub
Sub Trouve_La_Valeur(Val_c)
Windows(Nom1).Activate
Sheets("base").Select
Range("C2").Select
Application.ScreenUpdating = False
With Worksheets("base").Range("O2:O" & N + 1)
Set Ce = .Find(Val_c, LookIn:=xlValues) ' trouve Le_Global_Code
If Not Ce Is Nothing Then
Trouve = True
End If
End With
If Not Trouve Then
' on cherche sur l'autre classeur
Windows(Nom2).Activate
Nlig = Range("A1").CurrentRegion.Rows.Count ' la plage de la feuille liste
With Worksheets("Liste").Range("A2:A" & Nlig + 1)
Set Ce = .Find(Val_c, LookIn:=xlValues) ' trouve La valeur fichier2
If Not Ce Is Nothing Then
Trouve = True
End If
End With
End If
Windows(Nom1).Activate
End Sub
Merci beaucoup ! Désolée, j'ai mis un peu de temps à répondre car je devais finir cette marco et d'autres en même temps.
Cela fonctionne bien sur une petite sélection. J'ai du alléger le code car ma macro beuguait avec 30 000 lignes à vérifier..J'ai fait un copy/paste sur un onglet intermédiaire pour éviter que le traitement soit obligé d'aller piocher dans un autre fichier.
Merci encore !
Bonzai
Cela fonctionne bien sur une petite sélection. J'ai du alléger le code car ma macro beuguait avec 30 000 lignes à vérifier..J'ai fait un copy/paste sur un onglet intermédiaire pour éviter que le traitement soit obligé d'aller piocher dans un autre fichier.
Merci encore !
Bonzai