IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Ouvrir plusieurs fichiers excel en vba


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 61
    Par défaut Ouvrir plusieurs fichiers excel en vba
    Bonjour,

    J'ai un programme vba qui va rechercher des données dans un claseur (en fonction du n°sem choisi) nommé "MC_Shootage" puis, me les colle dans un autre nommé "MC_Commun".

    Maintenant, on me demande de faire pareil sauf que au lieu d'aller chercher 1 seul fichier ("MC_Shootage"), il faut que le pgm me cherche 3 autres fichiers ("MC_Plastique", "MC_Finition" et "MC_Expédition")en plus de "MC_Shootage".

    Comment gérer l'ouverture de plusieurs fichiers ?
    Existe-t-il une fonction multiFichier ou qqch comme ça?

    Voici mon pgm:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    Sub Dechet_Finition_Hebdo()
     
    'Identification des chemins et des fichiers
     
        Dim Chemin As String, WbDestination As Workbook, WbSource As Workbook
        Dim Fichier As String
        Dim Semaine As Long, L As Long, x As Long
        Set WbDestination = ThisWorkbook
        L = WbDestination.Worksheets("Donnees").Range("A65536").End(xlUp).Row + 1
        WbDestination.Worksheets("Donnees").Range("A6:N" & L).ClearContents
     
         'Chemin = "X:\30_QUALITE\307_Gestion_de_service\AAAA-Main-Courante-Atelier\Recherches pour MC_commun\MC_commun"
        Chemin = ThisWorkbook.Path    'si les 2 fichiers dans même dossier
     
        'demande à l'utilisateur le numéro de semaine, semaine en cours par défaut
        Semaine = InputBox("N° de la semaine", "SEMAINE", DatePart("ww", Date, vbMonday) - 1)
        If Semaine = 0 Then Exit Sub
        Fichier = "MC_Shootage.xlsm"
        If FichierExiste(Chemin & "\" & Fichier) Then
     
        'ouverture du fichier en lecture seule
            Workbooks.Open Filename:=Chemin & "\" & Fichier, UpdateLinks:=0, ReadOnly:=True
            Set WbSource = ActiveWorkbook
            On Error Resume Next
            x = Application.WorksheetFunction.CountIf(WbSource.Worksheets("Synthese").Range("B5:B1000"), "=" & Semaine)
                If x > 0 Then
            With WbSource.Worksheets("Synthese")
                    'Transfert des données
                    'exemple pour ajout de ligne(s)
                    For Each cel In .Range("B6:B1000")
                        If cel = Semaine Then
                            L = WbDestination.Worksheets("Donnees").Range("A65536").End(xlUp).Row + 1
                             .Range("A" & cel.Row & ":N" & cel.Row).Copy Destination:=WbDestination.Worksheets("Donnees").Range("A" & L)
                        End If
                    Next cel
            End With
     
            WbSource.Close SaveChanges:=False
                Else
            WbSource.Close SaveChanges:=False
                End If
          End If
    End Sub
     
    Function FichierExiste(NomFichier As String) As Boolean
        FichierExiste = Dir(NomFichier) <> "" And NomFichier <> ""
    End Function
    Merci pour votre aide

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Tu pourrais te créer un tableau de noms de fichiers
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim arrFichiers as Variant
    arrFichiers = Array("MC_Plastique", "MC_Finition", "MC_Expédition", "MC_Shootage")
    For I = 0 to UBound(arrFichiers)
       Workbooks.Open Chemin & arrFichiers(I) & ".extension"
       '... le traitement
       Workbooks(arrFichiers(I)).Close  False  'ou True si tu veux sauvegarder
    Next
    Tu pourrais aussi inscrire les noms de fichiers dans une feuille et boucler sur ces noms

  3. #3
    Membre averti
    Femme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Par défaut
    J'ai eu la même problématique à traiter il y a quelque temps.
    Ma solution : créer un tableau dans une feuille avec dans une colonne le nom du fichier et ds une autre le chemin d'accès.
    ensuite, je boucle de la sorte (cela passe par un UF - mes noms de fichiers sont dans Plage:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    Set plage = Range("A6:A9") 'defini la plage pour la boucle
        For Each cell In plage
        i = cell.Row 'recupere le numero de ligne
        nombox = "Box_" & cell.Value 'defini le nom de la Box
            If Me.Controls(nombox).Value = True Then 'boucle sur chaque Box, si Box cochee alors
                ThisWorkbook.Activate
                Sheets("Commandes").Activate
                If i = 9 Then
                    nomfichier = Range("B" & i).Value & ".xls"
                Else
                    nomfichier = Range("B" & i).Value & ".xlsm" 'recupere le nom du fichier a ouvrir
                End If
                chemin = Range("D" & i).Value 'recupere le chemin du fichier a ouvrir
                ouvrefichier = chemin & "\" & nomfichier
                For Each wb In Application.Workbooks 'verifie si le classeur est deja ouvert
                    If wb.Name = nomfichier Then ordre = "oui"
                Next wb
                    If ordre = "oui" Then 'si le classeur est ouvert, on active
                        Windows(nomfichier).Activate
                    Else
                        ' si le classeur n'est pas ouvert
                        If Dir(chemin & "\" & nomfichier, vbArchive) <> "" Then 'verifie si lee fichier existe
                        'si le fichier existe on ouvre
                            ChDir chemin
                            Workbooks.Open Filename:=ouvrefichier
                        Else
                        ' si le fichier n'existe pas on informe l'utilisateur
                            MsgBox "Le fichier " & nomfichier & " est introuvable ou n'existe pas !" & Chr(10) _
                            & "Veuillez vérifier l'existence du fichier, son nom et son chemin d'accès dans la feuille Commandes." _
                            , vbOKOnly + vbCritical, "ERREUR OUVERTURE FICHIER"
                        End If
                    End If
            End If
        ordre = ""
        Next cell

    bon courage !

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juin 2013
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2013
    Messages : 61
    Par défaut
    Bonjour Lamite, parmi

    J'ai testé le programme de Lamite est j'ai un message d'erreur qui s'affiche à la ligne 5 :"Utilisation incorrect du mot clé Me".

    Pourriez vous m'aider svp?

    Voici mon programme et les documents concernés en PJ:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub Dechet_Finition_Hebdo()
     
    Set plage = Range("A1:A4") 'defini la plage pour la boucle
        For Each cell In plage
        i = cell.Row 'recupere le numero de ligne
        nombox = "Box_" & cell.Value 'defini le nom de la Box
            If Me.Controls(nombox).Value = True Then 'boucle sur chaque Box, si Box cochee alors
                ThisWorkbook.Activate
                Sheets("Commandes").Activate
                If i = 4 Then
                    NomFichier = Range("A" & i).Value & ".xlsm"
                Else
                    NomFichier = Range("A" & i).Value & ".xlsm" 'recupere le nom du fichier a ouvrir
                End If
                Chemin = Range("B" & i).Value 'recupere le chemin du fichier a ouvrir
                ouvrefichier = Chemin & "\" & NomFichier
                For Each wb In Application.Workbooks 'verifie si le classeur est deja ouvert
                    If wb.Name = NomFichier Then ordre = "oui"
                Next wb
                    If ordre = "oui" Then 'si le classeur est ouvert, on active
                        Windows(NomFichier).Activate
                    Else
                        ' si le classeur n'est pas ouvert
                        If Dir(Chemin & "\" & NomFichier, vbArchive) <> "" Then 'verifie si lee fichier existe
                        'si le fichier existe on ouvre
                            ChDir Chemin
                            Workbooks.Open Filename:=ouvrefichier
                        Else
                        ' si le fichier n'existe pas on informe l'utilisateur
                            MsgBox "Le fichier " & NomFichier & " est introuvable ou n'existe pas !" & Chr(10) _
                            & "Veuillez vérifier l'existence du fichier, son nom et son chemin d'accès dans la feuille Commandes." _
                            , vbOKOnly + vbCritical, "ERREUR OUVERTURE FICHIER"
                        End If
                    End If
            End If
        ordre = ""
        Next cell
    End Sub
    Merci
    Fichiers attachés Fichiers attachés

  5. #5
    Membre averti
    Femme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Avril 2014
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Avril 2014
    Messages : 45
    Par défaut
    c'est peut être normal. mon code était à adapter... j'utilise un UF !!!
    Comment interagis-tu avec l'utilisateur ? comment tu lui demandes d'ouvrir les fichiers ?
    ou est-ce que tu ouvres automatiquement les fichiers sans lui demander ?
    moi, je lui demande donc j'utilise un formulaire (UF) et j'ai dû faire une boucle sur mes combobox.
    le Me. est relatif a mon UF !

  6. #6
    Expert éminent
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Par défaut

    Bonjour, bonjour,

    comme pourtant indiqué dans l'aide VBA (premier réflexe avant de poster !),
    Me fait référence à l'instance du module de classe dans lequel le code se trouve.

    Il ne peut donc pas être utilisé dans un module normal mais dans celui d'une feuille, du classeur ou encore un UserForm
    S'il est dans le module de la feuille 1, Me est équivalent à son CodeName Feuil1 ou encore à Worksheets(1)

    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

Discussions similaires

  1. [XL-2003] Ouvrir un fichier excel avec vba
    Par Lardon dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 22/07/2019, 13h52
  2. [XL-2010] Impossible d'ouvrir un fichier excel 2010 (Vba)
    Par Nemesis-fr dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 27/12/2013, 14h57
  3. [XL-2003] Pouvoir ouvrir des fichiers excel avec vba sans le faire planter
    Par perpitou dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 01/12/2011, 15h52
  4. Réponses: 1
    Dernier message: 04/02/2010, 20h41
  5. comment ouvrir plusieurs fichiers excel?
    Par julianauribe dans le forum MATLAB
    Réponses: 6
    Dernier message: 16/04/2009, 15h45

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo