IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Insertion de MsgBox


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2016
    Messages : 16
    Par défaut Insertion de MsgBox
    Bonjour,

    Je souhaite réaliser un document Excel qui servira au suivi des créances clients.

    Mon tableau contient la date d'aujourd'hui, une colonne de la date de la facture, 5 colonnes de relance qui sont en mise en forme conditionnelle (remplissage rouge avec texte "retard" lorsque le délai maximum est atteint.

    Je viens chercher de l'aide sur ce forum car je souhaiterais insérer une "alerte/rappel" par MsgBox qui se déclencherait à l'ouverture du fichier, un peu avant la date de chaque relance a effectué (5 jours avant).

    Merci de bien vouloir m'aider.

    (Ci-joint un exemple de mon fichier).Suivi des créances clients (modèle).xlsx

  2. #2
    Membre chevronné Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Par défaut
    Je te conseille de lire les événements Workbook http://silkyroad.developpez.com/VBA/EvenementsClasseur/
    Workbook_Open dans ton cas

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 676
    Par défaut
    Bonjour,

    Un exemple de ce que j'utilise pour comparer à l'ouverture du fichier, un date incrite en dur dans le fichier et la date d'aujourd'hui.
    A adapter pour tes besoins:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_Open()
    With Sheets("Interface")
        If Not (Year(Date) = Year(.Cells(45, 4)) And Month(Date) = Month(.Cells(45, 4))) Then MsgBox "ATTENTION: les données ne sont pas à jour"
    End With
    End Sub
    PS: La plupart des gens n'ouvrent pas les pièces jointes surtout au premier post: http://www.developpez.net/forums/d84...s-discussions/

  4. #4
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    A mon avis, c'est une mauvaise idée de passer par un MsgBox pour au moins trois raisons : c'est volatile, on ne peut pas l'utiliser pour un traitement (imprimer, cocher, etc.), on ne maitrise rien question format.

    Je te conseille donc plutôt de créer un onglet "Relances" dans lequel seront inscrits ces renseignements.
    Eventuellement, tu peux utiliser le MsgBox pour envoyer un message simple du style "Attention, il reste 5 relance à faire et il y en aura 4 autre à faire dans les jours à venir, voir l'onglet Relance".

  5. #5
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2016
    Messages : 16
    Par défaut
    Oui pourquoi pas, merci pour vos idées.
    J'aimerais tout de même savoir à quoi le code VBA aurait pu ressembler...

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Tu commences par vider ton onglet journal avec un ClearContents.
    Puis tu scrutes l'ensemble de tes lignes de facture avec une boucle For.
    Quand tu en rencontres une dont les conditions corresponde à ce que tu cherches, tu copies le contenu qui t'intéresse à la suite du fichier journal.

  7. #7
    Membre chevronné
    Homme Profil pro
    Alternant
    Inscrit en
    Décembre 2015
    Messages
    413
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Alternant

    Informations forums :
    Inscription : Décembre 2015
    Messages : 413
    Par défaut
    Tu en as un de code pour exemple :

    Citation Envoyé par halaster08 Voir le message
    Bonjour,

    Un exemple de ce que j'utilise pour comparer à l'ouverture du fichier, un date incrite en dur dans le fichier et la date d'aujourd'hui.
    A adapter pour tes besoins:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Workbook_Open()
    With Sheets("Interface")
        If Not (Year(Date) = Year(.Cells(45, 4)) And Month(Date) = Month(.Cells(45, 4))) Then MsgBox "ATTENTION: les données ne sont pas à jour"
    End With
    End Sub

  8. #8
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2016
    Messages : 16
    Par défaut Problème toujours pas résolu...
    Bonjour tout le monde,

    Je fais remonter mon post car je n'ai toujours pas trouvé solution à mon problème, malgré toutes les recherches je reste coincée...

    Voila, j'ai simplifié mon tableau et je souhaiterais toujours qu'un message s'affiche lorsque la facture est arrivée à échéance ou bien lorsqu'elle s'en approche (disons 5 jours avant).
    J'ai pour idée que les messages ressembleraient à ceci "La facture n° "..." du client "..." est arrivée à échéance" ; "La facture n° "..." du client "..." arrive bientôt à échéance".

    J'ai tenté de faire un code VBA en m'aidant d'un exemple mais le résultat n'est toujours pas là...

    Si quelqu'un pourrait me venir en aide ce serait génial ! Merci d'avance.
    Fichiers attachés Fichiers attachés

  9. #9
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 676
    Par défaut
    Citation Envoyé par Florine26 Voir le message

    J'ai tenté de faire un code VBA en m'aidant d'un exemple mais le résultat n'est toujours pas là...

    Si quelqu'un pourrait me venir en aide ce serait génial !
    Citation Envoyé par halaster08 Voir le message
    La plupart des gens n'ouvrent pas les pièces jointes surtout au premier post: http://www.developpez.net/forums/d84...s-discussions/
    Montre nous ton code et explique ce qui ne marche pas.

  10. #10
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2016
    Messages : 16
    Par défaut
    Voici le code est l'erreur qui s'affiche.
    Images attachées Images attachées  

  11. #11
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 676
    Par défaut
    Arrive-tu a lire ton code sur l'image? Moi non.
    Copie ton code avec la balise code (bouton #), ce sera beaucoup plus lisible.
    Peux tu aussi préciser a quelle ligne cette erreur apparait? (si besoin lancer le code en pas à pas via F8)

    Une petite remarque je ne sais pas combien de message tu t'attends a avoir a chaque fois mais admettons que tu en ai 10, tu vas devoir dire ok aux 10 messages. Il me semblerait plus judicieux de concatener les textes des messages (avec un saut de ligne) dans la boucle, et ne faire qu'un seul msgbox a la fin.
    edit: en fait c'est déjà ce que tu avais fait j'avais vraiment du mal à lire ...

  12. #12
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Le message d'erreur reçu est clair : l'objet utilisé d'une collection n'existe pas.
    Il est vraisemblable que la collection Worksheets n'abrite pas un objet WorkSheet (une feuille, donc) nommé exactement "N°"
    Attention : un simple caractère espace en plus ou en moins fait qu'une chaîne de caractère est différente.

  13. #13
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2016
    Messages : 16
    Par défaut
    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
    Option Explicit
    Private Sub Workbook_Open()
    Dim Cel As Range
    Dim Ecart As Long
    Dim Msg As String
        With Worksheets("N°")
            For Each Cel In .Range("J6:J" & .Range("A" & Rows.Count).End(xlUp).Row)
                If DateDiff("d", Now, Cel.Value) < 0 Then
                    Ecart = 0
                Else
                    Ecart = DateDiff("d", Now, Cel.Value)
                End If
                Select Case Ecart
                Case 1 To 38
                    Msg = Msg & "La facture " & Cel.Offset(0, -4) & " pour " & Cel.Offset(0, -6) _
                    & ", N° " & Cel.Offset(0, -7) & " arrive à échéance dans " & Cel.Offset(0, 1) & " jours." & Chr(10)
                Case 0
                    Msg = Msg & "La facture " & Cel.Offset(0, -4) & " pour " & Cel.Offset(0, -6) _
                    & ", N° " & Cel.Offset(0, -7) & " a atteint ou dépassé l'échéance." & Chr(10)
                End Select
            Next Cel
            MsgBox Msg
        End With
    End Sub
    L'erreur se produit dès le début à "With Worksheets("N°")"

  14. #14
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    L'erreur se produit dès le début à "With Worksheets("N°")"
    Ce qui ne fait que confirmer ce que j'ai écrit dans mon message précédent.

  15. #15
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2016
    Messages : 16
    Par défaut
    Oui j'ai réussi à corriger cette erreur mais me voilà encore coincée à la ligne suivante...je suis novice en VBA

    Non pardon, je me retrouve coincée à la ligne "If" la première

  16. #16
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Quand comptes-tu commencer à dire quel est le message d'erreur reçu ?
    Nonobstant, je peux deviner qu'il s'agit de l'erreur 13 (incompatibilité de type) et qu'elle est due au fait que la cellule cel en cause lorsque tu reçois ce message n'est pas une date (ni même un numérique).
    Tu ne penses tout de même pas (sait-on jamais) que ce forum à vocation de corriger, l'une après l'autre, toutes les lignes de code que tu écris ? Rassure-moi.

  17. #17
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Quand tu as un bug, le minimum est de donner :
    - le dernier code
    - la ligne sur laquelle se produit cette erreur
    - le message de cette erreur.

  18. #18
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2016
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Drôme (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Juin 2016
    Messages : 16
    Par défaut
    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
    Private Sub Workbook_Open()
    Dim Cel As Range
    Dim Ecart As Long
    Dim Msg As String
        With Worksheets("Facture")
            For Each Cel In .Range("J6:J" & .Range("A" & Rows.Count).End(xlUp).Row)
                If DateDiff("j", Now, Cel.Value) < 0 Then
                    Ecart = 0
                Else
                    Ecart = DateDiff("j", Now, Cel.Value)
                End If
                Select Case Ecart
                Case 1 To 38
                    Msg = Msg & "La facture " & Cel.Offset(0, -4) & " pour " & Cel.Offset(0, -6) _
                    & ", Facture " & Cel.Offset(0, -7) & " arrive à échéance dans " & Cel.Offset(0, 1) & " jours." & Chr(10)
                Case 0
                    Msg = Msg & "La facture " & Cel.Offset(0, -4) & " pour " & Cel.Offset(0, -6) _
                    & ", N° " & Cel.Offset(0, -7) & " a atteint ou dépassé l'échéance." & Chr(10)
                End Select
            Next Cel
            MsgBox Msg
        End With
    End Sub

    Erreur 13 : incompatibilité de type, j'ai mis la ligne sur laquelle se produit l'erreur en gras.

  19. #19
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 676
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 676
    Par défaut
    L'aide sur datediff:
    https://msdn.microsoft.com/fr-fr/lib...(v=vs.90).aspx
    Je pense qu'il ne reconnait pas ton "j", c'est plutôt "d", non?

    edit: d'ailleurs c'était "d" dans le code précédent, pourquoi ce changement?

    edit2: si tu utilise la fonction excel datedif(date1,date2, periode) (attention: différente de celle vba 1 seul f dans le nom et la periode a la fin)
    Tu obtiens un nombre ou une erreur?

  20. #20
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Ce qui me "chiffonne" personnellement le plus dans cette affaire, c'est (à la fois) :
    - le titre donné à cette discussion, à savoir :
    Insertion de MsgBox
    et cette confirmation, à savoir :
    Je viens chercher de l'aide sur ce forum car je souhaiterais insérer une "alerte/rappel" par MsgBox qui se déclencherait à l'ouverture du fichier, un peu avant la date de chaque relance a effectué (5 jours avant).
    qui montre bien la difficulté à distinguer cause et effet.
    Et on arrive finalement à quoi ? -->> à corriger des imperfections (l'une après l'autre) du code en amont même de la justification de l'affichage d'une msgbox.
    Il m'arrive parfois de m'interroger sur le réel bénéfice (pour le demandeur) de ce genre d'aide et de corrections en amont alors qu'il ne voit, lui, qu'un problème en aval.
    Il m'arrive de commencer à être un peu ... (comment le dire ?) ... assez "fatigué".
    Je pense que je vais attendre quelques jours, que les choses et les attentes redeviennent plus "normales".

    EDIT : à tous ceux qui ne comprendraient pas ma lassitude :
    Que penseriez-vous de l'automobiliste qui vous déclarerait que son compteur de vitesse (ou de tours) reste immobile alors qu'il vous tairait (vous l'apprendriez plus tard) qu'il n'a même pas démarré ?
    A bientôt (peut-être).

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Insertion image en tant qu'icone dans une msgbox
    Par Luis Vieira da Silva dans le forum Interfaces Graphiques
    Réponses: 5
    Dernier message: 01/02/2012, 02h27
  2. [Toutes versions] msgbox si insertion de ligne
    Par leptitdave dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 28/08/2009, 08h55
  3. [XL-2003] créer msgbox pour insertion données dans cellule
    Par gaihdriah dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 06/05/2009, 16h53
  4. [Postgresql] pb lors d'insertion de données
    Par bob20000 dans le forum Requêtes
    Réponses: 8
    Dernier message: 04/11/2002, 15h33
  5. Réponses: 4
    Dernier message: 28/09/2002, 00h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo