Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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 :
 

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...)

(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"
 

harveyspecter

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

oui mais ma base sera toujours limité du coup sa n'a pas d'importance.


En revanche vbcritical et "erreur" qu'est ce que cela signifie svp ?
 

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
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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…