Code de 2 msg box

Bonjour bonjour,

Je souhaite créer deux msg box dans un classeur à 2 feuilles.

J'ai simplifié le fichier original, tout est expliqué dedans.

L'une des msg box doit contenir une liste déroulante.

N'hésitez pas à poser des questions si ce n'est pas clair.

Merci.

25msg-box-0-1.zip (15.25 Ko)

Bonjour elconqueror,

J'ai pas compris ta première demande :

elconqueror a écrit :

1 : Pour le premier bouton, je souhaite qu'il ouvre une msg box classique ayant pour titre le texte en cellule 'translat'B110 et que le résultat soit imputé ds les cellules 'translat'B20 à B22 en jaune.Il faudrait ensuite qu'une seconde s'ouvre pour remplir les 3 cellules en jaune de cet onglet ci. Quand les 3 cellules sont remplies on renvoie le message "tableau complet" par exemple.

elconqueror a écrit :

1 : Pour le premier bouton, je souhaite qu'il ouvre une msg box classique ayant pour titre le texte en cellule 'translat'B110

Ça j'ai compris.
elconqueror a écrit :

... et que le résultat soit imputé ds les cellules 'translat'B20 à B22 en jaune.

Ça j'ai pas compris. Le résultat de quoi ?
elconqueror a écrit :

...Il faudrait ensuite qu'une seconde s'ouvre pour remplir les 3 cellules en jaune de cet onglet ci.

On les remplit avec quoi ?
elconqueror a écrit :

Quand les 3 cellules sont remplies on renvoie le message "tableau complet" par exemple.

Ça j'ai compris.

Pour ta deuxième demande :

elconqueror a écrit :

2 : Pour le deuxième bouton : msg box "choisir" avec une liste déroulante des prénoms qui remplisse les 5 cellules vertes.

Ça devrait pouvoir se faire. Mais c'est plutôt d'un userform dont tu as besoin pas un msgbox.

Bonjour vba-new,

J'ai abusivement décrit toutes les boites msg box alors que ce sont en fait des Inputbox et autre useform....je maitrise pas trop. Je reprends à partir de ma première mauvaise explication :

Ça j'ai pas compris. Le résultat de quoi ?

On rentre le message dans la inputbox puis on clique sur "ok" --> le message est enregistré en cellule 'translat'B20

Lorsque l'on a cliqué sur "ok" et que le résultat est enregistré, il faut qu'une seconde inputbox s'ouvre dans la foulée, on rentre le message puis "ok" de nouveau --> le message se retrouve en 'feuille des boutons'J3

On a donc une cellule de renseigné sur chacun des deux onglets a chaque fois, ces cellules sont en jaune sur les deux onglets. Pour la suite l'idée est, lorsque l'on rappui sur le bouton n°1 s' il y a un résultat en 'translat'B20 alors on passe au renseignement de la cellule suivante 'tanslat'B21 et ainsi de suite....l'idée est de remplir les cellules en jaune jusqu'au bout puis renvoyer un message comme étant complet si la dernière cellule jaune comporte déja une valeur.

Ça devrait pouvoir se faire. Mais c'est plutôt d'un userform dont tu as besoin pas un msgbox

Oui tu as raison il s'agit d'un useform, je ne maitrise pas trop le lexique sur ce domaine faute de connaissance

re,

elconqueror a écrit :

On rentre le message dans la inputbox puis on clique sur "ok" --> le message est enregistré en cellule 'translat'B20

Lorsque l'on a cliqué sur "ok" et que le résultat est enregistré, il faut qu'une seconde inputbox s'ouvre dans la foulée, on rentre le message puis "ok" de nouveau

Le message est différent entre la première inputbox et la seconde ?

Re,

Oui on rentre un nom dans la première et un nombre dans la seconde, sachant que le nombre est lié au nom, c'est une caractéristique du nom.

Ok.

Regarde dans le fichier joint si ça te convient :

32msg-box-0-2.zip (20.17 Ko)

Re,

Ca me surprend de voir que certains jonglent aussi facilement avec le vba...

C'est vraiment bien ce que tu as fait.

Il y a juste 2 choses que je souhaiterai modifier :

1°) Je peux agrandir le userform et décaler la liste roulante.... je voudrais introduire un texte dans cette fenêtre, (juste au dessus de la liste déroulante par exemple), c'est possible?

2°)Ensuite je voudrais juste savoir s'il était possible pour les msgbox de prendre le texte dans une cellule du classeur...

Edit : C'est bon pour le 1°), j'ai trouvé comment faire, reste le 2nd point en suspens, Merci

Re,

Merci pour le compliment

Pour les deux points, c'est possible. Tu t'y connais en vba ? Tu sais créer un userform ?

-- 20 Jan 2010 16:12 --

Sinon tu me dis quel texte ajouter dans l'userform et quel cellule tu veux prendre pour le texte.

Je commence à peine à toucher au vba, le problème d'excel c'est qu'à force de faire des tableaux on en veut toujours plus et aujourd'hui je crois que je n'ai plus vraiment le choix....enfin bref.

Pour les userform c'est bon j'ai réussi à insérer le texte sans problème à l'aide de la boite à outils...

Par contre j'avais oublié de préciser autre chose sur le fonctionnement du userform...

-->je voudrais juste que l'on choisisse un nom avec la liste déroulante et qu'a l'aide de boutons "Valider" et "Annuler" on place ou non le nom dans la première cellule verte non vide et que l'on ferme le userform après.

Dans le cas présent on les sélectionne tous à la suite et l'on doit fermer le userform nous même...Sinon bien l'option rajoutée qui renvoie une erreur quand il y a un doublon.

Merci pour ton aide.

Edit : Quel étourdi, j'ai oublié ça : pour la cellule de référence pour le texte dans les inputbox prend celle que tu veux de libre et indique laquelle tu as choisi.

Bon, étant donné que tu t'y connais un peu en userform, tu peux le faire toi-même normalement.

Tu crées un bouton "Valider" Dans l'userform1 puis tu lui mets le code suivant :

    derlign = Range("J13").End(xlUp).Row + 1
    If derlign > 12 Then
        MsgBox "Y'a déjà 5 noms dans les cellules vertes", vbExclamation
    ElseIf derlign >= 8 Then
        If Not Range("J8:J12").Find(ComboBox1.Value, lookat:=xlPart) Is _
           Nothing Then MsgBox "Y'a déjà le prénom " & _
           ComboBox1.Value & " dans les cellules vertes.", vbExclamation: Exit Sub
        Range("J" & derlign).Value = ComboBox1.Value
    ElseIf derlign < 8 Then
        Range("J8").Value = ComboBox1.Value
    End If

C'est le code du ComboBox1_Change normalement. Tu peux ensuite supprimer le :

Private Sub ComboBox1_Change()
...
...
End Sub

Pour le texte de l'inputbox, tu peux voir dans la macro Bouton1_clic du module1 ce code :

        msg1 = InputBox("Veuillez saisir le message ", .Range("B110").Value)

Dans cette inputbox, il y a 2 arguments : le message affiché dans la boîte de dialogue et le titre de la box.

Pour avoir un texte par défaut lorsque l'inputbox s'affiche, tu rajoutes un 3è argument. Exemple :

        msg1 = InputBox("Veuillez saisir le message ", .Range("B110").Value, Range("A2").Value)

Ici, le texte affiché par défaut dans la zone de texte de l'inputbox, sera le contenu de la cellule A2.

Si tu veux créer un bouton "Annuler", tu lui mets juste ce code :

Unload UserForm1

Si tu as des difficultés, reviens

Ouaip, je te remercie vraiment vba-new, ç'est exactement ce que je recherchais. J'ai juste apporté deux modifs par rapport à ton code :

1°) J'ai entré le code

Unload UserForm1

à la fin du code du bouton1 "Ok" pour que la boîte se ferme toute seule. (J'ai quand même mis un bouton2 "Annuler" ac ce même code au cas où la personne à fait une fausse manip...)

2°) J'ai dù mal m'expliquer mais dans mon imputbox c'est le premier argument (message affiché dans la box que je voulais en fonction d'une cellule.J'ai donc mis un code du type

Range("C110").Value)

pour le 1er arg, j'ai donc laissé 2 arguments uniquement pour cette imputbox.

Reste à adapter tout cela à mon vrai fichier.

Encore merci vba-new

Voici les différents codes avec des commentaires pour mieux comprendre :

Private Sub CommandButton1_Click()
derlign = Range("J13").End(xlUp).Row + 1  'ça c'est pour trouver la dernière ligne des cases vertes
    If derlign > 12 Then 'si cette dernière ligne > 12 <=> si on dépasse les cases vertes
        MsgBox "Y'a déjà 5 noms dans les cellules vertes", vbExclamation
    ElseIf derlign >= 8 Then 'la première ligne des cases étant la ligne 8
                             'si la dernière ligne est >= 8 signifie à priori
                             'que la première ligne de ces cases vertes est renseignée

        'ensuite on regarde si le prénom existe déjà dans les cases vertes (J8 à J12) avec la méthode Find
        If Not Range("J8:J12").Find(ComboBox1.Value, lookat:=xlPart) Is _
           Nothing Then MsgBox "Y'a déjà le prénom " & _
           ComboBox1.Value & " dans les cellules vertes.", vbExclamation: Exit Sub
        Range("J" & derlign).Value = ComboBox1.Value 'si le nom n'existe pas on le rajoute alors dans les cases vertes
    ElseIf derlign < 8 Then 'cette condition équivaut à s'il n'y a rien dans les cases vertes
        Range("J8").Value = ComboBox1.Value 'alors on met le nom dans la première ligne des cases vertes
    End If
Unload UserForm1 'on quitte le userform
End Sub

Private Sub UserForm_Initialize()
Dim dico As Object, cel As Range
    Set dico = CreateObject("scripting.dictionary") 'la méthode du Dictionary permet d'alimenter une liste sans doublons

    'on boucle sur tous les éléments de la source Range("A2:A10")
    For Each cel In Range("A2:A10") 'ici, la source de cette liste sont les cellules A2 à A10
        If Not dico.Exists(cel.Value) Then dico.Add cel.Value, cel.Value 'si un élément de A2:A10 n'existe pas, on l'ajoute au "dico"
    Next cel
    tmp = dico.items 'à ce stade, on met les éléments de "dico" dans une variable, en vue d'un tri
    Call tri(tmp, LBound(tmp), UBound(tmp)) 'ici on trie les éléments de "dico" avec la macro "tri" (programmée par Jacques Boisgontier je crois)
                                            'qui utilise la méthode de tri "Quick sort" (tri rapide) inventée par C.A.R. Hoare en 1961 ( Wikipédia :-) )
    Me.ComboBox1.List = tmp 'on met ensuite la liste triée dans le combobox (liste déroulante)
    Application.ScreenUpdating = True 'ici on réactive la mise à jour de l'écran
End Sub

Pas de commentaires pour la macro "tri"

Bonjour,

Merci beaucoup à toi vba-new, j'ai découvert entre temps l'aide vba quand place son curseur sur une expression du code et que l'on presse F1. L'aide est vraiment bien faite, même si ça demande toujours un peu de temps de la lire jusqu'au bout!

En tout cas merci encore!

A+

Effectivement, c'est une très bonne méthode pour comprendre la syntaxe VBA !

Rechercher des sujets similaires à "code msg box"