Plusieurs resultats sur une seul boite de dialogue userform vba

harveyspecter

XLDnaute Occasionnel
Bonjour FORUM,


J'ai crée un userform avec un bouton rechercher, plusieurs résultats apparaissent sur plusieurs boite de dialogue.
Je voudrais rassembler ces résultats sur une seul fenêtre dialogue, sur quoi dois je me concentrer ?? la msgbox ?

Merci de votre aide
 

Victor21

XLDnaute Barbatruc
Re : Plusieurs resultats sur une seul boite de dialogue userform vba

Bonjour, harveyspecter

...sur quoi dois je me concentrer ?? la msgbox ?...
En premier lieu, je pense sur les conseils donnés lors de l'ouverture d'une nouvelle discussion :
ILLUSTREZ VOTRE DEMANDE : Afin de faciliter la compréhension de votre demande il est conseillé de joindre un PETIT fichier qui illustre votre question précise et montre les résultats que vous cherchez à obtenir.
Pour l'envoyer, cliquez sur le trombone ci-dessous ou sur le bouton "Gérer les pièces jointes" dans la zone "Options supplémentaires".Ensuite, cliquez sur le bouton "Parcourir" et sélectionnez-le (après l'avoir compressé s'il dépasse les 250Ko).

- DONNEES CONFIDENTIELLES : Ne laissez AUCUNE donnée personnelle ou confidentielle (noms, adresses, N° de téléphone, entreprises...) dans vos pièces jointes. Vous mettriez Excel-Downloads en contravention avec la loi Informatique et Liberté et votre fichier devrait être enlevé.
 

harveyspecter

XLDnaute Occasionnel
Re : Plusieurs resultats sur une seul boite de dialogue userform vba

je fais passer en pièce jointe le fichier.
Le problème se trouve en userform lorsque je rentre le nom d'un ville, un nombres de vols s'affiche sur plusieurs fenêtre de dialogue, je voudrais qu'une seul fenêtre s'ouvre. merci
 

Pièces jointes

  • vols_A1.xlsm
    73.6 KB · Affichages: 37

Staple1600

XLDnaute Barbatruc
Re : Plusieurs resultats sur une seul boite de dialogue userform vba

Bonsoir àtous

Voila pour afficher un seul MsgBox.
(mais cela sera problématique quand on atteindra la limite du nombres de caractères possibles dans MsgBox)

Code:
Private Sub Bc_rechercher_Click()
Dim P As Range, indice_ligne&, sMessage$
Dim nbMedaille%, Drapeau_trouvé As Boolean
Set P = Range("Vols"): nom = Zt_Saisie.Value
Drapeau_trouvé = False
For indice_ligne = 1 To P.Rows.Count
If P.Cells(indice_ligne, 3).Value = nom Then
nbdevols = P.Cells(indice_ligne + 1, 1)
sMessage = sMessage & nom & " posséde  " & nbdevols & vbCrLf
Drapeau_trouvé = True
End If
Next
If Drapeau_trouvé = False Then
MsgBox "La destination renseignée est inconnue.", vbCritical, "Erreur"
Else
MsgBox sMessage
End If
End Sub
 

Staple1600

XLDnaute Barbatruc
Re : Plusieurs resultats sur une seul boite de dialogue userform vba

Re

Oui mais ça ne marchera pas forcément entièrement (comme je le disais précédemment...:rolleyes:)

(mais cela sera problématique quand on atteindra la limite du nombres de caractères possibles dans MsgBox)

Pour infos, j'avais aussi modifié ceci dans ton code
MsgBox "La destination renseignée est inconnue.", vbCritical, "Erreur"
 

Staple1600

XLDnaute Barbatruc
Re : Plusieurs resultats sur une seul boite de dialogue userform vba

Re


Copie entièrement mon code du message #4 à la place du tien et tu verras la différence avec le tien quand tu feras une recherche sur une destination qui n'existe pas.

Et le problème du nombre de caractères reste un problème potentiel ;)
Obligatoire. taquet de tabulation affichée comme message dans la boîte de dialogue. La longueur maximale de l'invite est d'environ 1 024 caractères, suivant la largeur des caractères utilisés. Si l'invite comporte plusieurs lignes, vous pouvez les séparer à l'aide d'un retour chariot (Chr(13)), d'un saut à la ligne (Chr(10)) ou de la combinaison des deux (Chr(13) et Chr(10)) entre chaque ligne.
voir les détails ici
 

job75

XLDnaute Barbatruc
Re : Plusieurs resultats sur une seul boite de dialogue userform vba

