Vba => Bat
Résolu
zapp56
-
zapp56 -
zapp56 -
A voir également:
- Shcreatedirectoryex
- Fichier bat - Guide
- Bat to exe converter - Télécharger - Édition & Programmation
- Excel compter cellule couleur sans vba - Guide
- Incompatibilité de type vba ✓ - Forum VB / VBA
- Erreur 13 incompatibilité de type VBA excel ✓ - Forum Excel
4 réponses
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.
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 ?
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.
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.
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 ?
Un grand merci, c'est exactement ce que je cherchais. Ce code fonctionne parfaitement !
Merci =)
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++