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
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