comparer 2 BDD question sur procédure

Blafi

XLDnaute Occasionnel
Bonjour à tous les forumeurs et bon dimanche,

J'ai 3 questions sur une procédure trouvée sur le forum qui me sert à comparer le contenu de 2 bases de données pour en extraire les enregistrements qui sont présents (et identiques) dans les 2 bases (mille excuses à son auteur dont je n'arrive pas à retrouver le pseudo..)

Voilà cette procédure :

Sub SupLigneDoublonDans2emeClasseur()
Dim MaPlage1 As Range, MaPlage2 As Range, l1 As Long, l2 As Long, MesLignes As Integer

Application.ScreenUpdating = False

Set MaPlage1 = Range([A1], [A1].End(xlDown))
Windows("classeur2.xls").Activate
Set MaPlage2 = Range([A1], [A1].End(xlDown))
Windows("classeur1.xls").Activate

MesLignes = MaPlage2.Rows.Count

For l1 = 2 To MaPlage1.Rows.Count
For l2 = 2 To MesLignes
If MaPlage1(l1, 1).Value = MaPlage2(l2, 1).Value Then _
MaPlage2(l2, 1).EntireRow.Delete: MesLignes = MesLignes - 1
Next l2
Next l1

Application.ScreenUpdating = True

End Sub

Et mes 3 questions :

1/ à la ligne "set MaPlage1=range([A1], [A1].end(xldown))" il s'agit de la définition d'une variable, mais s'agit-il d'une variable tableau à plusieurs dimensions ?

2/ Quelle est l'utilité de mettre A1 entre crochets [] plutôt qu'entre guillements "" comme on le fait généralement?

