Recherche une macro qui me compare une plage de cellule

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

creolia

XLDnaute Impliqué
Bonjour à tous je recherche à faire une macro qui me comparerais la feui1 du classeur (nommé teste1) et la feuil2 du classeur (nommé teste2) sur une plage egale A1:J100 les deux classeur auront le meme format.

si le classeur test1 est differente du classeur teste2 me proposer de lancer la macro module1.macro1

pouvez m'aider svp merci
 
Re : Recherche une macro qui me compare une plage de cellule

un petit fichier joins ou j'ai volontairement mis une ligne de plus pour insiter à la mise à jour c'est peu mais je bloque d'entrer merci d'avance
 

Pièces jointes

Re : Recherche une macro qui me compare une plage de cellule

Bonsoir creolia,

Voici une macro qui devrait fonctionner.

Il te suffit de changer le MsgBox pas la macro que tu veux appeler.

VB:
Sub Comp()
    Dim c As Range
    For Each c In ActiveSheet.UsedRange
        If c <> Sheets("teste2").Range(c.Address) Then
            MsgBox "Différences trouvées"
            Exit Sub
        End If
    Next
    MsgBox "Aucune différence"
End Sub

A+
 
Re : Recherche une macro qui me compare une plage de cellule

Bonsoir Creolia, bonsoir le forum,

Peut-être comme ça :
Code:
Sub Macro2()
Dim ct1 As Workbook 'décalre la variable ct1 (Classeur Teste1)
Dim ct2 As Workbook 'décalre la variable ct2 (Classeur Teste2)
Dim plt1 As Range 'déclare la variable plt1 (PLage classeur Teste1)
Dim cel As Range 'déclare la variable cel
 
Set ct1 = Workbooks("teste1.xls") 'définit le classeur ct1
Set ct2 = Workbooks("teste2.xls") 'définit le classeur ct2
Set plt1 = ct1.Sheets("Feuil1").Range("A1:J100") 'définit la plage du classeur Teste1
For Each cel In plt1 'boucle sur toutes les cellules cel de la plage plt1
    'condition : si la cellule du classeur ct1 est différente de la cellule du classeur ct2
    If cel.Value <> ct2.Sheets("Feuil1").Range(cel.Address) Then
        Module1.Macro1 'lance la mecro1 du module1
        Exit Sub 'sort de la procédure
    End If 'fin de la condition
Next cel 'prochaine cellule de la boucle
End Sub

[Édition]
Bonsoir Fred0o on s'est croisé...
 
Re : Recherche une macro qui me compare une plage de cellule

Bonjour fredoo et robert et merci de votre aide la solution de robert est pile poil ce que je recherche.

je souhaiterais un complement d'aide sans vouloir abusé e votre gentillesse peut ton ajouter une fonction pour qui me dit combien de modification ont été trouvez ou à defaut combien de ligne à été modifier merci d'avance de votre aide et vosconnaissances
 
Re : Recherche une macro qui me compare une plage de cellule

Bonjour le fil, bonjour le forum,

Essaie comme ça :
Code:
Sub Macro2()
Dim ct1 As Workbook 'décalre la variable ct1 (Classeur Teste1)
Dim ct2 As Workbook 'décalre la variable ct2 (Classeur Teste2)
Dim plt1 As Range 'déclare la variable plt1 (PLage classeur Teste1)
Dim cel As Range 'déclare la variable cel
Dim tcd() As Variant 'déclare le tableau de variables tcd (Tableau des Cellules Différentes)
Dim test As Boolean 'déclare la variable test
Dim x As Integer 'déclare la variable x (incrément)
Dim msg As String 'déclare la variable msg (MeSsaGe)
 
Set ct1 = Workbooks("teste1.xls") 'définit le classeur ct1
Set ct2 = Workbooks("teste2.xls") 'définit le classeur ct2
Set plt1 = ct1.Sheets("Feuil1").Range("A1:J100") 'définit la plage du classeur Teste1
For Each cel In plt1 'boucle sur toutes les cellules cel de la plage plt1
    'condition : si la cellule du classeur ct1 est différente de la cellule du classeur ct2
    If cel.Value <> ct2.Sheets("Feuil1").Range(cel.Address) Then
        test = True 'définit la variable test
        ReDim Preserve tcd(x) 'redimentionne le tableau tcd
        tcd(x) = cel.Address 'attribue une variable (l'adresse) au tableau tcd
        x = x + 1 'incrémente x
    End If 'fin de la condition
Next cel 'prochaine cellule de la boucle
If test = True Then 'condition : si test est vrai
    msg = "Il y a " & UBound(tcd, 1) + 1 & " cellules différentes :" & Chr(13) 'définit le message msg
    For x = 0 To UBound(tcd) 'boucle sur toutes les adresses des cellules modifiées
        msg = msg & tcd(x) & Chr(13) 'redéfinit le message msg en ajoutant l'adresse de la cellule modifiée
    Next x 'prochaine adresse du tableau
    MsgBox msg 'affiche le message msg
    Module1.macro1 'lance la macro1 du module1
End If 'fin de la condition
End Sub
Creolia tu ne dis pas si tu veux que la macro1 soit lancée une seule fois si il y a des différences ou bien à chaque fois qu'il y a une différence. Actuellement le code ne le fait qu'une seule fois. Si ce n'est pas ça, il suffit de déplacer la ligne :
Code:
Module1.macro1 'lance la macro1 du module1
à l'intérieur de la première boucle :
Code:
For Each cel In plt1 'boucle sur toutes les cellules cel de la plage plt1
    'condition : si la cellule du classeur ct1 est différente de la cellule du classeur ct2
    If cel.Value <> ct2.Sheets("Feuil1").Range(cel.Address) Then
        test = True 'définit la variable test
        ReDim Preserve tcd(x) 'redimentionne le tableau tcd
        tcd(x) = cel.Address 'attribue une variable (l'adresse) au tableau tcd
        x = x + 1 'incrémente x
        Module1.macro1 'lance la macro1 du module1
    End If 'fin de la condition
Next cel 'prochaine cellule de la boucle
 
Dernière édition:
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
3
Affichages
655
A
Réponses
1
Affichages
1 K
Astragor
A
M
Réponses
4
Affichages
2 K
Marine_blatz
M
R
Réponses
8
Affichages
1 K
B
Réponses
2
Affichages
1 K
Retour