VBA ouvrir fichier xls [Résolu/Fermé]

Signaler
Messages postés
34
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
25 mars 2020
-
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
-
Bonjour,
J'ai crée un tableau excel avec la liste de tous les chemins des fichiers excel présents dans un répertoire.
J'aimerai créer une macro qui ouvre chaque fichier, en allant chercher à l'intérieur de la cellule son chemin. Il s'agit d'une liste, donc je pensais faire une boucle qui ouvre tour à tour chaque fichier. (pour ce que la macro ira faire dedans, je me débrouillerai... ou vous demanderai à nouveau !!)
Quelqu'un pourrait-il m'expliquer comment faire svp ?
D'avance merci !
++

3 réponses

Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 594
Salut,
Je suppose dans l'exemple que tes chemins sont stockés dans la colonne A à partir de A2 :

Dim chemin As String
Dim i As Integer, derlign As Integer
derlign = Range("A65536").End(xlUp).Row
For i = 2 To derlign
chemin = Cells(i, 1)
Workbooks.Open Filename:=chemin
'ici fais ce qu'il te plait
ActiveWorkbook.Close
Next

Messages postés
34
Date d'inscription
mardi 18 mars 2008
Statut
Membre
Dernière intervention
25 mars 2020
14
C'est exactement ça, merci ! :-)
Bon... ben je reviens déjà vers toi : je souhaite maintenant importer des informations contenues dans des cellules du premier tableau (celui que je viens de faire ouvrir) vers un second.
J'ai une petite complication s'agissant d'une cellule contenant n°+nom (ex : 3A - Baudelaire) car je veux prendre ces infos pour mettre le n° dans une cellule et le nom dans l'autre.
A savoir que n°+nom se présente toujours de manière à peu près identique. Le n° peut contenir jusqu'à trois caractère, suivi d'un expace puis un tiret puis re-espace et le nom.
Merci d'avance de votre aide !
++
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 594
Pas de problème. Je vais essayer de détailler un max et d'être clair...

Tu veux extraire une partie du contenu de la cellule mettons A1. Tu va donc avoir besoin de :
- nombre de caractères contenus dans A1 :
Len(Cells(1, 1))

- place du tiret dans la cellule A1 :
InStr(Cells(1, 1), "-")

- extraire la partie à gauche de la cellule A1 :
Left(Cells(1, 1), 3)
'renvoie les 3 premiers caractères contenus dans A1

Ce que l'on veux ce sont les x caractères à gauche de la chaine de caractères contenue dans A1.
x = place du tiret (4) - 1. Dans notre cas, on ne veux pas conserver l'espace donc x = place du tiret - 2
en VBA x étant un nombre :
Dim x As Integer
x = InStr(Cells(1, 1), "-") - 2

La partie à gauche du tiret dans notre cellule A1 est :
Dim x As Integer
x = InStr(Cells(1, 1), "-") - 2
Left(Cells(1, 1), x)

ou autrement dit :
Left(Cells(1, 1), InStr(Cells(1, 1), "-") - 2)
'ceci nous évitant la création d'une variable inutile.
Même raisonnement pour la partie droite :
x = Nbre total de caractères - place du tiret - 1
en VBA :
Dim x As Integer
x = Len(Cells(1, 1)) - InStr(Cells(1, 1), "-") - 1

Donc la partie "droite" de A1 s'écrit en VBA :
Right(Cells(1, 1), Len(Cells(1, 1)) - InStr(Cells(1, 1), "-") - 1)


Importer vers un second tableau :
2nd tableau : "destination"
cellules de destination : Feuille "Feuil1" cellules B1 et C1
1er tableau : classeur que l'on vient d'ouvrir
cellule source : A1

With Workbooks("destination.xls")
.Sheets("Feuil1").Range("B1") = Left(Range("A1"), InStr(Range("A1"), "-") - 2)
.Sheets("Feuil1").Range("C1") = Right(Range("A1"), Len(Range("A1") - InStr(Range("A1"), "-") - 1)
End With