Vba => Bat
Résolu/Fermé
A voir également:
- Shcreatedirectoryex
- Fichier bat - Guide
- Bat to exe converter - Télécharger - Édition & Programmation
- Incompatibilité de type vba ✓ - Forum Programmation
- Vba attendre 1 seconde ✓ - Forum VB / VBA
- Vba dernière colonne non vide ✓ - Forum VB / VBA
4 réponses
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 744
27 mars 2015 à 08:01
27 mars 2015 à 08:01
Bonjour,
Le plus simple, le plus pratique pour créer un répertoire et tous ses sous-répertoires uniquement lorsque cela est nécessaire (s'il n'existe pas) :
A adapter, bien sur. La constante monRep doit être une variable si tu désires la faire modifier par l'utilisateur.
Le plus simple, le plus pratique pour créer un répertoire et tous ses sous-répertoires uniquement lorsque cela est nécessaire (s'il n'existe pas) :
Private Declare Function SHCreateDirectoryEx Lib "shell32" Alias "SHCreateDirectoryExA" (ByVal hwnd As Long, ByVal pszPath As String, ByVal psa As Any) As Long Public Const monRep$ = "C:\Docs\Bdd\d1\d2\d3\" Sub Creation_Repertoire() 'sources : UcFoutu : 'http://www.developpez.net/forums/d613347/logiciels/microsoft-office/excel/macros-vba-excel/tester-repertoire-existe-creer-non/ SHCreateDirectoryEx 0, monRep, ByVal 0& End Sub
A adapter, bien sur. La constante monRep doit être une variable si tu désires la faire modifier par l'utilisateur.
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 684
25 mars 2015 à 21:59
25 mars 2015 à 21:59
Bonjour,
Quand tu lances ton batch, il suffit de rajouter le chemin du fichier :
run.bat chemin
et dans ton batch ce sera le premier paramètre %1
Quand tu lances ton batch, il suffit de rajouter le chemin du fichier :
run.bat chemin
et dans ton batch ce sera le premier paramètre %1
Merci de ta réponse, mais je n'ai pas compris :(
Pour plus de clarté :
"Run.bat" est mon fichier batch, dans le dossier "c:\Docs\"
REPERT = "c:\Docs\Bdd\" (as string) (modifiable dans la textbox de l'usf)
Quand j'appelle :
Je souhaiterais qu'il envoie à mon fichier "Run.bat" la variable REPERT.
Ainsi, le batch contiendrait la ligne de commande :
Suis-je plus clair ?
Pour plus de clarté :
"Run.bat" est mon fichier batch, dans le dossier "c:\Docs\"
REPERT = "c:\Docs\Bdd\" (as string) (modifiable dans la textbox de l'usf)
Quand j'appelle :
shell("c:\Docs\Run.bat", AppWinStyle.NormalFocus)
Je souhaiterais qu'il envoie à mon fichier "Run.bat" la variable REPERT.
Ainsi, le batch contiendrait la ligne de commande :
MD %REPERT%
Suis-je plus clair ?
blux
Messages postés
26006
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
25 avril 2024
3 289
26 mars 2015 à 14:49
26 mars 2015 à 14:49
Salut,
en VBA, on sait exécuter des commandes fichiers, pourquoi n'utilises-tu pas cette fonctionnalité ?
en VBA, on sait exécuter des commandes fichiers, pourquoi n'utilises-tu pas cette fonctionnalité ?
MkDir "répertoire"
Bonjour, blux, et merci de répondre.
Le problème de "MkDir" est que le chemin d'accès ne peut pas contenir plus d'un seul dossier.
Je sais qu'il y a une procédure pour créer certains dossiers, mais je ne l'ai pas comprise alors je me suis rabattu sur un batch.
De plus, il est possible que mon batch me serve ultérieurement si j'arrive à lui envoyer une variable.
Ou alors tu as une manière simple de créer des dossiers selon un path variable en vba, dans une procédure simple... Je rappelle que l'extraction du path est fait à partir d'une textbox sur usf.
Le problème de "MkDir" est que le chemin d'accès ne peut pas contenir plus d'un seul dossier.
Je sais qu'il y a une procédure pour créer certains dossiers, mais je ne l'ai pas comprise alors je me suis rabattu sur un batch.
De plus, il est possible que mon batch me serve ultérieurement si j'arrive à lui envoyer une variable.
Ou alors tu as une manière simple de créer des dossiers selon un path variable en vba, dans une procédure simple... Je rappelle que l'extraction du path est fait à partir d'une textbox sur usf.
blux
Messages postés
26006
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
25 avril 2024
3 289
>
zapp56
26 mars 2015 à 17:56
26 mars 2015 à 17:56
Tout est possible (ou presque) via vba en ce qui concerne la gestion de fichiers...
Qu'entends-tu par limite d'un seul dossier ?
Qu'entends-tu par limite d'un seul dossier ?
Si je fais :
ça va effectivement créer un dossier dans le répertoire c:
Mais si je fais :
Cela ne créera pas un dossier "Docs" puis un dossier "Bdd".
Ce que je veux c'est que le chemin d'accès puisse être totalement variable.
Dans un batch, si je fais
MD C:\Docs\Bdd\d1\d2\d3
Cela créera tous les dossiers, sous-dossiers etc du chemin d'accès.
MkDir ("c:\Docs\")
ça va effectivement créer un dossier dans le répertoire c:
Mais si je fais :
Mkdir ("c:\Docs\Bdd")
Cela ne créera pas un dossier "Docs" puis un dossier "Bdd".
Ce que je veux c'est que le chemin d'accès puisse être totalement variable.
Dans un batch, si je fais
MD C:\Docs\Bdd\d1\d2\d3
Cela créera tous les dossiers, sous-dossiers etc du chemin d'accès.
blux
Messages postés
26006
Date d'inscription
dimanche 26 août 2001
Statut
Modérateur
Dernière intervention
25 avril 2024
3 289
>
zapp56
26 mars 2015 à 18:31
26 mars 2015 à 18:31
C'est à toi de le gérer via une boucle...
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 684
26 mars 2015 à 18:35
26 mars 2015 à 18:35
Bonjour,
Je voudrais qu'elle lui envoie également la variable contenant le chemin d'accès
Avec
Ensuite dans un batch, si tu fais
Je voudrais qu'elle lui envoie également la variable contenant le chemin d'accès
Avec
shell("c:\Docs\Run.bat " & REPERT & ", AppWinStyle.NormalFocus), tu envoies bien ton accès.
Ensuite dans un batch, si tu fais
MD %1, cela donnera
MD C:\Docs\Bdd\d1\d2\d3si REPERT avait comme valeur "C:\Docs\Bdd\d1\d2\d3" : ce que tu veux me semble-t-il ?
gbinforme
Messages postés
14946
Date d'inscription
lundi 18 octobre 2004
Statut
Contributeur
Dernière intervention
24 juin 2020
4 684
26 mars 2015 à 20:18
26 mars 2015 à 20:18
c'est sûr que si tu mets cela ,&REPERT&, çà ne fonctionnera pas. il y avais un guillemet de trop :
shell("c:\Docs\Run.bat " & REPERT & ,AppWinStyle.NormalFocus)et il faut l'espace.
27 mars 2015 à 18:06
Un grand merci, c'est exactement ce que je cherchais. Ce code fonctionne parfaitement !
27 mars 2015 à 18:13
Merci =)
27 mars 2015 à 22:48
Absent pendant plusieurs jours, je prends juste 5 minutes pour te répondre.
Sans entrer dans le détail, renseigne toi (si tu ne connais pas encore) sur ce que sont les API de windows.
En gros, ce sont des fonctions mises à disposition de chacun par microsoft. Elles sont développées dans des fichiers dll.
Ici, on va utiliser une des fonctions contenues dans le fichier shell32.dll. Fais une recherche sur ton ordi, il la possède.
Cette fonction SHCreateDirectoryEx est là exactement pour servir à l'usage que tu en as aujourd'hui, la création lorsqu'il le faut, d'un répertoire.
On la déclare, en VBA, en entête de module. (Cela n'est pas sans rappeler la déclaration des fonctions en langage C...)
Une fois déclarée, en entête de module, tu peux à loisir t'en servir dans ton module, ou dans ton projet en globalité si tu l'as déclarée en Public.
Plus d'infos notamment pour ses paramètres...
A++
28 mars 2015 à 11:29