Collision Dir et MkDir … Dur à marier!

YANN-56

XLDnaute Barbatruc
Bonsoir, ou Bonjour suivant l'heure à ceux qui passeront par là,

Je créé ainsi un Dossier "MACHIN" dans le répertoire où est le Classeur que je joins.

Code:
Private Sub CommandButton1_Click()
Dim EXISTANT As Boolean

DOSSIERS_PRESENTS = Dir(ThisWorkbook.Path & "\", vbDirectory)

Do While DOSSIERS_PRESENTS <> ""

  If DOSSIERS_PRESENTS = "MACHIN" Then EXISTANT = True
   
DOSSIERS_PRESENTS = Dir
Loop

If EXISTANT = False Then
MkDir ThisWorkbook.Path & "\" & "MACHIN"

End If

End Sub

Le code actuel fonctionne bien, mais ne me satisfait pas … Car trop de lignes!

J'ai tenté, pour éviter le " Boolean, avec des trucs du genre:

Code:
If Dir(ThisWorkbook.Path & "\" & "MACHIN" & "\") = "" Then

Hum! Echec!!! (Pourtant j'ai fait une caisse d'essais en modifiant la syntaxe)

D'accord; ma question est liée à un petit caprice.... Donc pas primordiale.
Seulement pour ma gouverne; je le conçois.
Mais qui sait, pourra-t-elle aussi servir à autres que moi.

Merci à qui me fera avancer dans ma recherche à simplifier ce code.

Yann
 

Pièces jointes

  • DIRECTORY.xls
    19 KB · Affichages: 44

JNP

XLDnaute Barbatruc
Re : Collision Dir et MkDir … Dur à marier!

Bonsoir Yann :),
Je croyais que tu faisais parti des brontosaures tombés dans la marmite MS-DOS quand tu étais déjà grand :p...
Non, je plaisante :rolleyes:...
Dir est une instruction MS-DOS détournée sous VBA... Dir, en DOS, c'est lister le contenu d'un répertoire. Du coup, VBA aurait pu charger ça dans un tableau, mais il a décidé que Dir donnait le premier fichier/dossier dans le chemin, puis que Dir sans chemin donnait le suivant pour boucler dans tout le dossier ;)...
Donc si tu veux lire un fichier inexistant, ça va pas le faire :p...
Tu as donc la méthode "bourrin", "je ne m'assure pas que le dossier existe, je le crée, et je m'arrange pour que ça beugue pas..."
Code:
Private Sub CommandButton1_Click()
On Error Resume Next
MkDir ThisWorkbook.Path & "\" & "MACHIN"
On Error GoTo 0
End Sub
"Bourrin", mais efficace ;)...
Sinon, plus subtil, plus logique, mais plus consommateur de ligne de code
Code:
Private Sub CommandButton1_Click()
Dim fs
Set fs = CreateObject("Scripting.FileSystemObject")
If Not fs.FolderExists(ThisWorkbook.Path & "\" & "MACHIN") Then MkDir ThisWorkbook.Path & "\" & "MACHIN"
End Sub
Bonne soirée :cool:
 

kjin

XLDnaute Barbatruc
Re : Collision Dir et MkDir … Dur à marier!

Bonsoir,
Je croyais que tu faisais parti des brontosaures tombés dans la marmite MS-DOS quand tu étais déjà grand...
La réponse est dans la question...
Code:
Private Sub CommandButton1_Click()
Dim Rep$
Rep = ThisWorkbook.Path & "\MACHIN"
If Dir(Rep, vbDirectory + vbArchive + vbHidden) = "" Then
MkDir Rep
End If
End Sub
...on peut se passer de la variable Rep
A+
kjin
 

YANN-56

XLDnaute Barbatruc
Re : Collision Dir et MkDir … Dur à marier!

Bonjour JNP, kjn, et à ceux qui passeront par ici,

JNP: Je me régale de ton humour! ... Tu ne perds rien pour attendre!!! :)

kjn: J'aime bien quand tu passes par là! ... J'ai bien fait d'attendre :)

Je suis bigrement pris en cet instant, mais je vais éplucher
et vous rendre commentaires et réponses en deuxième moitié d'après-midi.

Un grand Merci à vous deux d'avoir regardé, et proposé pertinentes solurions.

A un peu plus tard,

Yann
 

YANN-56

XLDnaute Barbatruc
Re : Collision Dir et MkDir … Dur à marier!

Re JNP et kjin, :) :)

JNP: J'ai découvert l'informatique vers 43 balais quand on m'a fichu un ordi sur mon bureau,
alors que je ne savais même pas me servir d'un Minitel!... Et personne autour plus avancé!

Je ne risquais pas l'Over-Dos car il m'était impossible d'ouvrir le capot.

Ce n'est que vers 2004 sous Wind 98 que par hasard; j'ai vu dans un bouton oublié dans un tarif de fournisseur une macro majorant de 5 % les cellules d'un tableau.
J'ai trouvé marrant, et j'ai continué.......................................................... XLD a fait le reste!!!

kjin: J'ai opté pour ta proposition ainsi:

Code:
If Dir(ThisWorkbook.Path & "\MACHIN", vbDirectory + vbArchive + vbHidden) = "" Then MkDir ThisWorkbook.Path & "\MACHIN"

En réalité la ligne devrait être encore plus courte puisque le chemin sera un petit mot
mis en variable Public de type String à l'ouverture du Classeur.

Il me restera aussi à peaufiner le pourquoi de "+ vbArchive + vbHidden"

En tous les cas je suis très heureux d'avoir eu si belles réponses à ma petite question accessoire.

Outre cela; le plaisir de vous avoir encore une fois croisés.

Grand Merci à vous deux, pour ces riches enseignements.

Amicalement.

Yann
 

JNP

XLDnaute Barbatruc
Re : Collision Dir et MkDir … Dur à marier!

Re :),
JNP: J'ai découvert l'informatique vers 43 balais quand on m'a fichu un ordi sur mon bureau,
alors que je ne savais même pas me servir d'un Minitel!... Et personne autour plus avancé!

Je ne risquais pas l'Over-Dos car il m'était impossible d'ouvrir le capot.

Ce n'est que vers 2004 sous Wind 98 que par hasard; j'ai vu dans un bouton oublié dans un tarif de fournisseur une macro majorant de 5 % les cellules d'un tableau.
J'ai trouvé marrant, et j'ai continué.......................................................... XLD a fait le reste!!!
C'est vrai que je l'ai découverte à 12 ans en 1975 :p... Mais bon, j'ai attendu 2007 pour me plonger dans Excel, ceci compensant cela :rolleyes:...
Mais depuis qu'on m'a dit que j'avais le Pattern austère, j'essaie d'apporter un peu de gaieté dans ce monde de brute :p...
Bien que, je crois que je taquinais déjà un peu avant, mais bon :rolleyes:...
Très amicalement, bonne fin de journée :cool:
 
Dernière édition:

YANN-56

XLDnaute Barbatruc
Re : Collision Dir et MkDir … Dur à marier!

JNP: Maintenant que je sais que tu es mon cadet:
"Fais gaffe ta gueule à la récrée!" Sale gosse!.... Non! Mais!

Bon! Pépé a encore besoin que tu lui dises comment faire. :)

Quant au coté "Taquin" j'aime bien!

Ce n'est là que ce que je sais dire à petite Fifille: "Taquine"
quand elle fait un nœud papillon avec les lunettes de son grand-père!

Amicalement, et je l'espère à plus tard sur autres Fils.

Yann
 

Discussions similaires

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 611
Messages
2 090 226
Membres
104 453
dernier inscrit
benjiii88