VBA Application Match - pb avec matrice
Le
danielos

Bonjour,
J'ai une macro susceptible de comparer 2 colonnes qui fonctionne sauf
lorsque les clés dans Feuil2 n'existent pas dans Feuil3 ; J'ai une
erreur code 1004 qui bloque la macro.
Comment serait-il possible de ne pas tenir compte de ces lignes.
Dans ce classeur, je récupère (copier/coller) des données d'une bas=
e à
sur la Feuil1.
Avec la macro :
Je crée des clés uniques qui me serviront à comparer ces 2 feuilles=
.
Je copie les données de Feil1 dans Feuil3 (pour garder l'original des
données).
Je compare les clés existantes de Feuil2 par rapport aux clés de Feui=
l3
et lorsqu'elles existent, je supprime la ligne dans Feuil3 (je ne
conserve ainsi que les 'nouvelles' lignes - qui sont en fait des
inscriptions).
Pour expliquer qu'en Feuil2 on peut avoir des lignes qui ne sont pas
dans Feuil 3 (Feuil 1 en fait), c'est simplement des inscriptions qui
ont été annulées sur la base depuis la dernière visite.
Merci d'avance de toute aide sur la question.
Daniel
Voici mon code
Sub Feuil1_Vs_Feuil2()
'
'Définition des variables
Dim i As Long
Dim j As Long
Dim k As Long
Dim derlin As Long
Dim derling As Long
derlin = Sheets("Feuil3").Range("A" & Rows.Count).End(xlUp).Row
derling = Sheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Row
' Vide la feuille "Feuil3"
Sheets("Feuil3").Range("A:BH" & Rows.Count).ClearContents
' Création des Clés de contrôle qui serviront à comparer
'Call Creation_Cle_controle (NDRL cette macro fonctionne parfaitement
pour concaténer le contenu de 2 lignes et ainsi créer une clé uniqu=
e en
colonne BJ)
' Copie de la liste issue de la base de donnée et collée en "Feuil1" =
ainsi que les clés de contrôle vers la feuille "Feuil3" pour conserve=
r
le contenu sur "Feuil1"
Sheets("Feuil1").Select
Range("A1:BJ1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Feuil3").Select
Range("B1").Select
ActiveSheet.Paste
Range("A2").Select
'Ecrit 'Statut' en A1 dans la feuille "Feuil3"
Sheets("Feuil3").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = "Statut"
'Déselectionne les cellules dans la feuille "Feuil1"
Sheets("Feuil1").Select
Range("A1").Select
Application.CutCopyMode = False
' Recherche des nouvelles inscriptions
Sheets("Feuil3").Select
Range("A1").Select
j = 2
While Worksheets("Feuil2").Cells(j, 62) <> "" 'la colonne BJ =
est la 62ème.
i = WorksheetFunction.Match(Worksheets("Feuil2").Cells(j,
62).Value, Worksheets("Feuil3").Columns(63), 0) 'Comparaison de la
valeur des clés des feuilles "Feuil2" avec "Feuil3"
If Err Then i = 0
If i <> 0 Then
Worksheets("Feuil3").Rows(i).EntireRow.Delete Shift:=xlUp
'Supprime la ligne qui existe dans Feuil2
End If
j = j + 1 'On passe au traitement de la ligne suivante dans la
feuille "Feuil2"
Wend
' Mettre le statut 'Nouvelle inscription' dans la 1ère colonne
k = 2
While Not IsEmpty(Cells(k, 2))
If Cells(k, 2) <> "" Then Cells(k, 1) = "Nouvelle inscription"
k = k + 1
Wend
End Sub
J'ai une macro susceptible de comparer 2 colonnes qui fonctionne sauf
lorsque les clés dans Feuil2 n'existent pas dans Feuil3 ; J'ai une
erreur code 1004 qui bloque la macro.
Comment serait-il possible de ne pas tenir compte de ces lignes.
Dans ce classeur, je récupère (copier/coller) des données d'une bas=
e à
sur la Feuil1.
Avec la macro :
Je crée des clés uniques qui me serviront à comparer ces 2 feuilles=
.
Je copie les données de Feil1 dans Feuil3 (pour garder l'original des
données).
Je compare les clés existantes de Feuil2 par rapport aux clés de Feui=
l3
et lorsqu'elles existent, je supprime la ligne dans Feuil3 (je ne
conserve ainsi que les 'nouvelles' lignes - qui sont en fait des
inscriptions).
Pour expliquer qu'en Feuil2 on peut avoir des lignes qui ne sont pas
dans Feuil 3 (Feuil 1 en fait), c'est simplement des inscriptions qui
ont été annulées sur la base depuis la dernière visite.
Merci d'avance de toute aide sur la question.
Daniel
Voici mon code
Sub Feuil1_Vs_Feuil2()
'
'Définition des variables
Dim i As Long
Dim j As Long
Dim k As Long
Dim derlin As Long
Dim derling As Long
derlin = Sheets("Feuil3").Range("A" & Rows.Count).End(xlUp).Row
derling = Sheets("Feuil2").Range("A" & Rows.Count).End(xlUp).Row
' Vide la feuille "Feuil3"
Sheets("Feuil3").Range("A:BH" & Rows.Count).ClearContents
' Création des Clés de contrôle qui serviront à comparer
'Call Creation_Cle_controle (NDRL cette macro fonctionne parfaitement
pour concaténer le contenu de 2 lignes et ainsi créer une clé uniqu=
e en
colonne BJ)
' Copie de la liste issue de la base de donnée et collée en "Feuil1" =
ainsi que les clés de contrôle vers la feuille "Feuil3" pour conserve=
r
le contenu sur "Feuil1"
Sheets("Feuil1").Select
Range("A1:BJ1").Select
Range(Selection, Selection.End(xlDown)).Select
Selection.Copy
Sheets("Feuil3").Select
Range("B1").Select
ActiveSheet.Paste
Range("A2").Select
'Ecrit 'Statut' en A1 dans la feuille "Feuil3"
Sheets("Feuil3").Select
Range("A1").Select
ActiveCell.FormulaR1C1 = "Statut"
'Déselectionne les cellules dans la feuille "Feuil1"
Sheets("Feuil1").Select
Range("A1").Select
Application.CutCopyMode = False
' Recherche des nouvelles inscriptions
Sheets("Feuil3").Select
Range("A1").Select
j = 2
While Worksheets("Feuil2").Cells(j, 62) <> "" 'la colonne BJ =
est la 62ème.
i = WorksheetFunction.Match(Worksheets("Feuil2").Cells(j,
62).Value, Worksheets("Feuil3").Columns(63), 0) 'Comparaison de la
valeur des clés des feuilles "Feuil2" avec "Feuil3"
If Err Then i = 0
If i <> 0 Then
Worksheets("Feuil3").Rows(i).EntireRow.Delete Shift:=xlUp
'Supprime la ligne qui existe dans Feuil2
End If
j = j + 1 'On passe au traitement de la ligne suivante dans la
feuille "Feuil2"
Wend
' Mettre le statut 'Nouvelle inscription' dans la 1ère colonne
k = 2
While Not IsEmpty(Cells(k, 2))
If Cells(k, 2) <> "" Then Cells(k, 1) = "Nouvelle inscription"
k = k + 1
Wend
End Sub
j'ai fait des corrections dans ton code, pour ajouter le traitement
d'erreur. Mais je n'ai pas testé.
danielos submitted this idea :
on error goto pastrouvé
on error goto 0
exit sub
pasatrouvé:
i=0
resume next
erreur de frappe corrigée.
on error goto pastrouvé
on error goto 0
exit sub
pastrouvé:
i=0
resume next
Merci beaucoup de l'aide.
Daniel
h2so4 a écrit :