Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
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 14/10/2011, 12h13   #1
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 33
Points : 10
Points : 10
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 ?
kaboche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 12h23   #2
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
Quelque chose du genre

Code :
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
__________________
Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/10/2011, 12h29   #3
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 33
Points : 10
Points : 10
Merci beaucoup Jean-Pierre,
le principe fonctionne mais où est ce que j'insère mon critère ?
kaboche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 12h35   #4
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
Ton critère est toujours le même?

si oui

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

Bon courage
__________________
Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/10/2011, 12h41   #5
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 33
Points : 10
Points : 10
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.
kaboche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 12h49   #6
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
Alors

Code :
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
__________________
Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 14/10/2011, 13h00   #7
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 33
Points : 10
Points : 10
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,
kaboche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/10/2011, 13h04   #8
Membre Expert
 
Avatar de Jean-Pierre49
 
Homme J-Pierre Catherine
Conception Calcul
Inscription : juillet 2007
Messages : 659
Détails du profil
Informations personnelles :
Nom : Homme J-Pierre Catherine
Âge : 57
Localisation : France, Maine et Loire (Pays de la Loire)

Informations professionnelles :
Activité : Conception Calcul
Secteur : Industrie

Informations forums :
Inscription : juillet 2007
Messages : 659
Points : 1 856
Points : 1 856
Tu as aussi un bon tuto de fring
http://fring.developpez.com/vba/excel/msgbox/
__________________
Jean-Pierre Pensez à Voter pour les réponses qui vous ont aidés, d'avance merci
---------Et n'oubliez pas de mettre : ..quand c'est le cas !---------
Jean-Pierre49 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 19/10/2011, 17h23   #9
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 33
Points : 10
Points : 10
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 :
Set Plage = Worksheets("bdouvrages").Range("AM1:AM" & Range("A" & Rows.Count).End(xlUp).Row)
Mais ce la ne fonctionne pas !

please help!
kaboche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/10/2011, 20h10   #10
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonjour
Il fallait spécifier aussi la feuille à laquelle se rapporte le 2ème Range
Code :
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 :
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
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 20/10/2011, 10h23   #11
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 33
Points : 10
Points : 10
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
kaboche est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/10/2011, 11h50   #12
Expert Confirmé Sénior
 
Avatar de mercatog
 
Inscription : juillet 2008
Messages : 5 848
Détails du profil
Informations forums :
Inscription : juillet 2008
Messages : 5 848
Points : 13 907
Points : 13 907
Bonjour
Commences par faire F1 sur Find, tu auras une explication et un code exemple.
Ci-joint explication du code proposé (en commentaires)
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
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
__________________
Cordialement.
mercatog est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 20/10/2011, 12h18   #13
Candidat au titre de Membre du Club
 
Inscription : octobre 2006
Messages : 33
Détails du profil
Informations forums :
Inscription : octobre 2006
Messages : 33
Points : 10
Points : 10
merci !
Kaboche
kaboche 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 07h18.


 
 
 
 
Partenaires

Hébergement Web