L'ordre du classement dans combobox n'est pas respecté

charlebel

XLDnaute Nouveau
bonjour,
depuis un moment je m'inspire de ce forum et de ses discussions pour me familiariser avec le VBA. en réalité je n'ai découvert ce sujet que depuis un mois.
j'ai remarqué que vous "poussez" les débutants à travailler par eux-même avant de solliciter l'aide. Bonne méthode pédagogique.
je fais un formulaire de saisie de données :
je butte sur une problème d'enrichissement de la listIndex du ComboBox1 de l'UserForm2: j'explique.
Dans mon tableau ( en pièce jointe), j'ai crée un module ( UserForm1) de saisie de donnée pour remplir des lignes correspondant à des interventions ( c'est professionnel). ce module fonctionne bien et je n'ai pas de bug ( au moins pour le moment).
j'ai voulu créer un 2ème module ( donc UserForm2) afin de pouvoir modifier et supprimer des lignes du tableau. ainsi pour appeler la ligne à modifier je passe par la listIndex du ComboBox1 qui correspond à la colonne B du tableau excel.
cette colonne contient des chiffres correspondant au N° d'intervention qui pourraient être du style: 1, 2, 124, 124/1, 136/1, 136/2,... et ces chiffres doivent pouvoir être placés dans le "désordre" et ne pas se suivre dans l'ordre ( 1, 2, 3, 5, 9, 31, 24, 6, 8, ... et pas forcément 1, 2, 3, 5, 7, 9, 11, 21, 33, ..)
Dans Userform1, il y a un bouton commande qui lance l'Userform2 ( Modifier/Supprimer) et inversement, dans Userform2 , il y a un bouton commande qui rappelle l'Userform1 ( Retour Saisie Fichier).
Un Macro dans la feuille "Statstique" qui lance le module du formulaire ( UserForm1).
mon problème vient juste au moment de lancer l'Userform2, dés que je clique sur le bouton ( Modifier/Supprimer) la liste du combobox1 se met automatiquement dans l'ordre et ceci modifie immédiatemnt l'ordre dans la colonne B de la feuille "Statistique".
Je n'arrive pas à voir comment obliger la ListIndex du combobox1 à respecter l'ordre du classement dans la feuille et celà dans le sens de rappeler la ligne et dans le sens de la modification.
dans la pièce jointe, j'essaye d'expliquer ce qui se passe en colonne B/ les premières lignes correspondent aux données enregistrées et celles en jaune expliquent comment elles se classsent lorsque je lance l'Userform2.
dernière chose: ne rigoler pas de mon code, il y a peut-être nettement mieux abouti. mes c'est le resultat de mes essais.
Pouuriez -vous m'aider et m'expliquer ce qui se passe dans le code?
Désolé, le fichier est un peu lourd, je le joins zippé
Merci d'avance.
 
C

Compte Supprimé 979

Guest
Re : L'ordre du classement dans combobox n'est pas respecté

Bonsoir Charlebel

Normal ton problème tu fais un tri dans ta feuille dans ta Sub Ini de ton USF2
Code:
  'Pour éviter les fash d'écran pour le select ci dessous  Application.ScreenUpdating = False
  WS.Select  'On sélectionne la feuille sinon bug si elle ne l'est pas
  WS.Range("B2").Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess  'Le Sort
Il faut supprimer ces lignes !

A+
 

charlebel

XLDnaute Nouveau
Re : L'ordre du classement dans combobox n'est pas respecté

Merci beaucoup Bruno, c'est bien votre solution qui règle mon problème.
Puis-je user de votre collaboration pour me dire comment faire pour régler un autre problème que j'essaie de le contourner à "ma façon":
en faite: dans Userform1 et Userform2, les textbox suivant: Début Intervention, début médicalisation, Fin médicalisation et fin intervention, servent à rentrer dans les colonnes du tableau des heures précises. elles sont importées dans la feuille "Statistiques" dans des colonnes H,I,J et K qui sont suivies des colonnes contenant des formules des calculs des durées passées et autre.
mon problème est que je n'ai pas su comment faire pour imposer un format "heure hh:mm dans le Textbox pour qu'il garde ceci lors de la création de l'intervention et lorsqu'on rappelle une ligne pour la modifier.
pour le moment j'ai mis le format des cellules dans la feuille en "Texte" et j'ai mis le code suivant dans le TextBox pour imposer le saisi sous format ressemblant en finalité à hh:mm:

Private Sub TextDebutInter_KeyPress(ByVal KeyAscii As MSForms.ReturnInteger)
If InStr("1234567890:", Chr(KeyAscii)) = 0 Then KeyAscii = 0: Beep
End Sub
Private Sub TextDebutInter_BeforeUpdate(ByVal Cancel As MSForms.ReturnBoolean)
Dim Exemple As String
Dim ExTime As String
Exemple = TextDebutInter.Value
If (Len(Exemple) = 4) Then
ExTime = Mid(Exemple, 1, 2) & ":" & Mid(Exemple, 3)
TextDebutInter.Value = ExTime
Else:
TextDebutInter.Value = ""
End If
End Sub

ceci fonctionnent à l'aller et au retour dans les deux Userform à condition que les 4 textbox soient remplis. je suis par contre moyennement satisfait devant un problème qui survient lorsque j'appelle une ligne qui ne contient pas de données dans une ou toutes les colonnes H,I,J et K. car si on modifiant la ligne je laisse les Textbox en question vide, ceci "bug" ma formule de calcul dans la feuille et le fameux #VALEUR! apparaît


