Insertion fenêtre de choix dans une macro
Résolu
Inconnu404
Messages postés
25
Statut
Membre
-
cs_Le Pivert Messages postés 8437 Statut Contributeur -
cs_Le Pivert Messages postés 8437 Statut Contributeur -
Bonjour à tous,
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:
Et un extrait de ma liste d'extraction

Merci d'avance
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
Et un extrait de ma liste d'extraction
Merci d'avance
A voir également:
- Insertion fenêtre de choix dans une macro
- Liste déroulante de choix excel - Guide
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Touche insertion clavier - Guide
- Insertion sommaire word - Guide
- Fenetre windows - Guide
4 réponses
yg_be
Messages postés
24281
Date d'inscription
Statut
Contributeur
Dernière intervention
Ambassadeur
1 585
bonjour,
je pense que le plus simple serait que tu sélectionnes une des cellules de la liste, et que la macro travaille uniquement pour cette ligne.
je pense que le plus simple serait que tu sélectionnes une des cellules de la liste, et que la macro travaille uniquement pour cette ligne.
Bonjour,
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.
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 ?
Bonjour,
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:
Voilà
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
Voilà
Voir ceci pour l'ouverture d'un classeur
https://docs.microsoft.com/fr-FR/office/vba/api/Excel.Workbooks.Open
https://docs.microsoft.com/fr-FR/office/vba/api/Excel.Workbooks.Open
Cela fonctionne chez moi. Vérifie le chemin , il doit manquer des éléments
essai ceci:
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 ?
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