Erreur 1004/VLOOKUP dans une macro

Bonjour à tous,

J'ai un petit problème avec une macro... Je vous explique:

J'ai deux feuilles de calculs:

La première contient plusieurs colonne, celle qui nous intéresse est une colonne (Asset class) contenant différent String.

La seconde contient 4 colonne, dont une qui contient les mêmes éléments (voir +) que la colonne asset class.

Je veux recopier les colonne 2,3,4 de la seconde feuille dans la première lorsque le contenu de Asset class match bien.

J'ai écrit le code suivant:

Sub Traitement_du_tableau_Mandatewire()

Dim FL1 As Worksheet, FL2 As Worksheet, Cell As Range, NoCol As Integer
Dim NoLig As Long, DerLig As Long, Var As Variant, contenu1 As String

    'Instance de la feuille qui permet d'utiliser FL1 partout dans
    'le code à la place du nom de la feuille
    Set FL1 = Worksheets("Worksheet")
    Set FL2 = Worksheets("Conversion_Table_Mandate_Wire")
    'Détermine la dernière ligne renseignée de la feuille de calculs
    '(Voir explication sur l'utilisation de Split en bas de cette discussion)
    DerLig = Split(FL1.UsedRange.Address, "$")(4)

    'Fixe le N° de la colonne à lire
    NoCol = InputBox(Prompt:=" Entrer le numéro de la colonne Asset Class ")

    'Utilisation du N° de ligne dans une boucle For ... Next
    For NoLig = 1 To DerLig
        Var = FL1.Cells(NoLig, NoCol)

        'utilisation de la fonction VLOOKUP pour chercher le contenu de FL1.Cells(NoLig,NoCol) dans l'autre feuille de calcul et recopier le contenu de la deuxième (resp 3eme, 4eme) colonne du tableau dans la feuille 1 à la colonne 19 (resp 20 21)'

        FL1.Cells(NoLig, 19) = "=VLOOKUP(FL1.Cells(NoLig, NoCol); FL2!A1:D1300; 2;False)"

        FL1.Cells(NoLig, 20) = "=VLOOKUP(FL1.Cells(NoLig, NoCol); FL2!A1:D1300; 3; False)"

        FL1.Cells(NoLig, 21) = "=VLOOKUP(FL1.Cells(NoLig, NoCol);FL2!A1:D1300; 4; False)"
        'Pour tester : Affiche les variables dans la fenêtre Exécution de VBA
        Debug.Print Var
    Next

    Set FL1 = Nothing
    Set FL2 = Nothing

End Sub

je reçois l'erreur suivante:

Run-time error '1004'

Application-defined or object-defined error

Il bloque à la ligne: FL1.Cells(NoLig, 19) = "=VLOOKUP(FL1.Cells(NoLig, NoCol); FL2!A1:D1300; 2;False)"

Voila je vous remercie d'avance pour votre aide

Bonjour et bienvenu(e)

Remplace dans les formules le ; (point virgule) par , (virgule)

exemple

FL1.Cells(NoLig, 19) = "=VLOOKUP(FL1.Cells(NoLig, NoCol), FL2!A1:D1300, 2,False)"

Mais en plus et de surcroit je ne suis pas sur de cette syntaxe

FL1.Cells(NoLig, 19) = "=VLOOKUP(FL1.Cells(NoLig, NoCol), FL2!A1:D1300, 2,False)"

Un fichier serait très utile

Bonjour je pense qu'il y a une ou deux erreurs de syntaxe dans l'écriture de la formule.

FL2!A1:D1300 

Je ne suis pas sur que ce soit une syntaxe correct mais je peux me tromper car je ne connais pas tout en vba.

Ensuite

"=VLOOKUP(FL1.Cells(NoLig, NoCol); FL2!A1:D1300; 2;False)"

Ca veut dire : écrire dans la cellule la formule recherchev etc...Donc il faut rajouter .formula à la cellule qui va contenir la formule

-->FL1.Cells(NoLig, 19).formula

Regardez déjà dans ses deux directions pour commencer..

Cordialement,

Edit : salutation Banzaï. Et bien vu pour les ";" Franchement, vba pourrait accepter le mixage des langues dans les formules !

Merci Banzai64,

J'ai maintenant un autre problème, à chaque étape de mon code, la fenêtre suivante s'affiche:

mp61

Merci d'avance, je dois à chaque fois sélectionner la feuille de calcul correspondant à FL2, sachant que ma boucle est très longue...

Edit: Merci Force Rouge, je vais creuser cette piste

Edit2: Le fichier est trop lourd :/

Comme tu peux le voir, nous sommes deux à t'avoir prescris la même chose donc c'est dans ses directions là qu'il faut travailler

Transformez d'abord ceci FL2!A1:D1300 en syntaxe vb (avec des feuilles et des ranges) ca reglera très certainement d'autres problèmes en cascade, y compris l'ouverture de cette fenêtre...

