VLookup dans une macro excel

Résolu/Fermé
Ménilmuche Messages postés 18 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 4 février 2013 - 29 janv. 2013 à 13:10
Ménilmuche Messages postés 18 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 4 février 2013 - 4 févr. 2013 à 13:03
Bonjour à tous,

J'ai toujours trouvé réponse à mes questions sur ce site, c'est pourquoi je viens encore chercher de l'aide.

Je travaille sur Excel 2000 (eh oui !!)

J'ai un fichier (P) de 36 000 enregistrements de type adresse et un autre (R) de 5 000 avec les mêmes colonnes mais qui sont des enregistrements à supprimer DANS P.

En clair, je souhaite que la macro recherche dans P successivement tous les enregistrements de R et qu'une fois trouvé, la ligne de P soit supprimée.

Après des recherches et des consultations de forums, j'ai essayé d'écrire ma macro que je vous recopie ici :

Sub SupprimR()
'
' SupprimR Macro
'

Dim wshR As Worksheet
Dim wshP As Worksheet

Derlig = Range("A" & Rows.Count).End(xlUp).Row

For i = Derlig To 3 Step -1
If WorksheetFunction.VLookup("R!A2", "P!A1:H5334", 1, False) = wshR.Range("A2") Then
Rows(i).Delete
End If
Next
End Sub

Bien évidemment ça ne fonctionne pas, la ligne qui commence par If est surlignée en jaune et c'est tout !

Merci d'avance à tous ceux qui prendront attention à cet appel au secours !

3 réponses

Ménilmuche Messages postés 18 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 4 février 2013
29 janv. 2013 à 13:16
J'ai oublié de signaler que je voulais faire un essai sur une colonne pour voir si cela fonctionnait mais en réalité toutes les colonnes de P doivent être testées car il peut y avoir des homonymes complets mais qui sont à des adresses différentes.
Si c'est OK pour une cellule, j'ajouterai des "And" !

J'attends impatiemment votre aide. Merci d'avance.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 29/01/2013 à 17:24
bonjour,

les identifiants sont ils bien colonne A ?

combien il y a t il de colonnes dans tes tableaux ?

Tu parjles de fichiers puis tu déclares des feuilles ..... ?

La première ligne est elle utilisée pour des nomS de champs ?

Michel
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
29 janv. 2013 à 17:35
Merci de mettre un extrait de tes 2 feuilles (5000 lignes et 500 suffiront)
pour joindre une pièce
mettre le classeur sans données confidentielles en pièce jointe sur
https://www.cjoint.com/
puis copier l'adresse du lien et la coller dans le message de réponse
0
Ménilmuche Messages postés 18 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 4 février 2013
30 janv. 2013 à 10:25
Bonjour et un grand merci michel_m pour l'intérêt que tu portes à mon problème.

Voici le lien vers mon fichier :
https://www.cjoint.com/?0AEkuiOVUSR

Je cherche donc à supprimer les enregistrements de P qui sont exactement identiques à ceux de R.

À bientôt j'espère !
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
Modifié par michel_m le 30/01/2013 à 10:48
Bonjour,

OK bien reçu, merci

La recherche se fait uniquement sur la colonne A ou....?

edit: annulé j'avais oublié! tu avais indiqué sur toutes les colonnes

Je regarde dès que possible, sois patient....
0
Ménilmuche Messages postés 18 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 4 février 2013
30 janv. 2013 à 10:58
J'attends sereinement, merci encore !
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
30 janv. 2013 à 15:47
Code brut de fonderie (le code sera commenté si OK)
durée pour 500 R: 10 secondes peut-^tre astuce pour rapidité dans mes cartons

Sub supprimer_PsiR()
Dim T_r(), T_p(), D_r As Object, D_p As Object
Dim decal As Long, Cptr As Long, Ligne As Long
Dim start As Single

start = Timer
Application.ScreenUpdating = False

 créer_dico_concat "R", T_r, D_r
 T_keyR = D_r.keys
 créer_dico_concat "P", T_p, D_p
 T_keyP = D_p.keys
 Erase T_r, T_p
 
While D_r.Count > 0
     decal = 1
     For Cptr = LBound(T_keyR) To UBound(T_keyR)
          Ref = T_keyR(Cptr)
          If D_p.exists(Ref) Then
               Ligne = Application.Match(Ref, T_keyP, 0) + decal
               Sheets("P").Rows(Ligne).Delete
               decal = decal - 1
          End If
          D_r.Remove Ref
     Next
Wend
Application.ScreenUpdating = True
MsgBox "durée : " & Timer - start & " .sec."
End Sub

'--------------------------

Sub créer_dico_concat(onglet, tablo, dico)
Dim Derlig As Long, Lig As Long, Col As Byte, Ref As String
With Sheets(onglet)
     Derlig = .Columns("A").Find("*", , , , , xlPrevious).Row
     tablo = .Range("A2:H" & Derlig).Value
     
     Set dico = CreateObject("scripting.dictionary")
     For Lig = 1 To UBound(tablo)
          Ref = ""
          For Col = 1 To 8
               Ref = Ref & tablo(Lig, Col)
          Next
               If Not dico.exists(Ref) Then dico.Add Ref, ""
     Next

End With

End Sub


Je dois m'absenter pour 1 heure ou 2 (ou 3!)

0
Ménilmuche Messages postés 18 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 4 février 2013
30 janv. 2013 à 16:49
SUPER !!! C'est magique et jamais je n'aurais pu trouver cela !

Merci, merci, mille mercis !

Et en plus ça se fait en un temps record. Génialissime !

Michel, t'es un as !

Je ne sais pas si je marque Résolu si tu veux apporter des commentaires ?

Je ne serai dispo qu'à partir de 14 h demain.
0
michel_m Messages postés 16603 Date d'inscription lundi 12 septembre 2005 Statut Contributeur Dernière intervention 16 décembre 2023 3 310
1 févr. 2013 à 13:57
Bonjour,

J'ai annulé la série de messages suivant ta demande :o)

Si tu n'avais pas copier le code, fais signe
0
Ménilmuche Messages postés 18 Date d'inscription mardi 15 janvier 2008 Statut Membre Dernière intervention 4 février 2013
4 févr. 2013 à 13:03
Bonjour Michel,

Quel bonheur d'avoir affaire à des gens de ta sorte ! J'apprécie infiniment ton aide et ta disponibilité ainsi que ton efficacité.
Avec le fichier complet, la macro se déroule en 4,75 mn. Ce qui est vraiment extra.

Par contre, j'ai une différence de 108 enregistrements en plus par rapport au résultat attendu. Je vais creuser un peu et éventuellement te recontacter si je ne trouve pas la raison.

À + !
0