Pas de Victime/ 10:54 / / / 11:02/ #VALEUR!/ 0:08 /#VALEUR!

y-a t-il une solution d'après vous?

je renouvelle mes remerciements déjà pour votre 1ère aide.
 
C

Compte Supprimé 979

Guest
Re : L'ordre du classement dans combobox n'est pas respecté

Re,

Il faut modifier ta Sub
VB:
Private Sub Modifier_Click()
  Dim CTRL As Control  'Variable pour la collection des controls
  Dim i As Integer
  Dim Response As Byte
  Dim a As Long

  'ici avec la Feuille on va faire :
  With WS
    .Range("A" & Me.ComboBox1.ListIndex + 2) = TextDateIntervention  'On écrit dans chaque colonne les valeurs des différents controls
    .Range("B" & Me.ComboBox1.ListIndex + 2) = ComboBox1  'Idem
    .Range("C" & Me.ComboBox1.ListIndex + 2) = TypeIntervention  'Idem
    .Range("D" & Me.ComboBox1.ListIndex + 2) = Vehicule  'Idem
    .Range("V" & Me.ComboBox1.ListIndex + 2) = OrigineAppel  'On écrit dans chaque colonne les valeurs des différents controls
    .Range("E" & Me.ComboBox1.ListIndex + 2) = TransportMed  'Idem
    .Range("F" & Me.ComboBox1.ListIndex + 2) = MoyenTransport  'Idem
    .Range("G" & Me.ComboBox1.ListIndex + 2) = PasTransport  'Idem
    If Me.TextDebutInter.Value <> "" Then ' Evite d'inscrire une valeur nulle
      .Range("H" & Me.ComboBox1.ListIndex + 2) = TextDebutInter  'On écrit dans chaque colonne les valeurs des différents controls
    End If
    If Me.TextDebutMed.Value <> "" Then
      .Range("I" & Me.ComboBox1.ListIndex + 2) = TextDebutMed  'Idem
    End If
    If Me.TextFinMed.Value <> "" Then
      .Range("J" & Me.ComboBox1.ListIndex + 2) = TextFinMed  'Idem
    End If
    If Me.TextFinInter.Value <> "" Then
      .Range("K" & Me.ComboBox1.ListIndex + 2) = TextFinInter  'Idem
    End If
    .Range("Q" & Me.ComboBox1.ListIndex + 2) = TextKm  'On écrit dans chaque colonne les valeurs des différents controls
    .Range("R" & Me.ComboBox1.ListIndex + 2) = Equipe  'Idem
    .Range("S" & Me.ComboBox1.ListIndex + 2) = Medecin  'Idem
    .Range("T" & Me.ComboBox1.ListIndex + 2) = IDE  'Idem
    .Range("U" & Me.ComboBox1.ListIndex + 2) = CCA  'On écrit dans chaque colonne les valeurs des différents controls
    .Range("AE" & Me.ComboBox1.ListIndex + 2) = TextMotif  'Idem
    .Range("W" & Me.ComboBox1.ListIndex + 2) = Sexe  'Idem
    .Range("X" & Me.ComboBox1.ListIndex + 2) = TextNom  'Idem
    .Range("Y" & Me.ComboBox1.ListIndex + 2) = TextPrenom  'On écrit dans chaque colonne les valeurs des différents controls
    .Range("Z" & Me.ComboBox1.ListIndex + 2) = TextDateNais  'Idem
    .Range("AB" & Me.ComboBox1.ListIndex + 2) = TextAdresse  'Idem
    .Range("AC" & Me.ComboBox1.ListIndex + 2) = TextCodeP  'Idem
    .Range("AD" & Me.ComboBox1.ListIndex + 2) = TextVilleP  'On écrit dans chaque colonne les valeurs des différents controls
    .Range("AF" & Me.ComboBox1.ListIndex + 2) = TextLieuInter  'Idem
    .Range("AG" & Me.ComboBox1.ListIndex + 2) = Destination  'Idem
    .Range("AH" & Me.ComboBox1.ListIndex + 2) = Service  'Idem
    .Range("AI" & Me.ComboBox1.ListIndex + 2) = TextDg  'On écrit dans chaque colonne les valeurs des différents controls


  End With
  a = MsgBox("Confirmez-vous la modification?", vbOKCancel)
  If (a = 1) Then
    'On evoie un message de confirmation
    MsgBox "Opération accomplie", vbInformation, T


    Ini  'On lance la réinitialisation du UserForm (Macro en haut du Module)
    'Si Réponse Annulation on envoie un message et on a rien fait
  Else: MsgBox "Opération annulée", vbInformation, T
  End If
End Sub

A+
 

charlebel

XLDnaute Nouveau
Re : L'ordre du classement dans combobox n'est pas respecté

Re mille merci.
mes soucis sont bien réglés grâce à vous.
je vais faire une petite pause dans ce projet car mon objectif et de pouvoir créer un module de requête par filtre multicritère pour effectuer des différente statistiques sur ce tableau/ j'avoue que je n'ai pas vraiment commencer à regarder mais j'ai l’impression que c'est compliqué.
j'en profite pour dire que Montargis n'est pas loin de chez moi et je suis ravi de vous avoir " croisé".
merci encore.