Transformer une formule en macro

red-69

XLDnaute Nouveau
Bonjour à tous.

Voici mon problème : j'ai créé une formule me permettant, en fonction de comparer une cellule de la colonne A de la feuille 1 à une cellule de la colonne A de la feuille 2. Si deux valeur identiques sont trouvées, la cellule B1 de la feuille 1 n'indique rien. En revanche si aucune valeur identique n'est trouvée, la cellule B1 feuille 1 reprend le contenu de la cellule A1.
Voici la formule :
=SI(ESTERREUR(RECHERCHEV(A10;Feuil2!$1:$65536;1;FAUX));Feuil1!A10;"")

Mon problème est le suivant : mon tableau étant très lourd avec plusieurs dizaine de millier de lignes, j'aimerai obtenir une macro me permettant de réaliser la même opération mais uniquement lorsque je le souhaite (donc en lançant la macro).

Merci d'avance.
 

Pièces jointes

  • Exemple.xlsm
    8.7 KB · Affichages: 61
  • Exemple.xlsm
    8.7 KB · Affichages: 59
  • Exemple.xlsm
    8.7 KB · Affichages: 59

red-69

XLDnaute Nouveau
Re : Transformer une formule en macro

J'ai réussi à faire la macro suivante :

Code:
Sub Macro1()

Dim cell As Variant

    For Each cell In Range("B1:B50")
    ActiveCell.FormulaR1C1 = _
        "=IF(ISERROR(VLOOKUP(R[0]C[-1],Feuil2!R1:R65536,1,FALSE)),Feuil1!R[0]C[-1],"""")"
Next cell

End Sub

En revanche, elle s'arrête de fonctionner dès que la condition est remplie et qu'elle me recopie une cellule A vers une cellule B. Je me penche sur ce problème de boucle sans doute
 

Robert

XLDnaute Barbatruc
Repose en paix
Re : Transformer une formule en macro

Bonjour le fil, bonjour le forum,

Peut-être comme ça :
Code:
Sub Macro1()
Dim pl1 As Range 'déclare la variable pl1 (PLage 1)
Dim pl2 As Range 'déclare la variable pl2 (PLage 2)
Dim cel As Range 'déclare la variable cel (CELlule)
 
With Sheets("Feuil1") 'prend en compte l'onglet "Feuil1"
    Set pl1 = .Range("A1:A" & .Cells(Application.Rows.Count, 1).End(xlUp).Row) 'définit la plage pl1
End With 'fin de la prise en compte l'onglet "Feuil1"
With Sheets("Feuil2") 'prend en compte l'onglet "Feuil2"
    Set pl2 = .Range("A1:A" & .Cells(Application.Rows.Count, 1).End(xlUp).Row) 'définit la plage pl2
End With 'fin de la prise en compte l'onglet "Feuil2"
For Each cel In pl1 'boucle sur toutes les cellules éditées cel de la plge pl1
    'si aucune occurrence de la valeur de la cellule cel n'est trouvée dans la plage pl2, place la valeur de la cellule cel dans la colonne B
    If pl2.Find(cel.Value, , xlValues, xlWhole) Is Nothing Then cel.Offset(0, 1).Value = cel.Value
Next cel 'prochaine cellule de la boucle
End Sub
 

Discussions similaires

Réponses
5
Affichages
347

Statistiques des forums

Discussions
312 497
Messages
2 088 994
Membres
104 000
dernier inscrit
dinelcia