Macro qui ouvre et ferme un par un d'autres documents excel (liste)

doublenico

XLDnaute Junior
Bonjour à tous,

J'ai un fichier central qui fait des consolidations sur plusieurs fichiers excel(avec des consolidations internes en plus dans le document).
Pour mettre à jour certaines cellules, je dois obligatoirement ouvrir certains documents excel sinon je n'ai pas les derniers chiffres dans mes cellules.

Je souhaiterai créer une macro qui ouvrirait une liste d'url de doc excel et qui les fermerait document par document.
Ex : sur ma feuille Liste, j'aurai en A1 une url, en A2 une autre url et pas en A3 mais demain j'aurai peut être une url en A3.

Merci d'avance une nouvelle fois pour votre aide
 

gilbert_RGI

XLDnaute Barbatruc
Re : Macro qui ouvre et ferme un par un d'autres documents excel (liste)

bonjour;

cette macro peut-elle faire votre affaire ? pour l'ouverture des classeurs
je suppose qu'avant de refermer il faut faire un traitement des données ?


Code:
Sub Ouverture()
    Dim a As Variant, Nom As String
    Application.ScreenUpdating = False
    Nom = ActiveWorkbook.Name
    For nbf = 1 To 3  'nombre de fichiers à ouvrir
        a = Sheets(1).Cells(nbf, 2).Value 'noms des fichiers à ouvrir en feuille 1 colonne 2
        Workbooks.Open a 'ouverture du fichier
        Workbooks(Nom).Activate 'retour à la fichier de commande
    Next
    Application.ScreenUpdating = True
    Workbooks(Nom).Activate
End Sub

:cool:

voilà un exemple commenté

Code:
Sub Ouverture()
    Dim a As Variant, Nom As String
    Application.ScreenUpdating = False
    Nom = ActiveWorkbook.Name
    lig = Workbooks(Nom).Sheets(1).Range("f65536").End(xlUp).Row 'position de la ligne recevant les données
    If lig > 1 Then lig = lig + 1 'astuce pour utiliser la première ligne
    For nbf = 1 To 3  'nombre de fichiers à ouvrir
        a = Sheets(1).Cells(nbf, 2).Value    'noms et chemins des fichiers à ouvrir en feuille 1 colonne 2
        Workbooks.Open a    'ouverture du fichier
        Workbooks(Nom).Sheets(1).Cells(lig, 6) = Sheets(1).Cells(1, 1).Value    'exemple de traitement
        n = Len(a) - InStrRev(a, "\") 'recherche du slash
        b = Right(a, n) 'procédure pour connaitre le nom du fichier
        Workbooks(b).Close    'fermeture du fichier
        Workbooks(Nom).Activate    'retour au fichier de commande
        lig = lig + 1 'incrémentation de la ligne
    Next
    Application.ScreenUpdating = True
    Workbooks(Nom).Activate
End Sub

:rolleyes:
 
Dernière édition:

doublenico

XLDnaute Junior
Re : Macro qui ouvre et ferme un par un d'autres documents excel (liste)

Merci pour ta réponse.
J'y suis presque en partant de ta première macro, j'ouvre bien les documents (sauf s'il est déjà ouvert, là j'ai une erreur) mais je n'arrive pas à fermer le premier doc avant ouvert depuis la liste, j'ai le message "erreur d'execution '9' L'indice n'appartient pas àla sélection....
 

gilbert_RGI

XLDnaute Barbatruc
Re : Macro qui ouvre et ferme un par un d'autres documents excel (liste)

voilà un fichier exemple qui fonctionne chez moi

effacer la colonne F
les fichiers testx.xls sont dans C:
la donnée dans chaque fichier est en a1 pour cet exemple
le fichier est avec un bouton :rolleyes:

et une gestion d'erreur en cas de fichier non existant
 

Pièces jointes

  • ouvrir_récupdonnee(1).xls
    41.5 KB · Affichages: 53
Dernière édition:

doublenico

XLDnaute Junior
Re : Macro qui ouvre et ferme un par un d'autres documents excel (liste)

Merci pour ta nouvelle macro mais même avec la gestion des erreurs mes fichiers restent ouverts...
Si je masque ta gestion des erreurs je retrouve l'erreur "l"indice n'appartient pas àla sélection...)
 

