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 :

Créer une fenêtre popup avec une condition


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut Créer une fenêtre popup avec une condition
    Bonjour à tous,

    Je viens vers vous dans le but de trouver une solution à mon problème !

    Mon problème étant que je souhaite intégrer une condition dans une MessageBox.

    Dans mon cas je dois intégrer un Macro dans un menu déroulant. Cependant j'aimerais que ce message n'apparaisse que lorsqu'un des choix de ce dit menu est sélectionné.

    Voici le menu déroulant en question :


    J'aimerais donc avoir un message d'alerte uniquement lorsqu'il y a le champ "oui photograveur" de sélectionné.

    J'ai donc essayé avec une formule normale :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub mess_01a()
    'texte directement introduit dans le code
    MsgBox "Ici votre message"
    End Sub
    Cependant, il manque la condition (If) mais j'ai essayé et je n'ai pas réussi à l'y intégrer.

    Merci d'avance en l'attente de votre aide !

    Cordialement, Jordan

  2. #2
    Membre averti
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Points : 412
    Points
    412
    Par défaut
    Salut à toi,

    Tout d'abord, je pars du principe que ce menu déroulant est dans une feuille de ton classeur et en cellule A5.

    Dans ce cas-là, pour qu'une macro se lance lors de la modification d'une cellule, il faut utiliser l'événement "Worksheet_Change" de l'objet qui est ta page.

    Tu ne vas donc pas dans un module, mais tu vas dans le code de la page en question (dans l'arborescence du projet) et tu y écris ça :
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address = "$B$5" Then 
     
            Select Case Target.Text
                Case "oui CD"
                    MsgBox "Vous avez choisi CD"
                Case "oui photograveur"
                    MsgBox "Vous avez choisi photograveur"
                Case "non"
                    MsgBox "Vous avez choisi non"
                'Case else 'si tu veux
                    'Msgbox "Vous avez choisi autre chose"
            End Select
        End If
    End Sub
    À la place du Select Case, tu peux également écrire ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If Target.Text = "oui CD" Then
        MsgBox "Vous avez choisi CD"
    ElseIf Target.Text = "oui photograveur" Then
        MsgBox "Vous avez choisi photograveur"
    ElseIf Target.Text = "non" Then
        MsgBox "Vous avez choisi non"
    Else
        MsgBox "Vous avez choisi autre chose"
    End If
    Explication : Cette macro va se lancer dès que tu modifieras une ou plusieurs cellules dans cette feuille. La première condition sert à vérifier si cette cellule est B5, si oui alors on regarde le texte qui y est désormais écrit. Sinon, on ne fait rien.

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Bonjour,

    Tout d'abord vous remerciants du temps que vous prennez pour essayer de résoudre mon problème !

    J'ai donc essayé ce que vous m'avez dis, si j'ai bien compris il ne fallait donc pas passer par les maccros mais via la feuille 1 et j'ai mis le code ce qui m'a bien mis en "WorkSheet" et "Change" cependant rien ne se passe lorsque j'essaie.

    A savoir que ma cellule concerné n'est pas A1 (pour exemple) mais une zone combinée ! A savoir "=$Q$21:$Q$30"

    Est-il possible d'intégrer donc ce genre de code avec une valeure comme celle ci ?

    Car j'ai essayé de modifier le code de cette façon :

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address = "$Q$21:$Q$30" Then 
     
            Select Case Target.Text
                Case "oui CD"
                    MsgBox "Vous avez choisi CD"
                Case "oui photograveur"
                    MsgBox "Vous avez choisi photograveur"
                Case "non"
                    MsgBox "Vous avez choisi non"
                'Case else 'si tu veux
                    'Msgbox "Vous avez choisi autre chose"
            End Select
        End If
    End Sub
    Pour le reste du code je n'y comprend pas grand chose (J'ai dû m'y mettre ce matin) mais dans l'esprit, si je veux qu'un Pop-Up n'apparaisse QUE lorsque je sélectionne "oui photograveur" il me suffirait de supprimer les autres lignes non ? Dans cet esprit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Address = "$Q$21:$Q$30" Then
     
            Select Case Target.Text
                Case "oui photograveur"
                    MsgBox "Vous avez choisi photograveur"
            End Select
        End If
    End Sub
    Amicalement dans l'attente d'une réponse,

    Jordan

  4. #4
    Membre averti
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Points : 412
    Points
    412
    Par défaut
    Salut,

    Oui c'est ça Au lieu de supprimer, tu peux simplement passer en commentaire en ajoutant une apostrophe en début de ligne... Au cas où ça t'intéresserait plus tard !

    Sinon, le Select Case est vraiment intéressant quand on a plein de valeurs possibles, si tu n'en as qu'une, mieux vaut utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Target.Text = "oui photograveur" Then
        MsgBox "Vous avez choisi photograveur"
    End If
    Qui peut s'écrire en une seule ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Target.Text = "oui photograveur" Then MsgBox "Vous avez choisi photograveur"
    plus besoin du End If dans ce cas-là.

    Concernant le fait que cela ne se lance pas... Vérifie que tu es bien dans la bonne page. Concernant la plage, il faut prendre uniquement la cellule dans laquelle le photograveur est !

    Target est la cellule que tu as modifiée.. Si tu prends une plage de cellules comme adresse de référence, ce que tu as fait, alors ça ne marchera jamais car tu compares l'adresse d'UNE cellule (liste déroulante = une cellule modifiée à la fois) à l'adresse d'une plage.

    Ce que tu peux faire, c'est vérifier que la cellule est bien dans une plage à l'aide de la fonction intersect(Plage1,Plage2) qui te donne les cellules en commun entre les 2 plages. Donc :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If Not Intersect(Target, Range("Q21:Q30")) Is Nothing Then 'Si ce n'est pas rien, c'est qu'il y a au moins une cellule en commun entre celle modifiée et la plage de référence donc c'est bon
        If Target.Text = "oui photograveur" Then MsgBox "Vous avez choisi photograveur"
    End If
    Devrait faire l'affaire

  5. #5
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Salut,

    Merci pour ces quelques lignes d'explication complémentaire !

    Enfaite le menu déroulant n'est pas assigné à une cellule (Il n'a pas été fait via "Données" --> "Validation des données") ne sachant pas comment il a était construit je ne pourrais pas vous le dire non plus !

    J'ai essayé votre façon en passant avec un menu déroulant "tout neuf" est cela fonctionne cependant je ne peux pas changer le fichier de base ...

    J'ai donc essayé de "Tricher" en assignant un format de contrôle à mon menu afin de pouvoir ensuite mettre les coordonnées d'une cellule dans le visual basic. Cela fonctionne ! J'étais content jusqu'au moment où je me suis rendu compte que mon message apparaissé à chaque fois que je faisais un clique quelques parts ... En gros il me faudrait ce bouton mais une fois que j'ai cliqué sur "Ok" il faudrait qu'il disparaisse ! Est-ce possible ?

    J'ai donc essayé avec des boutons styles "Oui" "Non" ou encore "Abandonner" "Ignorer" "Réessayer" cependant ces boutons n'ont apparemment aucun effet ... Le Pop-up contenue de venir tant que ma cellule est sur "Oui photograveur" du moins tant que la cellule que je lui ai affecté est sur "3" ...

    En gros voilà ce que j'ai fait en image avant de te donner le code que j'ai testé (Qui fonctionne mais qui me spam .... )



    Et voici le code qui me rend fou (Je me prend surement la tête pour rien mais pour un novice comme moi c'est réellement très compliqué xD

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    If Range("P2") = 3 Then MsgBox "Attention !!! DADFC à faire"
    Select Case MsgBox("Voulez vous supprimer l'alerte ?", vbAbortRetryIgnore, "Alerte DADFC")
        Case vbAbort
            'procédure si click sur Abandonner
        Case vbRetry
            'procédure si click sur Réessayer
        Case vbIgnore
            'procédure si click sur Ignorer
    End Select
    End Sub
    Dans l'attente d'une réponse,

    Amicalement, Jordan

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Points : 412
    Points
    412
    Par défaut
    Aaah je vois... En fait il ne s'agit donc pas de listes déroulantes mais de contrôles qui s'appellent des "ComboBox".

    Une solution rapide :
    Tu prends chaque ComboBox, clic-droit dessus, Affecter une macro. Tu peux garder le nom par défaut et tu la modifies. Dedans, tu insères seulement :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim Choix As String
    With ActiveSheet.Shapes("Zone combinée 1").ControlFormat 'ICI TU REMPLACES LE NOM PAR LE BON ENTRE GUILLEMETS
        Choix = .List(.Value)
    End With
     
    'là tu reprends le code qu'on avait avant : 
    If Choix = "oui photograveur" Then MsgBox "Vous avez choisi photograveur"

  7. #7
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Merci beaucoup c'est exactement ce qu'il me fallait !!

    Une dernière question, j'ai cette manipulation à faire sur plus de 600 documents Excell !!

    Et-il possible d'automatiser ça ou absolument pas ? '-'

  8. #8
    Membre averti
    Homme Profil pro
    Ingénieur Industrialisation
    Inscrit en
    Mai 2015
    Messages
    222
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

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

    Informations forums :
    Inscription : Mai 2015
    Messages : 222
    Points : 412
    Points
    412
    Par défaut
    Il y a des moyens d'importer des macros dans des classeurs à condition que tes combobox aient toutes le même nom d'un document à l'autre, j'imagine... Mais je ne l'ai jamais fait ! Tu trouveras dans les tutos ou en cherchant dans le forum comment faire...

  9. #9
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Charente (Poitou Charente)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Septembre 2015
    Messages : 5
    Points : 1
    Points
    1
    Par défaut
    Oui en effet l'export et l'import de macro ça j'avais vu mais là où je voulais "Tricher" c'était de le faire sans avoir à ouvrir les dites 600 dossiers !

    Mais en tous cas merci de ton aide pour le reste

Discussions similaires

  1. [Généralités] Création d'une fenêtre popup avec la Flat API
    Par Patrice Terrier dans le forum WinDev
    Réponses: 8
    Dernier message: 26/05/2014, 09h34
  2. Reparenter une fenêtre X11 avec une JFrame ou un JPanel ?
    Par paranoia dans le forum Agents de placement/Fenêtres
    Réponses: 0
    Dernier message: 06/08/2012, 10h52
  3. Réponses: 6
    Dernier message: 12/08/2007, 11h10
  4. Réponses: 11
    Dernier message: 06/12/2005, 08h23
  5. [Javascript] Problème avec une fenêtre popup.
    Par mika0102 dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 18/05/2005, 10h50

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