Bonjour harveyspecter, JM,

On peut faire une recherche avec les 1ères lettres de la destination et afficher dans un 2ème UserForm :

Code:
Private Sub Bc_rechercher_Click()
Dim P As Range, nom$, lig&, flag As Boolean
Set P = Range("Vols"): nom = UCase(Zt_Saisie)
With UserForm2.ListBox1
  .Clear
  For lig = 1 To P.Rows.Count
    If UCase(P.Cells(lig, 3)) Like nom & "*" Then
      .AddItem P.Cells(lig, 1)
      .List(.ListCount - 1, 1) = Format(P.Cells(lig, 2), "hh:mm")
      .List(.ListCount - 1, 2) = P.Cells(lig, 3)
      flag = True
    End If
  Next
  If flag Then
    .Parent.Caption = "Vols à destination de " & nom & "..."
    .Parent.Show
  Else
    MsgBox "La destination renseignée est inconnue !", vbCritical, "Erreur"
  End If
End With
End Sub
Fichier joint.

A+
 

Pièces jointes

  • vols_A(1).xlsm
    68.1 KB · Affichages: 28

job75

XLDnaute Barbatruc
Re : Plusieurs resultats sur une seul boite de dialogue userform vba

Re,

Avec la ListBox on peut utiliser l'évènement Click :

Code:
Private Sub ListBox1_Click()
Application.Goto Rows(ListBox1), True 'sélection dans la feuille
End Sub
Maintenant la ListBox a 4 colonnes, la 1ère est masquée.

Le nouveau remplissage :

Code:
Private Sub Bc_rechercher_Click()
Dim P As Range, nom$, lig&
Set P = [Vols]: nom = UCase(Zt_Saisie)
With UserForm2.ListBox1
  .Clear
  For lig = 1 To P.Rows.Count
    If UCase(P.Cells(lig, 3)) Like nom & "*" Then
      .AddItem P(lig, 1).Row 'repérage en 1ère colonne masquée
      .List(.ListCount - 1, 1) = P.Cells(lig, 1)
      .List(.ListCount - 1, 2) = Format(P.Cells(lig, 2), "hh:mm")
      .List(.ListCount - 1, 3) = P.Cells(lig, 3)
    End If
  Next
  If .ListCount Then
    .Parent.Caption = "Vols à destination de " & nom & "..."
    .Parent.Show
  Else
    MsgBox "La destination renseignée est inconnue !", vbCritical, "Erreur"
  End If
End With
End Sub
Fichier (2).

Bonne fin de soirée.
 

Pièces jointes

  • vols_A(2).xlsm
    71 KB · Affichages: 26

job75

XLDnaute Barbatruc
Re : Plusieurs resultats sur une seul boite de dialogue userform vba

Bonjour harveyspecter, le forum,

Si l'on veut pouvoir modifier les feuilles de calcul, ouvrir les UserForms en non modal, fichier(3).

Bonne journée
 

Pièces jointes

  • vols_A(3).xlsm
    72.1 KB · Affichages: 15

job75

XLDnaute Barbatruc
Re : Plusieurs resultats sur une seul boite de dialogue userform vba

Re,

S'il y a beaucoup de lignes, le remplissage par des tableaux VBA est bien plus rapide :

Code:
Private Sub Bc_rechercher_Click()
Dim P As Range, nom$, h&, t, liste(), i&, n&
Set P = [Données!Vols]: nom = UCase(Zt_Saisie) & "*"
h = Application.CountIf(P.Columns(3), nom)
If h Then
  t = P.Columns(1).Resize(, 3) 'matrice, plus rapide
  ReDim liste(1 To h, 1 To 4)
  For i = 1 To UBound(t)
    If UCase(t(i, 3)) Like nom Then
      n = n + 1
      liste(n, 1) = i: liste(n, 2) = t(i, 1)
      liste(n, 3) = Format(t(i, 2), "hh:mm"): liste(n, 4) = t(i, 3)
    End If
  Next
  With UserForm2
    .ListBox1.List = liste
    .Caption = "Vols à destination de " & Left(nom, Len(nom) - 1) & "..."
    .Show 0 'non modal
  End With
Else
  MsgBox Left(nom, Len(nom) - 1) & "... introuvable !", vbCritical, "Erreur"
  With Zt_Saisie: .SetFocus: .SelStart = 0: .SelLength = Len(nom): End With
End If
End Sub
Fichier (4).

A+
 

Pièces jointes

  • vols_A(4).xlsm
    71.8 KB · Affichages: 22

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 101
Membres
103 116
dernier inscrit
kutobi87