Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

XL 2016 Utiliser La fonction GetOpenFilename

  • Initiateur de la discussion Initiateur de la discussion KTM
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

KTM

XLDnaute Impliqué
Bonsoir Famille Forum
Je voudrais importer des données dans mon classeur actif "Synth" depuis d'autres classeurs "class1;class2......"
J'utilise une macro pour le faire mais l'importation se fait classeur après classeur.
Je voudrais ajuster mon code de sorte à sélectionner un ou plusieurs classeurs à la fois et importer en un coup.
VB:
Sub Compil()
Dim fichie As Variant
Dim wkb1 As Worksheet
Dim shF As Worksheet
Dim classeur As Workbook
Application.ScreenUpdating = False
Sheets("PROT").Copy After:=Sheets("BASE")

Set shF = ThisWorkbook.Worksheets(2)
ChDir ActiveWorkbook.Path
fichie = Application.GetOpenFilename(Title:="Selectionnez le Fichier à Importer", filefilter:="Fichier Excel (*.xls*),*xlsx*", buttontext:="Cliquez")
Application.ScreenUpdating = False
If fichie <> False Then

                                Set classeur = Application.Workbooks.Open(fichie)
                                Application.ScreenUpdating = False
                                Set wkb1 = classeur.Worksheets(1)
                                
                                shF.Range("B1:E12").Value = wkb1.Range("B1:E12").Value
                                
                                shF.Name = wkb1.Range("B1")
                                classeur.Close SaveChanges:=False
                                ThisWorkbook.Worksheets("BASE").Activate
                                Sheets(2).Visible = True
End If

End Sub
 

Pièces jointes

Re

Oui c'est possible (*)
mais je vais au plus simple
sélectionner un ou plusieurs classeurs à la fois et importer en un coup.

Avec Excel 2016, la fonction est native et se pilote à la souris
(et ne nécessite aucune connaissance VBA)
Avant de la rejeter, fais au moins un essai

(*) il suffit de faire une boucle
(cf les nombreux exemples à disposition dans les archives du forum
mots-clés
combiner classeurs
 
bonsoir @KTM met la en multiselect ton dialog
VB:
Sub Compil()
    Dim fichie As Variant
    Dim wkb1 As Worksheet
    Dim shF As Worksheet
    Dim classeur As Workbook
    Application.ScreenUpdating = False
    Sheets("PROT").Copy After:=Sheets("BASE")

    Set shF = ThisWorkbook.Worksheets(2)
    ChDir ActiveWorkbook.Path
    fichie = Application.GetOpenFilename(FileFilter:=" Excel Files ( *.xlsx;*.xls;*.xlsm), ( *.xlsx;*.xls;*.xlsm), All Files, *.*", FilterIndex:=1, MultiSelect:=True, Title:="Selectionnez le ou les Fichier(s) à Importer")

    If Not IsArray(fichie) Then
        If fichie = False Then MsgBox "Sélection de fichier Annulée": Exit Sub Else fichie = Array(fichie)
    End If

    Application.ScreenUpdating = False
    For i = 1 To UBound(fichie)
        MsgBox fichie(i)
        Set classeur = Application.Workbooks.Open(fichie(i))
        Application.ScreenUpdating = False
        Set wkb1 = classeur.Worksheets(1)

        shF.Range("B1:E12").Value = wkb1.Range("B1:E12").Value

        shF.Name = wkb1.Range("B1")
        classeur.Close SaveChanges:=False
        ThisWorkbook.Worksheets("BASE").Activate
        Sheets(2).Visible = True
    Next
End Sub
 

Merci cela fonctionne mieux comme ci.
Mais aidez moi à gerer l'erreur si le classeur est deja importé.Merci

VB:
Sub Compil()
    Dim fichie As Variant
    Dim wkb1 As Worksheet
    Dim shF As Worksheet
    Dim classeur As Workbook
    Dim i As Long
    Application.ScreenUpdating = False
    ChDir ActiveWorkbook.Path
    fichie = Application.GetOpenFilename(FileFilter:=" Excel Files ( *.xlsx;*.xls;*.xlsm), ( *.xlsx;*.xls;*.xlsm), All Files, *.*", FilterIndex:=1, MultiSelect:=True, Title:="Selectionnez le ou les Fichier(s) à Importer")

    If Not IsArray(fichie) Then
        If fichie = False Then MsgBox "Sélection de fichier Annulée": Exit Sub Else fichie = Array(fichie)
    End If

    Application.ScreenUpdating = False
    For i = 1 To UBound(fichie)
         Sheets("PROT").Copy After:=Sheets("BASE")
         Set shF = ThisWorkbook.Worksheets(2)
         Set classeur = Application.Workbooks.Open(fichie(i))
         Application.ScreenUpdating = False
         Set wkb1 = classeur.Worksheets(1)
         shF.Range("B1:E12").Value = wkb1.Range("B1:E12").Value
         shF.Name = wkb1.Range("B1")
         classeur.Close SaveChanges:=False
         ThisWorkbook.Worksheets("BASE").Activate
         Sheets(2).Visible = True
    Next

End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
1 K
Réponses
2
Affichages
852
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…