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
Questions / Réponses high-tech
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
h2so4
Le #25417812
bonjour,

j'ai fait des corrections dans ton code, pour ajouter le traitement
d'erreur. Mais je n'ai pas testé.



danielos submitted this idea :
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 base à 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 Feuil3 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é unique 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 conserver 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.


on error goto pastrouvé
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"


on error goto 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


exit sub
pasatrouvé:
i=0
resume next
End Sub
h2so4
Le #25417842
h2so4 presented the following explanation :
erreur de frappe corrigée.

j = 2
While Worksheets("Feuil2").Cells(j, 62) <> "" 'la colonne BJ
est la 62ème.




on error goto pastrouvé
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"




on error goto 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




exit sub
pastrouvé:
i=0
resume next
End Sub
danielos
Le #25417952
ça fonctionne,
Merci beaucoup de l'aide.
Daniel

h2so4 a écrit :
h2so4 presented the following explanation :
erreur de frappe corrigée.

j = 2
While Worksheets("Feuil2").Cells(j, 62) <> "" 'la colonne
BJ est la 62ème.




on error goto pastrouvé
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"




on error goto 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




exit sub
pastrouvé:
i=0
resume next
End Sub






Publicité
Poster une réponse
Anonyme