VBA ouvrir fichier xls

Résolu/Fermé
wam202 Messages postés 34 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 25 mars 2020 - 22 janv. 2010 à 10:54
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 22 janv. 2010 à 14:50
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 !
++
A voir également:

3 réponses

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
22 janv. 2010 à 11:03
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

0
wam202 Messages postés 34 Date d'inscription mardi 18 mars 2008 Statut Membre Dernière intervention 25 mars 2020 14
22 janv. 2010 à 11:58
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 !
++
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 743
22 janv. 2010 à 14:50
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

0