Etant novice en VBA, je vous contacte car je ne sais pas comment appliquer mon idée dans ma macro.
Actuellement, j'ai une macro (qui fonctionne très bien) me permettant d'extraire les informations de plusieurs fichiers vers mon Excel cible.
Mais ma macro repose sur une boucle et le nombre de fichiers est important. (temps de la macro > 30min)
Mon idée est de pouvoir sélectionner un seul fichier et de lancer son extraction sans que les autres se fassent. Le tout en ouvrant une fenêtre permettant de choisir le fichier au sein de la liste présente dans l'excel cible (voir image).
Macro utilisée:
Sub MaJ_projet()
Dim Chemin As String, Fichier As String, Extraction As String, Résumé As String
Worksheets("Ajout de nouveaux projets").Select
For I = 4 To Range("a" & Rows.Count).End(xlUp).Row 'Départ à la ligne 4
If Range("a" & I) <> "" Then
Worksheets("Ajout de nouveaux projets").Select 'Feuille où se trouve les chemins
Chemin = Range("b" & I)
Fichier = Range("c" & I)
Extraction = Range("d" & I)
Résumé = Range("a" & I)
Set classeurProj = Application.Workbooks.Open(Chemin & Fichier, , True) 'Ouverture du fichier
Set classeurDestination = ThisWorkbook
With Worksheets("Materiels")
If .FilterMode = True Then .ShowAllData 'Suppression des filtres existants
End With
classeurProj.Sheets("Materiels").Cells.Copy classeurDestination.Sheets(Extraction).Range("A1") 'Extraction des informations dans sa feuille spécifique
classeurProj.Close False
End If
Next I
End Sub
Oui c'est le but en passant par une fenêtre de choix reportant la liste.
La finalité est de lancer la nouvelle macro, On sélectionne la cellule via une fenêtre (qui affichera la liste) et que l'extraction se lance.
Si on fait dans l'ordre que tu proposes, il faudra alors 2 macros, une pour la sélection et une pour l'extraction. N'est pas plus pratique de tout regrouper ?
se mettre sur la feuille où se trouve les chemins des classeurs et faire Alt F11 pour accéder à l'éditeur.
Coller ce code qui se déclenchera au double clic dans la colonne B:
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
Dim Chemin As String, Fichier As String, Extraction As String, Résumé As String
Dim classeurProj As Workbook, classeurDestination As Workbook
If Target.Value = "" Then Exit Sub
Chemin = Range("b" & Target.Row)
Fichier = Range("c" & Target.Row)
Extraction = Range("d" & Target.Row)
Résumé = Range("a" & Target.Row)
Set classeurProj = Application.Workbooks.Open(Chemin & Fichier, , True) 'Ouverture du fichier
Set classeurDestination = ThisWorkbook
With Worksheets("Materiels")
If .FilterMode = True Then .ShowAllData 'Suppression des filtres existants
End With
classeurProj.Sheets("Materiels").Cells.Copy classeurDestination.Sheets(Extraction).Range("A1") 'Extraction des informations dans sa feuille spécifique
classeurProj.Close False
End If
End Sub
Cela fonctionne chez moi. Vérifie le chemin , il doit manquer des éléments
essai ceci:
Sub test()
Dim Chemin As String, Fichier As String
Dim classeurProj As Workbook, classeurDestination As Workbook
Chemin = Range("b5")
Fichier = Range("c5")
Set classeurProj = Application.Workbooks.Open(Chemin & Fichier, , True) '
End Sub
Vérification de la macro Test : ça fonctionne et j'ouvre bien mon fichier.
En comparant avec ta première macro, aucune différence.
Le problème ne viendrait t-il pas de cette commande ?
Option Explicit
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Not Application.Intersect(Target, Range("B:B")) Is Nothing Then
J'ai bien lu la première fois, j'ai relu et refait comme expliquer.
Le module est bien celui de ma feuille comprenant les chemins.
ET CA NE FONCTIONNE PAS (désolé si je m'énerve).
J'ai double-cliqué sur la colonne B et rien ne se passe.
J'ai double-cliqué sur le texte d'une cellule de la colonne B (B4) et ça ouvre le chemin cité.
J'ai double-cliqué hors du texte dans une cellule de la colonne (B4) et j'accède à la modification du contenu de la cellule. Donc pas à la macro.
J'ai double-cliqué sur la ligne entre les cellules et ça déplace ma sélection sur ma première ou dernière ligne.
J'ai enregistré, fermé puis rouvert dans l'espoir que cela soit un problème d'actualisation. Mais en vain.
N'y a-t-il pas moyen de revenir à mon idée de base ? (fenêtre de sélection au sein de la macro)
Lorsque je faisais Alt F11, Visual Basic s'ouvrait sur les modules du fichier.
Je n'avais pas compris qu'il fallait que j'ouvre une fenêtre en cliquant sur la feuille.
Une fois le code inséré, ça fonctionne nickel.
Merci encore cs_Le pivert (et toutes mes excuses).