Bonjour à toutes et à tous,
Lors de l'affichage d'un msgbox (ex: "vous avez oubliez de controler les N° 1+2..."), qqn sait-il s'il est possible de réafficher ce dernier dans 1,7 ou 15 jours (selon chois utilisateur).
Merci
Bonjour à toutes et à tous,
Lors de l'affichage d'un msgbox (ex: "vous avez oubliez de controler les N° 1+2..."), qqn sait-il s'il est possible de réafficher ce dernier dans 1,7 ou 15 jours (selon chois utilisateur).
Merci
C'est du VBA-Excel? Word? PPT?.... ??? Bon on va supposer que c'est du Excel...
comment est lancée la MsgBox? A l'ouverture du classeur Excel? Il suffit de rajouter un contrôle avant de lancer cette MsgBox.
Au préalable, le choix de l'utilisateur aura été sauvegardé qq part, comme dans une cellule d'une feuille masquée. Il faut donc 2 variables : dernier lancement, et intervalle choisit.
Ensuite si le Now() ou Date() (suivant l'intervalle) est superieur au dernier lancement + l'intervalle, alors lancer la MsgBox... puis enregistrer le Now() ou Date() comme derniere date de lancement...
je vois vaguement comment faire... aurais-tu un lien ou un exemple? Faut-il créer soit même l msgbox via une userform?
Envoyé par dadavyvy
Non, pas d'exemple, juste des idées...
Pour la MsgBox, il suffit d'utiliser celle de VBA, sauf si tu veux une MsgBox plus évoluée...
1/ D'abord, il faut le code qui lance la msgbox à l'ouverture.
2/ Il faut le code qui enregistre le choix de l'utilisateur (nb de jours), dans une cellule par exemple.
Ensuite on pourra t'aider à modifier le 1er pour prendre en compte le 2e.
OK pour t'aider a avancer...
Que le lancement de la macro se fait a l'ouverture du classeur, et que la date de dernier lancement est enregistré dans la cellule [A1] de la feuille Feuil1 (dans VBA), et le nombre de jour est enregistré dans [A2] :
Désolé, je n'ai pas testé...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 Private Sub Workbook_Open() If (Not IsDate(Feuil1.Range("A1"))) Or Feuil1.Range("A2") = "" Or (Not IsNumeric(Feuil1.Range("A2"))) Then ' si dernier lancement non Date ou intervalle vide ou non numeric alors afficher Call LeMessage ElseIf Fix(Feuil1.Range("A2")) = -1 Then ' si intervalle = -1, ne rien faire Exit Sub Else ' si aujourd'hui - dernier lancement >= intervalle en jours alors afficher If DateDiff("d", CDate(Feuil1.Range("A1")), Date) >= Fix(Feuil1.Range("A2")) Then Call LeMessage End If End Sub Sub LeMessage() Dim texte As String, intervalle ' toute la partie qui définit le texte du message (les lignes non remplies, etc...) texte = "Faut bien travailler sinon..." MsgBox texte, vbInformation + vbOKOnly ' enregistre la date du dernier lancement Feuil1.Range("A1") = Date ' demande si utilisateur veut repeter ou non le message intervalle = Interaction.InputBox("Voulez-vous que le message se répète ?" & vbCrLf & _ "Si oui, entrer l'intervalle en jours pour le prochain lancement" & vbCrLf & _ "Si non, entrer 0 ou -1", "Prochaine vérification?") If Not IsNumeric(intervalle) Then ' si non numeric, considerer que c'est non intervalle = -1 ElseIf Fix(intervalle) < 1 Then ' si inferieur a 1, considerer que c'est non intervalle = -1 Else: intervalle = Fix(intervalle) ' prendre la partie entiere End If ' enregistrer l'intervalle Feuil1.Range("A2") = intervalle ThisWorkbook.Save End Sub
Une autre solution consiste à mettre à jour la date dans ton code. Le code suivant remplace la date de référence.
A adapter
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 Private Sub Workbook_Open() LaDate = "21/4/2007" 'Ligne 2 -> A adapter LeNom = Environ("Username") Select Case LeNom Case "marcel" Delai = 7 Case "octave" Delai = 1 Case "auguste" Delai = 10 Case "moimoimoi" Delai = 0 Case Else End Select If DateDiff("d", LaDate, Now()) > Delai Then If LeMessage() Then 'si oui, la date est mise à jour msg = "LaDate = Now()" 'Remplace la troisième ligne si Message = true Application.VBE.ActiveCodePane.CodeModule.ReplaceLine 2, msg End If End If End Sub Function LeMessage() As Boolean LeMessage = MsgBox("Faut bien travailler..." & vbCr & _ "Tu veux travailler plus de 35h ?", vbYesNo, "QUESTION") = vbYes End Function
NB - Tu peux remplacer
par
Code : Sélectionner tout - Visualiser dans une fenêtre à part LeNom = Environ("Username")
selon que les utilisateurs sont sur le même poste de travail ou non.
Code : Sélectionner tout - Visualiser dans une fenêtre à part LeNom = Application.Username
Merci pour votre aide.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager