Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/05/2007, 10h28   #1
Invité de passage
 
Inscription : avril 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 25
Points : 4
Points : 4
Par défaut ré-affichage d'un msgbox dans x jours (selon choix utilisateur)

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
léclaireur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/05/2007, 12h27   #2
Membre éclairé
 
Inscription : octobre 2006
Messages : 390
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 390
Points : 396
Points : 396
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...
dadavyvy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 10h35   #3
Invité de passage
 
Inscription : avril 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 25
Points : 4
Points : 4
Par défaut ré-affichage d'un msgbox dans x jours (selon choix utilisateur)

je vois vaguement comment faire... aurais-tu un lien ou un exemple? Faut-il créer soit même l msgbox via une userform?

Citation:
Envoyé par dadavyvy
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...
léclaireur est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 16h35   #4
Membre éclairé
 
Inscription : octobre 2006
Messages : 390
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 390
Points : 396
Points : 396
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.
dadavyvy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 21h02   #5
Membre éclairé
 
Inscription : octobre 2006
Messages : 390
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 390
Points : 396
Points : 396
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] :
Code :
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
Désolé, je n'ai pas testé...
dadavyvy est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/05/2007, 22h33   #6
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Une autre solution consiste à mettre à jour la date dans ton code. Le code suivant remplace la date de référence.
Code :
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
A adapter

NB - Tu peux remplacer
Code :
    LeNom = Environ("Username")
par
Code :
    LeNom = Application.Username
selon que les utilisateurs sont sur le même poste de travail ou non.
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/05/2007, 08h48   #7
Invité de passage
 
Inscription : avril 2007
Messages : 25
Détails du profil
Informations forums :
Inscription : avril 2007
Messages : 25
Points : 4
Points : 4
Par défaut ré-affichage d'un msgbox dans x jours (selon choix utilisateur)

Merci pour votre aide.
léclaireur est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 02h19.


 
 
 
 
Partenaires

Hébergement Web