Vlookup avec nom de plage récupéré d'un String

yaciin

XLDnaute Nouveau
Bonjour à tous et à toutes,

Je retourne vers vous pour mon tout premier post dans un forum. dans le cadre de mon apprentissage je manipule le langage VBA pour la première fois dans mon cursus, et là je suis bloqué depuis lundi :? .

Mon problème est le suivant :
je manipule deux grands fichier excel : le premier INV le deuxième MARD, la colonne commune entre les deux c'est le n° de référence.

Aprés avoir effectuer des opérations de mise en page sur les des deux fichiers, j'essai de faire un Vlookup dans INV afin de récupérer la colonne des emplacements des références existant dans MARD.

à chaque inventaire on a un nouveau fichier INV et un nouveau fichier MARD. Le challenge que j'ai donc est de développer une macro avec des noms de fichier variable, qui pourra effectuer les mises en pages et le Vlookup sur chaque nouveau paire INV et MARD à chaque inventaire.

Pour cela, j'ai créer un UserForm dans le fichier INV qui affiche la liste des fichiers ouverts et qui demande au utilisateur de sélectionner le fichier MARD :
Code:
Sub mac()
'Comptage des fenetres ouvertes
n = Application.Windows.Count
' Ecriture dans affichage
UserForm1.ListBox1.AddItem ("Liste des Classeurs ouverts")
     For i = 1 To n
     v = Application.Windows.Item(i).Caption
     UserForm1.ListBox1.AddItem (v)
     Next i
UserForm1.Show
End Sub

Une fois le fichier sélectionné ( et dans le code du bouton 'selectionner' dans la UserForm) je récupére le nom exacte du fichier MARD, et je l'active afin de faire ma mise en page et mon Vlookup :
Code:
Dim nom_fichier As String
nom_fichier = UserForm1.ListBox1.List(Index)
Workbooks(workbook_travail).Activate

La mise en page se passe bien, mais le Vlookup bloque, après plusieurs essaies, j'ai rencontré à chaque fois un de ces deux types de problème :
- soit il m'affiche une erreur #N/A (que je remplace par 0)
- soit il me sort une fenêtre pour pour parcourir le fichier à la main (chose qui me sert pas trop vu que j'ai plus de plus de 17 000 lignes :aie: )

voilà ma dernière tentative qui n'a pas marché non plus :( qui retourne 0 (#N/A) :
Code:
Dim a, b
b = ActiveSheet.UsedRange.Rows.Count
    
    Dim plage1, plage2 As Range
    Set plage1 = Application.Workbooks(nom_fichier).Worksheets("magasin_1").Columns("C:AS")
    Set plage2 = Application.Workbooks(nom_fichier).Worksheets("magasin_2").Columns("C:AS")

    WB_Principal.Activate
    For a = 2 To b
        Worksheets(1).Activate
        
        If Cells(a, 2) <> "SLoc" And Cells(a, 2) <> "" Then
        Cells(a, 5).Select
        ActiveCell.FormulaR1C1 = _
            "=IFERROR(application.VLOOKUP(RC[-2],plage2,43,FALSE),0)"
        
        Worksheets(1).Activate
        Cells(a, 4).Select
        ActiveCell.FormulaR1C1 = _
            "=IFERROR(application.VLOOKUP(RC[-1],plage1,43,FALSE),0)"
        
   
    ElseIf Cells(a, 2) = "SLoc" Then Rows(a).Delete
    End If
    Next

(je fais deux Vlookup car j'ai deux colonnes d'emplacement, une pour chaque magasin. WB_Pricipal est une variable workbook content le fichier INV)

J’espère que j'ai bien expliqué ce qui me prend la tête depuis lundi et je vous remercie d'avance pour votre aide.

Cordialement.
 

Discussions similaires

Statistiques des forums

Discussions
312 237
Messages
2 086 486
Membres
103 232
dernier inscrit
logan035