MsgBox n'apparaissant qu'une seule fois [Résolu]

Signaler
-
Messages postés
23656
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 novembre 2020
-
Bonjour,

Je viens de créer un fichier générique de gestion de restaurant.
J'ai installé sur la page d'accueil un bouton exécutant une macro permettant de créer l'arborescence nécessaire à l'utilisation du fichier.
J'ai mis en place une MsgBox à l'ouvertrue du fichier donnant les informations des actions à effectuer à la première utilisation du fichier (à savoir l'installation de l'arborescence).
J'aimerai que ce message apparaisse à l'ouverture jusqu'à exécution de la macro installant l'arborescence, mais ne s'ouvre plus aux ouvertures suivantes si l'arborescence a été créée.
Est-ce quelque chose d'envisageable selon vous? Si oui, avez-vous une idée du code à intégrer pour que cela devienne réel? :)

Merci d'avance pour votre aide


Configuration: Windows / Chrome 86.0.4240.198

4 réponses

Messages postés
23656
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 novembre 2020
6 479
Bonjour à tous,

à l'ouverture suivante il me rouvre la MsgBox pour créer l'arborescence...
C'est normal, la variable a été réinitialisée. Il aurait fallu stocker le résultat dans un nom qui est enregistré avec le classeur.

Au plus simple je ferai, dans ThisWorkbook :
Private Sub Workbook_Open()
    Dim nb As Long
    If Dir("C:\GestionResto\", vbDirectory) = "" Then MkDir ("C:\GestionResto\"): nb = nb + 1
    If Dir("C:\GestionResto\Planning Salle", vbDirectory) = "" Then MkDir ("C:\GestionResto\Planning Salle"): nb = nb + 1
    If Dir("C:\GestionResto\Planning Cuisine", vbDirectory) = "" Then MkDir ("C:\GestionResto\Planning Cuisine"): nb = nb + 1
    If Dir("C:\GestionResto\Fiche de Renseignements", vbDirectory) = "" Then MkDir ("C:\GestionResto\Fiche de Renseignements"): nb = nb + 1
    If Dir("C:\GestionResto\Facture", vbDirectory) = "" Then MkDir ("C:\GestionResto\Facture"): nb = nb + 1
    If Dir("C:\GestionResto\Devis", vbDirectory) = "" Then MkDir ("C:\GestionResto\Devis"): nb = nb + 1
    If Not (nb = 0 Or nb = 6) Then MsgBox "Attention, y'a un loup !"
End Sub

je t'ai mis un mini contrôle. Pour moi c'est anormal s'il y a autre chose que 0 ou 6 créations. Ca ne devrait pas arriver.
A toi de voir si tu juges utile de le garder et voir quelles actions faire si ça arrive.
eric


En essayant continuellement, on finit par réussir. 
Donc plus ça rate, plus on a de chances que ça marche.(les Shadoks)
En plus du merci (si si, ça se fait !!!), penser à mettre en résolu. Merci
Messages postés
42
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
20 novembre 2020
9
Bonjour,

Difficile de répondre précisément sans savoir à quoi ressemble cette arborescence.
Mais vous pouvez vérifier qu'elle existe ou pas , par exemple en testant la présence du dossier le plus profond de l'arborescence avec la fonction FolderExist
Bonjour RoMa_31,
L'arborescence est composée d'un dossier et de quelques sous-dossiers directement sous C:\
J'ai essayé le test sans succès. J'avoue être novice en la matière....
Messages postés
7059
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
20 novembre 2020
576
Bonjour,

Tu peux faire cela avec une variable Boolean

Dans un module mettre ceci:

Option Explicit
Public arborescence As Boolean


dans ThisWorkbook cela:

Option Explicit
Private Sub Workbook_Open()
If arborescence = False Then
MsgBox "Ceer votre arborescence"
End If
End Sub


et à la fin du code de création mettre :

arborescence = True



Bonjour cs_Le Pivert,
J'ai créé un module avec le code suivant :

Option Explicit
Public arborescence As Boolean

Dans ThisWorkBook, le code est le suivant :

Private Sub WorkBook_Open()

If arborescence = False Then

Msg = "Blablabla"
Style = vbOKOnly + vbInformation
Title = "Première utilisation "

Response = MsgBox(Msg, Style, Title)

Sheets(1).Activate

End If

End Sub

Dans la création, voici le code :

Sub CreationArborescence()

MkDir ("C:\GestionResto\")
MkDir ("C:\GestionResto\Planning Salle")
MkDir ("C:\GestionResto\Planning Cuisine")
MkDir ("C:\GestionResto\Fiche de Renseignements")
MkDir ("C:\GestionResto\Facture")
MkDir ("C:\GestionResto\Devis")

arborescence = True

End Sub

Il me semble avoir fait ce que tu avais préconisé, mais une fois l'arborescence créée, à l'ouverture suivante il me rouvre la MsgBox pour créer l'arborescence...

J'ai beau tenté (exit sub, chemin > 0, ...), je suis en plein brouillard... désolé...

Je peux abuser de tes lumières?

Merci.
Messages postés
7059
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
20 novembre 2020
576 > FlorianR
un exemple:

https://www.cjoint.com/c/JKsptvJRfvQ

@+ Le Pivert
Messages postés
42
Date d'inscription
samedi 7 novembre 2020
Statut
Membre
Dernière intervention
20 novembre 2020
9 >
Messages postés
7059
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
20 novembre 2020

Bonjour,

Je pensais aussi à une méthode qui fonctionne à n'importe quel lancement.
Un exemple trouvé ici https://www.encodedna.com/excel/how-to-check-if-a-folder-exist-using-vba-macro-in-excel.htm et adapté avec une des arborescences du projet :
Option Explicit

Dim sFolder As String

Sub checkFolderExists()
        
    Dim objFso
    Set objFso = CreateObject("Scripting.FileSystemObject")
    
    sFolder = "C:\GestionResto\Fiche de Renseignements"
    
    If objFso.FolderExists(sFolder) Then        ' Check if the folder exists.
        MsgBox "Yes, it exist"
    Else
        MsgBox "No, the folder does not exist"
    End If
End Sub
Bonsoir à tous,
Merci pour votre aide généreuse à tous! La proposition d'eriiic était effectivement la plus simple et répond à mon besoin même si différent de la demande initiale. Merci quand même aux autres!

Bonne soirée!
Messages postés
23656
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
19 novembre 2020
6 479
Comment ça "même si différent de la demande initiale" ??
ils sont créés s'ils n'existent pas