Insertion fenêtre de choix dans une macro [Résolu]

Signaler
Messages postés
15
Date d'inscription
lundi 12 octobre 2020
Statut
Membre
Dernière intervention
26 novembre 2020
-
Messages postés
7202
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 janvier 2021
-
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:
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

4 réponses

Messages postés
13891
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 janvier 2021
782
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.
Messages postés
15
Date d'inscription
lundi 12 octobre 2020
Statut
Membre
Dernière intervention
26 novembre 2020

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.
Messages postés
13891
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
15 janvier 2021
782
Je suggère de d'abord faire la sélection, puis de lancer la nouvelle macro.
La macro observera ce qui est sélectionné, et agira en conséquence.
Messages postés
15
Date d'inscription
lundi 12 octobre 2020
Statut
Membre
Dernière intervention
26 novembre 2020

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 ?
Messages postés
7202
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 janvier 2021
597
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:

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à
Messages postés
15
Date d'inscription
lundi 12 octobre 2020
Statut
Membre
Dernière intervention
26 novembre 2020
>
Messages postés
7202
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 janvier 2021

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)
Messages postés
7202
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 janvier 2021
597 >
Messages postés
15
Date d'inscription
lundi 12 octobre 2020
Statut
Membre
Dernière intervention
26 novembre 2020

Cette méthode fonctionne, voir ceci:

https://forum.excel-pratique.com/viewtopic.php?t=1314
Messages postés
7202
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 janvier 2021
597 >
Messages postés
7202
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 janvier 2021

ET CA NE FONCTIONNE PAS (désolé si je m'énerve).

cela ne sert à rien!

voici un exemple:

https://www.cjoint.com/c/JKzjroUaf8Q

@+
Messages postés
15
Date d'inscription
lundi 12 octobre 2020
Statut
Membre
Dernière intervention
26 novembre 2020
>
Messages postés
7202
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 janvier 2021

Je viens de comprendre mon erreur.

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).
Messages postés
7202
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
15 janvier 2021
597 >
Messages postés
15
Date d'inscription
lundi 12 octobre 2020
Statut
Membre
Dernière intervention
26 novembre 2020

Content pour toi, c'est pour cela que j'insistais sur le module de la feuille

Pense à mettre en Résolu en cliquant sur Marquer comme résolu au début du post

@+ Le Pivert