VBA : ouvrir plusieurs fichiers avec "Parcourir" et les appeler
restonszen
-
restonszen -
restonszen -
Bonjour à tous,
Je viens solliciter votre aide parce que je ne m'en sors pas dans ma macro VBA.
C'est certainement dû au fait que je suis une grande débutante, alors je vous demanderai d'être indulgents...
Je souhaite ouvrir plusieurs fichiers excel (4 exactement), fichiers dont le nom et la localisation ne sont pas définis (et pourront être changés au cours du temps). J'ai donc mis en place 4 userforms pour « parcourir » et « ouvrir » ces 4 fichiers.
Ma question : comment spécifier, par la suite, que c'est dans le 1er (ou 2e, ou 3e, ou 4e) fichier ouvert que je veux récupérer (copier) telle donnée, le nom/ chemin de ces fichiers étant inconnu à l'avance ?
J'ai quand même fait quelques tentatives. Par exemple, voici le code du bouton « parcourir » (le même pour chaque userform), je modifie juste les 2 avant-dernières lignes, pour pouvoir ouvrir l'userform suivant.
Je vous épargne les boutons "annuler" et "valider".
Ce code semble fonctionner... en tout cas il ouvre bien les userforms. Mais bon, vous l'aurez vu, j'ai mis pas mal de tentatives de nommage, et je ne sais pas si elles sont bonnes...
J'ai tenté un selecteditems, mais il me sort toujours une erreur « fonction non définie »... Je dois avoir loupé quelque chose.
Bref, du coup je suis coincée pour la suite.
Please, help ?
Je ne sais pas si j'ai été claire...Si ce n'est pas le cas, faites le moi savoir.
Tout(e) aide/conseil pour progresser serait la(e) bienvenu(e) !
D'avance, merci beaucoup à tous.
Je viens solliciter votre aide parce que je ne m'en sors pas dans ma macro VBA.
C'est certainement dû au fait que je suis une grande débutante, alors je vous demanderai d'être indulgents...
Je souhaite ouvrir plusieurs fichiers excel (4 exactement), fichiers dont le nom et la localisation ne sont pas définis (et pourront être changés au cours du temps). J'ai donc mis en place 4 userforms pour « parcourir » et « ouvrir » ces 4 fichiers.
Ma question : comment spécifier, par la suite, que c'est dans le 1er (ou 2e, ou 3e, ou 4e) fichier ouvert que je veux récupérer (copier) telle donnée, le nom/ chemin de ces fichiers étant inconnu à l'avance ?
J'ai quand même fait quelques tentatives. Par exemple, voici le code du bouton « parcourir » (le même pour chaque userform), je modifie juste les 2 avant-dernières lignes, pour pouvoir ouvrir l'userform suivant.
Private Sub CommandButton1_Click()
'action du bouton parcourir
'ouverture du fichier en question pour permettre de vérifier que le fichier est le bon
'un seul choix possible
'il faut que le fichier soit un fichier excel
Dim Fichier, NomFichier
Fichier = Application.GetOpenFilename("Fichiers Microsoft Office Excel(*.xls; *.xlsx), *.xls; *.xlsx")
'action si erreur
If Fichier = False Then Exit Sub
If Fichier Like "*\" & ThisWorkbook.Name Then MsgBox "Ouverture non autorisée.": Exit Sub
On Error Resume Next
'action si ok
Workbooks.Open Fichier
On Error GoTo 0
NomFichier = Dir(Fichier)
Workbooks(NomFichier).Activate
'fermeture de cet userform et ouverture du suivant
UserForm1.Hide
UserForm2.Show
End Sub
Je vous épargne les boutons "annuler" et "valider".
Ce code semble fonctionner... en tout cas il ouvre bien les userforms. Mais bon, vous l'aurez vu, j'ai mis pas mal de tentatives de nommage, et je ne sais pas si elles sont bonnes...
J'ai tenté un selecteditems, mais il me sort toujours une erreur « fonction non définie »... Je dois avoir loupé quelque chose.
Bref, du coup je suis coincée pour la suite.
Please, help ?
Je ne sais pas si j'ai été claire...Si ce n'est pas le cas, faites le moi savoir.
Tout(e) aide/conseil pour progresser serait la(e) bienvenu(e) !
D'avance, merci beaucoup à tous.
A voir également:
- VBA : ouvrir plusieurs fichiers avec "Parcourir" et les appeler
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Vba ouvrir un fichier excel avec chemin ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
4 réponses
Bonsoir restonszen ,
Pourquoi ouvrir les quatre fichiers dans quatre userforms ?
Tu peux le faire dans le même module ou userform en donnant à chaque fichier un numéro d'index .. plus simplement fichierOuvert = 1 pour le premier fichier, fichierOuvert = 2 pour le deuxième fichier, etc
Ensuite, tu lis le fichier pour savoir si c'est le bon .. et si ok, tu travaille avec celui-là, sinon tu insvestit dans le deuxième fichier
A+
Pourquoi ouvrir les quatre fichiers dans quatre userforms ?
Tu peux le faire dans le même module ou userform en donnant à chaque fichier un numéro d'index .. plus simplement fichierOuvert = 1 pour le premier fichier, fichierOuvert = 2 pour le deuxième fichier, etc
Ensuite, tu lis le fichier pour savoir si c'est le bon .. et si ok, tu travaille avec celui-là, sinon tu insvestit dans le deuxième fichier
A+
Bonsoir,
tu peux les déclarer dans des variables juste après leur ouverture (toujours actif) :
Dim wb As Workbook, wb1 As Workbook, wb2 As Workbook, wb3 As Workbook, wb4 As Workbook
' ouverture fichier 1
.....
Set wb1 = ActiveWorkbook
....
Quand tu as trouvé celui à utiliser, le 3 par exemple :
set wb= wb3
With wb
With Sheets("Feuil1")
.[Feuil1!A3] = "ok"
End With
End With
ou bien l'activer pour ne pas être obligé de le nommer et raccourcir le code.
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
tu peux les déclarer dans des variables juste après leur ouverture (toujours actif) :
Dim wb As Workbook, wb1 As Workbook, wb2 As Workbook, wb3 As Workbook, wb4 As Workbook
' ouverture fichier 1
.....
Set wb1 = ActiveWorkbook
....
Quand tu as trouvé celui à utiliser, le 3 par exemple :
set wb= wb3
With wb
With Sheets("Feuil1")
.[Feuil1!A3] = "ok"
End With
End With
ou bien l'activer pour ne pas être obligé de le nommer et raccourcir le code.
eric
Jamais tu ne répondras à un mp non sollicité...
Bon, ça c'est fait.
Bonjour tou(te)s
Je pense que c'est un truc comme ça que tu veux...
Sélection multiple sur l'explorateur de fichiers et ouverture de tout les classeurs sélectionnés
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Je pense que c'est un truc comme ça que tu veux...
Sub OuvreMulti()
Dim Fichier
Dim i As Integer
Fichier = Application.GetOpenFilename("Fichiers Excel(*.xls; *.xlsx), *.xls; *.xlsx", , , , True)
On Error GoTo Annuler
For i = 1 To UBound(Fichier)
'Si tu veux employer Like il faut mettre Option Compare Text dans le haut du module
'If not Fichier(i) Like "*" & ThisWorkbook.Name then
If Mid(Fichier(i), InStrRev(Fichier(i), "\") + 1) <> ThisWorkbook.Name Then
On Error Resume Next
Workbooks.Open Fichier(i)
Else
MsgBox "le fichier " & ThisWorkbook.Name & " est déjà ouvert"
End If
Next i
Annuler:
End Sub
Sélection multiple sur l'explorateur de fichiers et ouverture de tout les classeurs sélectionnés
A+
Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
NOTE : Je ne répond pas aux MP pour les questions techniques.
Bonjour à tous,
Tout d'abord, merci pour vos réponses, toutes vraiment très utiles ... et très instructives !!!
C'est peut-être pas le lieu pour le dire, mais j'apprécie énormément cette entraide (enfin, cette aide, vu que je ne suis pas -encore- très utile sur le sujet) qu'il est difficile de retrouver par ailleurs !
Ensuite, pour vous répondre :
1- à Heliotte :
Je ne connaissais pas le fonctionnement des index -_-'
Je pensais que les chiffres étaient surtout utiles pour ... calculer. (Non, je ne me loupe pas quand c'est pour me ficher la honte). Je retiens !
Du coup, je pensais faire 4 userforms pour "séparer" les instructions pour chaque fichier... Mais ça n'a fait que retarder l'échéance, j'ai ensuite été bloquée parce que je devais faire référence à ces fichiers ouverts précédemment dans un module commun ...
2- à Eriic :
Effectivement, Set simplifie grandement les choses !!! J'étais complètement à côté de la plaque pour le nommage de mes variables, les = ne sont de toute évidence pas toujours suffisants... et je les utilisais à tort et à travers.
Je note aussi qu'il faut utiliser Set 2 fois : à la déclaration de la variable (Set wb1 = activeworkbook) et lorsqu'on veut utiliser le fichier (Set wb=wb3). Toute seule, je n'aurais pas du tout pensé à le faire.
3- à Lermite222 :
J'ai aussi beaucoup appris grâce à ton code :) ubound, notamment, option compare text aussi (que je n'aurais pas su placer correctement :()...). Je pensais aussi que Mid n'était utilisé que pour remplacer des caractères... et c'est la première fois que j'entends parler de InStrRev...
Bref, pour info, vos réponses sont exactement ce que je cherchais, et en fait vous avez aussi (déjà) répondu à des questions que je ne me posais pas encore :) (Lol, je sais, il y a du boulot). Elles sont de plus compréhensibles et utilisables dans tout plein de situations, je suis ravie !!! J'ai eu de grands moments de solitude avec mon livre-catalogue-de- fonctions -que -je -ne -sais-pas- utiliser-correctement...
Merci encore de votre patience, de votre temps, et de vos conseils !
RZ
Tout d'abord, merci pour vos réponses, toutes vraiment très utiles ... et très instructives !!!
C'est peut-être pas le lieu pour le dire, mais j'apprécie énormément cette entraide (enfin, cette aide, vu que je ne suis pas -encore- très utile sur le sujet) qu'il est difficile de retrouver par ailleurs !
Ensuite, pour vous répondre :
1- à Heliotte :
Je ne connaissais pas le fonctionnement des index -_-'
Je pensais que les chiffres étaient surtout utiles pour ... calculer. (Non, je ne me loupe pas quand c'est pour me ficher la honte). Je retiens !
Du coup, je pensais faire 4 userforms pour "séparer" les instructions pour chaque fichier... Mais ça n'a fait que retarder l'échéance, j'ai ensuite été bloquée parce que je devais faire référence à ces fichiers ouverts précédemment dans un module commun ...
2- à Eriic :
Effectivement, Set simplifie grandement les choses !!! J'étais complètement à côté de la plaque pour le nommage de mes variables, les = ne sont de toute évidence pas toujours suffisants... et je les utilisais à tort et à travers.
Je note aussi qu'il faut utiliser Set 2 fois : à la déclaration de la variable (Set wb1 = activeworkbook) et lorsqu'on veut utiliser le fichier (Set wb=wb3). Toute seule, je n'aurais pas du tout pensé à le faire.
3- à Lermite222 :
J'ai aussi beaucoup appris grâce à ton code :) ubound, notamment, option compare text aussi (que je n'aurais pas su placer correctement :()...). Je pensais aussi que Mid n'était utilisé que pour remplacer des caractères... et c'est la première fois que j'entends parler de InStrRev...
Bref, pour info, vos réponses sont exactement ce que je cherchais, et en fait vous avez aussi (déjà) répondu à des questions que je ne me posais pas encore :) (Lol, je sais, il y a du boulot). Elles sont de plus compréhensibles et utilisables dans tout plein de situations, je suis ravie !!! J'ai eu de grands moments de solitude avec mon livre-catalogue-de- fonctions -que -je -ne -sais-pas- utiliser-correctement...
Merci encore de votre patience, de votre temps, et de vos conseils !
RZ