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 :

message box avec un critére [XL-2000]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Par défaut message box avec un critére
    Bonjour,

    Je souhaiterai créer une msgbox avec une condition.

    - J'ai une base de données quelconque et je voudrai qu'une alerte m'annonce le nom des personnes pour lesquelles une valeur est égale à "un texte".

    Le nom de mes personnes sont en en colonne A et mon critère (texte) en AM.
    J'ai environ 160 lignes et je voudrai que cet alerte fasse le tour de toutes les lignes (une boucle), donc de toutes les personnes.

    Après cette boucle, le but est de m'afficher une msgbox avec le nom des personnes.

    Quelqu'un peut il m'aider ?

  2. #2
    Membre Expert Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Par défaut
    Quelque chose du genre

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Dim C As Range
    Dim Plage As Range
    Dim V As String
    Set Plage = Range("AM1:AM" & Range("A" & Rows.Count).End(xlUp).Row)
     
    For Each C In Plage
        If C.Value <> "" Then V = V & Cells(C.Row, 1) & Chr$(10)
    Next C
    MsgBox V
    End Sub
    peut être

    tu dis

    bon courage

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Par défaut
    Merci beaucoup Jean-Pierre,
    le principe fonctionne mais où est ce que j'insère mon critère ?

  4. #4
    Membre Expert Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Par défaut
    Ton critère est toujours le même?

    si oui

    Si non donne plus d'info sur ton critère

    Bon courage

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Par défaut
    Mon critère sera toujours le même ("Terminee") et toujours dans la même colonne ("AM").

    Pour le moment, le msgbox apparait mais vide.

  6. #6
    Membre Expert Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Par défaut
    Alors

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim C As Range
    Dim Plage As Range
    Dim V As String
     
    Set Plage = Range("AM1:AM" & Range("A" & Rows.Count).End(xlUp).Row)
     
    For Each C In Plage
        If C.Value = "Terminee" Then V = V & Cells(C.Row, 1) & Chr$(10)
    Next C
     
    MsgBox V
    devrait convenir

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Par défaut
    Merci JP tu es mon sauveur (et je pense que ce n'est pas la première fois).

    Dernière question : comment puis-je personnaliser ma msgbox ?
    je sais faire quand je la créer du début à la fin, mais là, c'est toi qui a configuré!

    c'est bon, j'ai réussi !!!!!
    merci énormément,

  8. #8
    Membre Expert Avatar de Jean-Pierre49
    Homme Profil pro
    Retraité
    Inscrit en
    Juillet 2007
    Messages
    659
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2007
    Messages : 659
    Par défaut
    Tu as aussi un bon tuto de fring
    http://fring.developpez.com/vba/excel/msgbox/

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Par défaut
    Jean-Pierre,
    Bonjour,

    Après utilisation, je me suis rendu-compte qu'il y avait un problème et donc une solution.
    Avec ce code, tout fonctionne très bien, mais la base de donnée doit être obligatoirement active!!
    Comment faire cette même alerte sans que la base ne soit active et donc affichée ?

    J'ai essayer avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = Worksheets("bdouvrages").Range("AM1:AM" & Range("A" & Rows.Count).End(xlUp).Row)
    Mais ce la ne fonctionne pas !

    please help!

  10. #10
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Il fallait spécifier aussi la feuille à laquelle se rapporte le 2ème Range
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set Plage = Worksheets("bdouvrages").Range("AM1:AM" & Worksheets("bdouvrages").Range("A" & Rows.Count).End(xlUp).Row)
    Sinon, une autre méthode dans le même sens qui est plus rapide qu'une boucle simple (Dans le cas de grande quantité de données) en utilisant la méthode Find
    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
    Dim V As String, Prem As String
    Dim c As Range
     
    With Worksheets("bdouvrages").Range("AM:AM")
        Set c = .Find("Terminee", LookIn:=xlValues, lookat:=xlPart)
        If Not c Is Nothing Then
            Prem = c.Address
            Do
                V = V & vbCr & c.Offset(0, -38)
                Set c = .FindNext(c)
            Loop While Not c Is Nothing And c.Address <> Prem
            Set c = Nothing
            V = Mid(V, 2)
        End If
    End With
    MsgBox V

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Par défaut
    Il doit y avoir un souci, car même avec en spécifiant le deuxième range ! l'alerte ne fonctionne pas si la feuille n'est pas active (affichée)

    Mercatog,

    Merci pour ton aide, j'ai opté pour ta solution (avec Find) qui fonctionne comme je le souhaitais.

    Cependant si je comprends bien ma première boucle, j'ai beaucoup plus de mal avec la tienne (find). Je suis débutant et je m'arrache les cheveux pour comprendre tes lignes de code.

    Est-ce possible d'avoir une synthèse ? je ne voudrais pas voir l'impression de faire du copier coller mais bien de comprendre.

    Merci de ton aide et de votre aide,

    Kaboche

  12. #12
    Expert éminent Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Par défaut
    Bonjour
    Commences par faire F1 sur Find, tu auras une explication et un code exemple.
    Ci-joint explication du code proposé (en commentaires)
    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
    Dim V As String, Prem As String
    Dim c As Range
     
    With Worksheets("bdouvrages").Range("AM:AM")
        'on cherche le mot Terminee sur la colonne AM de la feuille bdouvrages, F1 pour les explications des paramètres de la méthode Find
        Set c = .Find("Terminee", LookIn:=xlValues, lookat:=xlPart)
        'Si on trouve une cellule c contenant le mot Terminee
        If Not c Is Nothing Then
            'On mémorise l'adresse de la première cellule trouvée
            Prem = c.Address
            'on fait un boucle sur les autres cellules avec FindNext
            Do
                'on mémorise dans V la valeur de la cellule en colonne A de la même ligne de la cellule de la colonne AM où on a trouvé le mot Terminee
                V = V & vbCr & c.Offset(0, -38)
                Set c = .FindNext(c)
            'on termine la boucle lorsqu'on ne trouve plus de mot ou lorsque on revtrouve la première cellule mémorisée dans notre variable Prem
            Loop While Not c Is Nothing And c.Address <> Prem
            'On vide notre variable Objet range c
            Set c = Nothing
            'on prend le texte cumulé dans V à partir ddu 2ème caractère (parcequ'on avait un retour chariot au départ quand V était vide
            V = Mid(V, 2)
        End If
    End With
    MsgBox V

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    33
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 33
    Par défaut
    merci !
    Kaboche

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

Discussions similaires

  1. Propriété d'une Message Box avec boutons YesNoCancel
    Par eric4459 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/11/2014, 19h52
  2. [Débutant] Afficher message box avec nom du repertoire.
    Par kazuzu dans le forum C#
    Réponses: 1
    Dernier message: 08/10/2013, 10h16
  3. Réponses: 3
    Dernier message: 25/02/2012, 17h57
  4. message box avec delay
    Par supersoft5 dans le forum C++Builder
    Réponses: 6
    Dernier message: 08/05/2007, 16h05
  5. [C#] Message box avec des boutons diff.
    Par BoOom dans le forum Windows Forms
    Réponses: 1
    Dernier message: 21/04/2006, 11h47

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