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 :

Msgboxes selon résultat dans plage de cellules. [XL-2013]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ouvrier

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut Msgboxes selon résultat dans plage de cellules.
    Bonjour à toutes et à tous !
    Comme ma venue ici le confirme, je n’ai trouvé nulle part la réponse à mes différents problèmes, certainement basics à vos yeux, étant hyper novice et jamais formé en VBA. Si ça se trouve je n’ai juste pas su exploiter la bonne réponse et suis passé à côté, dans ce cas je vous présente mes excuses par avance…
    J’ai pour commencer formulé une demande pour qu’à l’ouverture de mon fichier la cellule A1 de la feuille « Synthèse » soit active, histoire que l’utilisateur n’aie pas à y retourner chaque fois en ouverture de fichier, puisque ce qui l’intéresse se trouve dans cette feuille. A tord ou à raison j’ai donc mis dans workbook la commande suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub Workbook_Open()
    Application.Goto Reference:=Sheets("Synthèse").Range("a1"), scroll:=True
    End Sub
    Ca fonctionne, mais j’ignore comment lui demander de faire autre chose à la suite sans avoir de message d’erreur diverses (rien après "end sub" ?), car ce que je voudrais c’est que si la plage de cellules « d17 :m27 » de la feuille « Synthèse » est vide ou = à 0 sur cette même feuille (il peut y avoir des nombres, apparus en fonction de la date, car il s’agit d’un récapitulatif d’échéancier), une msgbox s’ouvre automatiquement, et que dans le cas contraire une msgbox avec un message différent s’affiche à l’ouverture.
    Mes diverses tentatives ayant abouties à çà pourront peut-être mieux vous éclairer :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub test()
    If IsEmpty(Range("d17:m27")) Then
       MsgBox "Aucun rendez-vous à prévoir !"
    Else
       MsgBox "Attention, rendez-vous à programmer !"
    End If
    End Sub
    Et dois-je le mettre dans « worksheet » ou dans la feuille « Synthèse », sachant qu’il y a déjà une commande dans worksheet ?
    Ca fait deux jours que je vais de forum en forum, ne connaissant tien à la syntaxe VBA j’ignore si je bute sur un espace, un point, une parenthèse, ou si mon problème est plus profond, et là je sature…
    Je me formerai peut-être un de ces jours, mais là je suis dans l'urgence.

    Mille mercis à quiconque se donnera la peine d’essayer de m’aider !...
    Olivier

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 755
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 755
    Points : 28 606
    Points
    28 606
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    En VBA, il est possible de lire et d'écrire dans une cellule quelconque de n'importe quelle feuille de n'importe quel classeur ouvert sans sélectionner la feuille et la cellule en question.
    Cependant s'il s'agit de prévoir qu'un utilisateur doive absolument travailler sur la cellule A1 de la feuille nommée Feuil3 alors voilà les deux lignes à placer dans ta procédure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     Worksheets("Feuil3").Activate
     Range("A1").Select
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Candidat au Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ouvrier

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Merci pour cet élément de réponse !
    Donc si j'ai bien compris, la feuille dans laquelle je doit scruter la plage étant la feuille1 et la plage à observer étant d17:m27, ça donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    Worksheets("Feuil1").Activate
    Range("d17:m27").Select
    If IsEmpty(Range("d17:m27")) Then
    MsgBox "Aucun rendez-vous à prévoir !"
    Else
    MsgBox "Attention, rendez-vous à programmer !"
    End If
    End Sub
    J'ai essayé, ça ne fonctionne pas, je n'ai pas de box à l'ouverture...

    Une erreur dans worksheet ? :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
     
    End Sub
    Sub test()
    Worksheets("Feuil1").Activate
    Range("d17:m27").Select
    If IsEmpty(Range("d17:m27")) Then
    MsgBox "Aucun rendez-vous à prévoir !"
    Else
    MsgBox "Attention, rendez-vous à programmer !"
    End If
    End Sub

  4. #4
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour,
    Citation Envoyé par choco2x Voir le message
    J'ai essayé, ça ne fonctionne pas, je n'ai pas de box à l'ouverture...
    Tu as 2 choses qui ne peuvent pas fonctionner :
    - il te faut lancer ton contrôle à l'open
    - tu ne peux pas utiliser isempty qui ne fonctionne pas sur une plage

    Essayes ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Workbook_Open()
    Application.Goto Reference:=Sheets("Synthèse").Range("a1")
        If Application.WorksheetFunction.CountA(Range("D17:M27")) = 0 Then
            MsgBox "Aucun rendez-vous à prévoir !"
        Else
            MsgBox "Attention, rendez-vous à programmer !"
        End If
    End Sub

  5. #5
    Candidat au Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ouvrier

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Super, j'ai une boite qui s'ouvre !!!
    Merci beaucoup !

    Par contre les cellules concernées affichent "0" quand il n'y a pas de rdv à prévoir, et un chiffre quand il y en a.
    Là les cellules sont vides, et la box me dit qu'il y a des rendez-vous à prévoir...
    Il y a des formules dans ces cellules, aurait-ce un rapport avec le problème ?

    Et accessoirement, si j'arrive à avoir le bon message dans la box, y aurait-il une ligne de commande me permettant d'y afficher le total des chiffres se trouvant dans la plage d17:m27 ? Sinon pas grave, le plus important est fait, si j'arrive à avoir les bonnes alertes ! ;-)

    Merci encore, c'est vraiment super !

  6. #6
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour,

    Tu remplaces ainsi ton code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Workbook_Open()
    Application.Goto Reference:=Sheets("Synthèse").Range("a1")
        Dim rdv As Long
        rdv = Application.WorksheetFunction.Sum(Range("D17:M27"))
        If rdv = 0 Then
            MsgBox "Aucun rendez-vous à prévoir !"
        Else
            MsgBox "Attention, " & rdv & " rendez-vous à programmer !"
        End If
    End Sub
    Il fait la somme des nombres de ta plage et affiche le résultat.

  7. #7
    Candidat au Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ouvrier

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    Ca me semble logique quand je lis, mais ça ne fonctionne pas...
    J'ai fait un copier/coller dans workbook, fermé la fenêtre, enregistré le fichier... Et à la réouverture, rien !
    Aurais-je oublié quelque chose ?...

  8. #8
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    Et à la réouverture, rien !
    ne veut pas dire grand-chose.
    Veux-tu dire qu'aucun message du tout n'est affiché à l'ouverture de ton classeur ?
    Si c'est cela, que tu veux dire :
    - soit tu n'as pas sauvegardé tes modifications
    - soit tu as sauvegardé dans un format qui ignore les macros (quelle est l'extension du classeur ainsi sauvegardé ?)
    - soit les paramètres de sécurité de ton classeur ont été définis de sorte à ouvrir sans exécution des macros (et il t'appartient dans ce cas d'agir sur ces paramètres, VBA n'y pouvant bien évidemment rien lui seul)
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  9. #9
    Membre chevronné
    Inscrit en
    Septembre 2007
    Messages
    1 132
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 132
    Points : 1 803
    Points
    1 803
    Par défaut
    Bonjour,
    Citation Envoyé par choco2x Voir le message
    Et à la réouverture, rien !
    Aurais-je oublié quelque chose ?...
    Tu pourrais au moins vérifier que ton code est dans le classeur quand tu ouvres.
    s'il y ai, tu le déroules pas à pas avec F8 en étant dans la procédure et tu nous dis ce qu'il en ai.

  10. #10
    Candidat au Club
    Homme Profil pro
    Ouvrier
    Inscrit en
    Mars 2017
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Ouvrier

    Informations forums :
    Inscription : Mars 2017
    Messages : 6
    Points : 4
    Points
    4
    Par défaut
    J'avais bien mémorisé, oui, mais toujours est-il que ce matin au travail j'ouvre le fichier et SURPRIIIIISE ! Tout marche nickel !!!
    Tout comme je voulais, les mesgboxes s'ouvrent quand il faut et donnent le bon message, en plus en comptant le total d'alertes, c'est ROYAL !
    Merci beaucoup à tous, principalement à anasecu pour cette solution apportée sur un plateau !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Valeur maximum dans plage de cellules
    Par ab1to dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 09/09/2010, 12h03
  2. mot dans plage de cellule
    Par nath-0-0 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 31/03/2010, 17h21
  3. Colorer une ligne sur deux dans plage de cellules
    Par JML62400 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/02/2009, 19h48
  4. Plusieurs résultats dans une même cellule
    Par luboyoyo dans le forum Excel
    Réponses: 2
    Dernier message: 04/06/2007, 08h39
  5. Recherche dans plage de cellules
    Par BATiViR dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 20/03/2007, 13h31

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