Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

recherche valeur identique

  • Initiateur de la discussion Initiateur de la discussion obyone
  • Date de début Date de début

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 !

obyone

XLDnaute Occasionnel
bonjour,

je recherche une macro qui lorsque je clic sur mon bouton "recherche mise à jour" dans la feuille essai, me compare la colonne 1 à la colonne 2 et me copie dans le tableau de la feuille MAJ uniquement les données différentes soit pour mon exemple dans la colonne nouveau nom 2.pdf.
ma macro ne fonctionne que s'ils sont sur la même ligne.
merci d'avance

oby
 

Pièces jointes

Bonsoir Obyone, bonsoir le forum,

Peut-être comme ça :

VB:
Sub Macro1()
Dim E As Worksheet 'déclare la variable E (onglet Essai)
Dim M As Worksheet 'déclare la variable MAJ (onglet MAJ)
Dim PL As Range 'déclare la variable PL (PLage)
Dim R As Range 'déclare la variable R
Dim TD() As Variant 'déclare la variable TD (Tableau des Différences)
Dim I As Integer 'déclare la variable I (Incrément)
Dim J As Integer 'déclare la variable J (incrément)

Set E = Worksheets("essai") 'définit l'onglet E
Set M = Worksheets("MAJ") 'définit l'onglet M
Set PL = E.Range("A1").CurrentRegion 'définit la plage PL

'compare la colonne 1 avec la 2
For I = 2 To E.Range("A1").CurrentRegion.Rows.Count 'boucle sur toutes les lignes I de la plage PL
    If E.Cells(I, 1).Value <> "" Then 'condition 1 : si la cellule ligne I colonne 1 n'est pas vide
        'définit la recherche R (recherche dans la colonne 2 de la plage PL la valeur entière de la cellule ligne I colonne 1)
        Set R = Application.Intersect(PL, E.Columns(2)).Find(E.Cells(I, 1), , xlValues, xlWhole)
        If R Is Nothing Then 'condition 2 : si aucune occurrence n'est trouvée
            ReDim Preserve TD(J) 'redimensionne le tableau des différences TD
            TD(J) = E.Cells(I, 1) 'récupère dans la tableau TD la valeur de la cellule ligne I, colonne 1
            J = J + 1 'incrémente J
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle

'compare la colonne 2 avec la 1
For I = 2 To E.Range("A1").CurrentRegion.Rows.Count 'boucle sur toutes les lignes I de la plage PL
    If E.Cells(I, 2).Value <> "" Then 'condition 1 : si la cellule ligne I colonne 2 n'est pas vide
        'définit la recherche R (recherche dans la colonne 1 de la plage PL la valeur entière de la cellule ligne I colonne 2)
        Set R = Application.Intersect(PL, E.Columns(1)).Find(E.Cells(I, 2), , xlValues, xlWhole)
        If R Is Nothing Then 'condition 2 : si aucune occurrence n'est trouvée
            ReDim Preserve TD(J) 'redimensionne le tableau des différences TD
            TD(J) = E.Cells(I, 2) 'récupère dans la tableau TD la valeur de la cellule ligne I, colonne 2
            J = J + 1 'incrémente J
        End If 'fin de la condition 2
    End If 'fin de la condition 1
Next I 'prochaine ligne de la boucle

'renvoie dans A2 redimensionnées le tableau TD transposé
M.Range("A2").Resize(UBound(TD) + 1, 1).Value = Application.Transpose(TD)
End Sub
 
Bonjour
Salut Robert 🙂

Autre approche
Code:
Sub Bouton2_Clic()
Dim x As Long
Dim Extrait As Range

    Range("J1:K1").Value = Range("A1:B1").Value
    Range("H2").Formula = "=A1<>B1"
    x = Worksheets("MAJ").ListObjects("MAJ").ListRows.Count
   
    Range("A:B").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Range( _
        "H1:H2"), CopyToRange:=Columns("J:K"), Unique:=False
    Set Extrait = Range("J1").CurrentRegion.Offset(1, 0)
    Extrait.Resize(Extrait.Rows.Count - 1, 2).Copy Destination:=Worksheets("MAJ").Range("MAJ[Nouveau Nom]").Offset(x, 0)
    Application.CutCopyMode = False
    Range("J:K").ClearContents
    Range("H2").ClearContents

End Sub
 
rebonjour,

j'ai un problème

" Erreur d'execution'5':
argument ou appel de procédure incorrect"

sur la ligne

M.Range("C2").Resize(UBound(TD) + 1, 1).Value = Application.Transpose(TD)

lors de la seconde exécution?
je ne comprends pas pourquoi

merci d'avance
 

Pièces jointes

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

  • Question Question
Microsoft 365 agrandir la liste
Réponses
21
Affichages
410
Réponses
2
Affichages
169
Réponses
19
Affichages
790
Réponses
6
Affichages
309
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…