Eventuellement, je ne sais pas si cela peut-être source d'erreur

FL1 = Worksheets("Worksheet")<-- vérifier si la feuille s'appelle bien Worksheet (voire de tester en changeant de nom la feuille)

Bonjour

Bonjour Force rouge

Teste cette macro

Dim FL1 As Worksheet, FL2 As Worksheet, Cell As Range, NoCol As Integer
Dim NoLig As Long, DerLig As Long, Var As Variant, contenu1 As String

  'Instance de la feuille qui permet d'utiliser FL1 partout dans
  'le code à la place du nom de la feuille
  Set FL1 = Worksheets("Worksheet")
  Set FL2 = Worksheets("Conversion_Table_Mandate_Wire")
  'Détermine la dernière ligne renseignée de la feuille de calculs
  '(Voir explication sur l'utilisation de Split en bas de cette discussion)
  DerLig = Split(FL1.UsedRange.Address, "$")(4)

  'Fixe le N° de la colonne à lire
  NoCol = InputBox(Prompt:=" Entrer le numéro de la colonne Asset Class ")

  'Utilisation du N° de ligne dans une boucle For ... Next
  For NoLig = 1 To DerLig
    Var = FL1.Cells(NoLig, NoCol)

    'utilisation de la fonction VLOOKUP pour chercher le contenu de FL1.Cells(NoLig,NoCol) dans l'autre feuille de calcul et recopier le contenu de la deuxième (resp 3eme, 4eme) colonne du tableau dans la feuille 1 à la colonne 19 (resp 20 21)'
    ' 1ère formule

    FL1.Cells(NoLig, 19) = "=VLOOKUP('" & FL1.Name & "'!" & Cells(NoLig, NoCol).Address & ",'" & FL2.Name & "'!" & Range("A1: D1300").Address & ", 2,False)"
    ' Ou
    'FL1.Cells(NoLig, 19) = "=VLOOKUP('" & FL1.Name & "'!" & Cells(NoLig, NoCol).Address & ",'" & FL2.Name & "'!$A$1:$D$1300, 2,False)"
    ' Ou
    'FL1.Cells(NoLig, 19) = "=VLOOKUP(" & FL1.Cells(NoLig, NoCol).Address(external:=True) & "," & FL2.Range("A1:D1300").Address(external:=True) & ", 2,False)"

    ' 2ème formule
    'FL1.Cells(NoLig, 20) = "=VLOOKUP('" & FL1.Name & "'!" & Cells(NoLig, NoCol).Address & ",'" & FL2.Name & "'!" & Range("A1: D1300").Address & ", 3,False)"
    ' Ou
    FL1.Cells(NoLig, 20) = "=VLOOKUP('" & FL1.Name & "'!" & Cells(NoLig, NoCol).Address & ",'" & FL2.Name & "'!$A$1:$D$1300, 3,False)"
    ' Ou
    'FL1.Cells(NoLig, 20) = "=VLOOKUP(" & FL1.Cells(NoLig, NoCol).Address(external:=True) & "," & FL2.Range("A1:D1300").Address(external:=True) & ", 3,False)"

    ' 3ème formule
    'FL1.Cells(NoLig, 21) = "=VLOOKUP('" & FL1.Name & "'!" & Cells(NoLig, NoCol).Address & ",'" & FL2.Name & "'!" & Range("A1: D1300").Address & ", 4,False)"
    ' Ou
    'FL1.Cells(NoLig, 21) = "=VLOOKUP('" & FL1.Name & "'!" & Cells(NoLig, NoCol).Address & ",'" & FL2.Name & "'!$A$1:$D$1300, 4,False)"
    ' Ou
    FL1.Cells(NoLig, 21) = "=VLOOKUP(" & FL1.Cells(NoLig, NoCol).Address(external:=True) & "," & FL2.Range("A1:D1300").Address(external:=True) & ", 4,False)"

    'Pour tester : Affiche les variables dans la fenêtre Exécution de VBA
    Debug.Print Var
  Next

  Set FL1 = Nothing
  Set FL2 = Nothing

End Sub

Merci Banzai64,

Ca fonctionne avec la modification que tu as apporté.

Merci également Force Rouge.

AH non je ne suis pas d'accord ! Banzaï... tu écris une formule dans une cellule sans préciser que la cellule va contenir une formule (?!). On m'aurait menti ? Il n'y a donc plus/pas besoin de le préciser... ?

Merci de ta sympathie youyou92 !

Bonjour

@ Force rouge

C'est implicite avec (grâce) le signe =

C'est vrai que cela serait plus "logique" de le préciser mais bon .....

Mais cela sera Formula et pas FormulaLocal, FormulaArray etc ....

Ben ma foi! Si c'est permis...faisons. Et puis en même temps sa permet un peu de souplesse dans une écriture très contrôlée.

Rechercher des sujets similaires à "erreur 1004 vlookup macro"