Nom de fichier variable dans un "InputBox"

Bonjour,

Voir ci-joint les 2 fichiers:

1) le fichier "prev" est une base de données ou apparaissent beaucoup de références (la première colonne).

2) le fichier "planning proto" consiste à extraire des références (en rouge) du fichier "prev" et ramener les valeurs des colonnes suivantes (à partir de la colonne E), en cliquant sur le bouton lancer la macro.

Mais le problème c'est que le nom du fichier "prev" va varier : il pourra s'appeler "prev1", "prev2", "prev3" etc...

Ainsi, je voudrai créer une variable A en faisant :

A = InputBox("Entrer le fichier :")

Mais quand je remplace "prev" par A dans mon code, ça ne fonctionne pas...Ce ne dois pas être si simple que ça.

Pouvez-vous m'aider ?

Salutations,

Dadams

8prev.xlsm (18.63 Ko)

Bonjour,

Une autre piste que "InputBox()", avec "FileDialog()" pour effectuer le choix dans l'explorateur afin d'éviter les éventuelles fautes de frappe :

Sub filtre()

    Dim Cls As Workbook
    Dim i As Long
    Dim j As Long
    Dim k As Long
    Dim derligne As Long
    Dim A As String

    j = 3

    'appel de la fonction pour le choix du fichier
    A = Fichier

    'si aucun choix, fin de procédure !
    If A = "" Then Exit Sub

    'ouvre le classeur choisi
    Set Cls = Workbooks.Open(A)

    derligne = Cls.Worksheets(1).Range("A65000").End(xlUp).Row

    For i = 3 To derligne

        If Workbooks("Planning-proto.xlsm").Worksheets(1).Cells(j, 1).Value = Cls.Worksheets(1).Cells(i, 1).Value Then

            For k = 5 To 31 'les 31 premières colonnes
                Workbooks("Planning-proto.xlsm").Worksheets(1).Cells(j, k).Value = Cls.Worksheets(1).Cells(i, k + 2).Value '+2: décallage des colonnes de prev par rapport à planning-proto
            Next

            j = j + 1

        End If

    Next

End Sub

Function Fichier() As Variant

    With Application.FileDialog(3)
        If .Show = -1 Then Fichier = .SelectedItems(1)
    End With

End Function

Bonjour Theze,

Merci pour la version proposée, ça fonctionne.

Par contre, dans l'utilisation que je fait de cette macro, mon fichier de référence "prev" est déjà ouvert.

Et quand j'ai lancé ta macro avec le fichier "prev" déjà ouvert, je n'ai pas pas eu le message "le fichier prev est déjà ouvert".

N'y a t'il pas de risque à lancer cette macro lorsque le fichier "prev" est déjà ouvert ?

Ou connais tu une version de cette macro lorsque le fichier "prev" est déjà ouvert ?

Salutations,

Dadams

Bonjour,

donc, par rapport à ta remarque du premier post :

Mais le problème c'est que le nom du fichier "prev" va varier : il pourra s'appeler "prev1", "prev2", "prev3" etc...

Voici un code qui cherche le classeur dans la collection des classeurs ouverts :

Sub filtre()

    Dim Cls As Workbook
    Dim i As Long
    Dim j As Long
    Dim k As Long
    Dim derligne As Long
    Dim A As String

    j = 3

    'parcours la collection des classeurs ouverts
    'et si l'un d'entre eux contient le préfixe "prev"
    'récupère son nom dans la variable et sort de la boucle
    For i = 1 To Workbooks.Count

        If Left(Workbooks(i).Name, 4) = "prev" Then

            A = Workbooks(i).Name
            Exit For

        End If

    Next i

    'si la variable contient une chaîne non vide, le classeur est ouvert
    'sinon, ouvre l'explorateur pour le choix du classeur
    If A <> "" Then

        Set Cls = Workbooks(A)

    Else

        'appel de la fonction pour le choix du fichier
        A = Fichier
        'si aucun choix, fin de procédure !
        If A = "" Then Exit Sub

    End If

    'ouvre le classeur choisi
    Set Cls = Workbooks.Open(A)

    derligne = Cls.Worksheets(1).Range("A65000").End(xlUp).Row

    For i = 3 To derligne

        If Workbooks("Planning-proto.xlsm").Worksheets(1).Cells(j, 1).Value = Cls.Worksheets(1).Cells(i, 1).Value Then

            For k = 5 To 31 'les 31 premières colonnes
                Workbooks("Planning-proto.xlsm").Worksheets(1).Cells(j, k).Value = Cls.Worksheets(1).Cells(i, k + 2).Value '+2: décallage des colonnes de prev par rapport à planning-proto
            Next

            j = j + 1

        End If

    Next

End Sub
Rechercher des sujets similaires à "nom fichier variable inputbox"