3/dans les lignes suivantes (à l'intérieur des boucles) l'expression "MaPlage1(l1,1)" fait-elle référence à la cellule (l1,1) de MaPlage c'est à dire à la cellule de la ligne l1 et de la colonne 1?. En d'autres termes, si je mettais (l1,2) est-ce que je ferais référence à la cellule de MaPlage située en ligne l1 et en colonne 2 ?

Votre réponse pourra m'aider à déméler les choses dans mon esprit.... car je cherche en fait à tester mes 2 bases de données sur la correspondance des cellules de colonne A et B (nom et prénom) afin de trouver les doublons qui auraient le même nom ET le même prénom dans les 2 BDD...

Merci d'avance et à bientôt..
 

ChTi160

XLDnaute Barbatruc
Re : comparer 2 BDD question sur procédure

Salut Blafi :p
bonjour le Forum

je vais tenter de répondre à tes interrogations à mon niveau lol

1/ à la ligne "set MaPlage1=Range([A1], [A1].end(xldown))" il s'agit de la définition d'une variable, mais s'agit-il d'une variable tableau à plusieurs dimensions ?
MaPlage1 définie une variable qui représente une plage de cellules
dans l'exemple si dessus équivalent à
set MaPlage1= Range("A1:A" & Range("A1").end(xldown).Row)
tu obtiens ainsi une plage( X lignes et une seule Colonne) à une (seule) dimension tirée de la colonne A
pour obtenir une plage à deux dimensions si j'ai compris il faudrait par exemple pour obtenir une plage de X lignes et Trois colonnes A,B,C
set MaPlage1= Range("A1:C" & Range("A1").end(xldown).Row)

pour ce qui est des crochets c'est une façon plus consise d'écrire mais qui revient au même ,peut être un peu moins évidente pour la lecture de la macro

pour ce qui est :

3/dans les lignes suivantes (à l'intérieur des boucles) l'expression "MaPlage1(l1,1)" fait-elle référence à la cellule (l1,1) de MaPlage c'est à dire à la cellule de la ligne l1 et de la colonne 1?. En d'autres termes, si je mettais (l1,2) est-ce que je ferais référence à la cellule de MaPlage située en ligne l1 et en colonne 2 ?

lorsque tu définies une plage les opération que tu effectues ensuite sur cette plage font toujours référence au cellules de cette plage et non plus à ta feuille excel d'ou est tirée ta plage l1 est une variable qui aurait pu s'appeler maligne donc si tu passes en revue les lignes de ta plage tu auras cellule (maligne,1) qui représentera la cellule située en ligne Une première colonne , cellule (maligne,2) représentera la cellule située en ligne Une deuxième colonne etc à condition d'avoir définie Maplage1 comme ayant plusieurs colonnes
car avec l'exemple
set MaPlage1= Range("A1:A" & Range("A1").end(xldown).Row)
tu ne peux faire varier que les lignes,(sinon bug) ta plage n'ayant qu'une colonne arff j'espère me faire comprendre
pour comparer deux colonne on peut parfois utiliser une variable qui reprend les deux colonnes
ex Dim MyString As String 'définition de la variable MyString comme étant une chaine de caractères
on donne comme valeur à cette variable la concaténation des deux premieres colonnes de la ligne considérée
exemple
j'ai Durand en colonne une ,ligne maligne et Pierre en Colonne deux ,ligne maligne de MaPlage1
MyString=Maplage1( maligne,1)&" "&Maplage1( maligne,2)
cela donnera
MyString=Durand &" "& pierre
si dans l'autre boucle tu as aussi une variable
exemple
MyString2=Maplage2( maligne2,1)&" "&Maplage2( maligne2,2)
cela donnera par exemple
MyString2=Durand &" "& Louis
puis on compare ces deux chaines de caractères

si MyString =MyString2 alors

en espèrant t'avoir aidé dans la compréhension de cette procèdure
si tu le veux, mets nous un exemple de ce que tu as on pourras peut être t'aider un peu plus ( fichier moins de 50k (.Zip,.xls) et sans données confidentielles)
 
Dernière édition:

Gorfael

XLDnaute Barbatruc
Re : comparer 2 BDD question sur procédure

Salut Blafi

1re question
Set MaPlage1 = Range([A1], [A1].End(xlDown))
[A1] = Range ("A1")
Suivant la définition donnée de Maplages1, le résultat de l'instruction correspond sous Excel à nommer la plage A1:Ax avec x comme dernière ligne comportant une cellule non vide avant une cellule vide, en partant de A1 vers le bas
ce n'est pas un tableau, mais une plage de cellules


2me question
Set MaPlage1 = Range([A1], [A10])
Str_Test = MaPlage1.Address(0, 0)
=>Str_Test = "A1:A10"

Set MaPlage1 = Range("A1", "A10")
Str_Test = MaPlage1.Address(0, 0)
=>Str_Test = "A1:A10"

Set MaPlage1 = [A1]
Str_Test = MaPlage1.Address(0, 0)
=>Str_Test = "A1"

Set MaPlage1 = Range("A1")
Str_Test = MaPlage1.Address(0, 0)
=>Str_Test = "A1"
Des fois, les créateurs d'Excel permettent des opérations qui devraient aboutir à une erreur
si Set MaPlage1 = "A1" déclenche une erreur,
Set MaPlage1 = Range("A1", "A10") devrait faire de même et ce n'est pas le cas. Mais on ne va pas trop s'en plaindre


3me Question
If MaPlage1(l1, 1).Value = MaPlage2(l2, 1).Value Then _
MaPlage2(l2, 1).EntireRow.Delete: MesLignes = MesLignes - 1
correspond à MaPlage1(l1) = MaPlage2(l2) ou plus exactement dans ce cas précis à
MaPlage1(l1).Columns(1) = MaPlage2(l2).Columns(1)

ce qui me perturbe un peu, c'est que MaPlage1(l1, 5) ne provoque pas une erreur, mais fais référence à la colonne E, mais comme c'est dans le bon sens on va pas pleurer ;), il y a tellement de fois où c'est le contraire


A+
 
Dernière édition:

Blafi

XLDnaute Occasionnel
Re : comparer 2 BDD question sur procédure

J'ai lu vos réponses avec un peyu de retard car j'ai du m'absenter....

Merci beaucoup à Chtil60 et Gorfael (malgré son retard...) pour les explications très claires...

Je vais pouvoir travailler un peu moins bête et surtout comprendre la manip...


A bientôt sur le forum... car j'aurai certainement d'autres questions ...
 

Discussions similaires

Réponses
2
Affichages
149
Réponses
6
Affichages
173

Statistiques des forums

Discussions
312 545
Messages
2 089 488
Membres
104 183
dernier inscrit
bast.coud