gilbert_RGI

XLDnaute Barbatruc
Re : Macro qui ouvre et ferme un par un d'autres documents excel (liste)

l'erreur arrive a quelle ligne ?

la macro fonctionne sans problème chez moi en local

si le fichier ne se referme pas c'est qu'une erreur se produit au moment du traitement des données

tu peux tester mon fichier tel qu'il est en mettant dans le c:\ trois fichiers test.xls, test1.xls, test2.xls
contenant chacun une donnée en A1
ces données sont importées en page 1 colonne F du fichier envoyé

voir vidéo ci-jointe
 

Pièces jointes

  • clip0008.zip
    31.1 KB · Affichages: 23
Dernière édition:

gilbert_RGI

XLDnaute Barbatruc
Re : Macro qui ouvre et ferme un par un d'autres documents excel (liste)

le fichier à ouvrir n'est pas un xls ?????????

fichiers reconnus.JPG

je crainds que ces fichiers ne soient pas reconnus comme des Workbooks :confused:
 
Dernière édition:

doublenico

XLDnaute Junior
Re : Macro qui ouvre et ferme un par un d'autres documents excel (liste)

Si si ce sont biens des fichiers excel, je prends juste l'adresse logique du document.
En prennant l'adresse physique, ca donne la même chose : Ce lien n'existe plus
Le résultat est le même
 

gilbert_RGI

XLDnaute Barbatruc
Re : Macro qui ouvre et ferme un par un d'autres documents excel (liste)

remplaces le code du fichier par celui-ci

Code:
Sub Ouverture()
    Dim a As Variant, Nom As String
    Nom = ActiveWorkbook.Name
    Columns("f:f").ClearContents
    On Error GoTo suite
    Application.ScreenUpdating = False
    nbfich = Workbooks(Nom).Sheets(1).Range("b65536").End(xlUp).Row
    lig = Workbooks(Nom).Sheets(1).Range("f65536").End(xlUp).Row    'position de la ligne recevant les données
    If lig > 1 Then lig = lig + 1    'astuce pour utiliser la première ligne
    For nbf = 1 To nbfich  'nombre de fichiers à ouvrir
        a = Sheets(1).Cells(nbf, 2).Value    'noms des fichiers à ouvrir en feuille 1 colonne 2
        Workbooks.Open a    'ouverture du fichier
        Workbooks(Nom).Sheets(1).Cells(lig, 6) = Sheets(1).Cells(1, 1).Value    'exemple de traitement
        'n = Len(a) - InStrRev(a, "\")    'recherche du slash
        'b = Right(a, n)    'procédure pour connaitre le nom du fichier
        If ActiveWorkbook.Name = Workbooks(Nom).Name Then GoTo plus
        ActiveWorkbook.Close
plus:        'Workbooks(b).Close    'fermeture du fichier
        Workbooks(Nom).Activate    'retour au fichier de commande
reprise:
        lig = lig + 1    'incrémentation de la ligne
    Next
    Application.ScreenUpdating = True
    Workbooks(Nom).Activate
    Exit Sub
suite:
    n = Len(a) - InStrRev(a, "\")
    b = Right(a, n)
    If Err.Number = 1004 Then MsgBox " Le fichier " & b & " n'est pas présent ICI : " & a
    Resume Next: GoTo reprise
End Sub

une erreur possible l'antislash "\" à changer avec un slash "/"
 
Dernière édition:

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 105
Messages
2 085 350
Membres
102 870
dernier inscrit
Armisa