XL 2016 Alimentation d'un fichier selon données sélectionnées via une ComboBox

Aldonanou

XLDnaute Junior
Bonjour,

Je dois réaliser une étude de fréquentation. J'ai préparé un formulaire que j'ai réussi à coder, à l'exception de la récupération des informations des comboBox. D'habitude j'utilise des listes déroulantes et c'est beaucoup plus simple.

Lorsque je valide (pour l'enregistrement dans l'onglet synthèse), les colonnes A à C se complètent correctement mais à partir de la colonne D jusqu'à E, c'est toujours la 1ère ligne des comboBox qui est sélectionnée. Je joins l'intégralité du code ainsi que le formulaire.

Il doit très certainement falloir rajouter une information aux lignes ci-dessous :

Sheets("Synthèse").Cells(Ligne, 4) = ListBox_categorie.List
Sheets("Synthèse").Cells(Ligne, 5) = ListBox_marche.List
Sheets("Synthèse").Cells(Ligne, 6) = ListBox_motif.List

VB:
Private Sub UserForm_Initialize()


'   Date formulaire
    'TextDate.Value = DateValue(Now)
    TextDate.Value = Format(Now(), "dd mmm yyyy hh:mm:ss am/pm")

'   Numéro séquence
    Me.TextBoxNum.Value = Format((Application.WorksheetFunction.Max(Worksheets("Synthèse").Columns(1))) + 1, "000")
    
    
'   Ajout de la liste des agences
    liste_agence.AddItem "1"
    liste_agence.AddItem "2"
    liste_agence.AddItem "3"
    liste_agence.AddItem "4"
    liste_agence.AddItem "5"
    liste_agence.AddItem "6"
    liste_agence.AddItem "7"
    liste_agence.AddItem "8"
    liste_agence.AddItem "9"
    liste_agence.AddItem "10"
  
'   Ajout de la liste de la Catégorie
    ListBox_categorie.AddItem "Client"
    ListBox_categorie.AddItem "N'est pas client"
    ListBox_categorie.AddItem "Prospect"
    ListBox_categorie.AddItem "Autres"

    
'   Ajout de la liste du Marché
    ListBox_marche.AddItem "A"
    ListBox_marche.AddItem "B"
    ListBox_marche.AddItem "C"
    ListBox_marche.AddItem "D"
    ListBox_marche.AddItem "E"
    ListBox_marche.AddItem "Autres"
    
    
'   Ajout de la liste du Motif
    ListBox_motif.AddItem "Remise"
    ListBox_motif.AddItem "Retrait"
    ListBox_motif.AddItem "RDV"
    ListBox_motif.AddItem "Sollicite une information"
    ListBox_motif.AddItem "Prise de RDV"
    ListBox_motif.AddItem "Demande d'assistance"
    ListBox_motif.AddItem "Effectuer une réclamation"
    ListBox_motif.AddItem "Autres"
    

End Sub



Private Sub ajouter_Click()


    Dim Synthèse As String
    
    Sheets("Synthèse").Activate
    ActiveSheet.Visible = True
    ActiveSheet.Select
  
    Dim Response As Byte
    Dim Ligne As Integer: Ligne = 2

        
            While Sheets("Synthèse").Cells(Ligne, 3).Value <> ""
            Ligne = Ligne + 1
            Wend
            
            Sheets("Synthèse").Cells(Ligne, 1) = CDbl(TextBoxNum)
            Sheets("Synthèse").Cells(Ligne, 2) = CDate(TextDate)
            Sheets("Synthèse").Cells(Ligne, 3) = liste_agence
            Sheets("Synthèse").Cells(Ligne, 4) = ListBox_categorie.List
            Sheets("Synthèse").Cells(Ligne, 5) = ListBox_marche.List
            Sheets("Synthèse").Cells(Ligne, 6) = ListBox_motif.List
            
            While Sheets("Synthèse").Cells(Ligne, 2).Value <> ""
            Ligne = Ligne + 1
            Wend
            
          
            
'       Vide les données puis affiche l'UserForm
            Unload Me
            Application.DisplayAlerts = False
            ActiveWorkbook.Save

            
            Application.DisplayAlerts = True
            UserForm1.Show
          
  
   Sheets("Menu").Select
  
End Sub



Private Sub liste_agence_Change()

    Dim I As Integer

    'Boucle pour ajouter les 10 agences à la liste déroulante
    For I = 1 To 10
        liste_agence.AddItem Cells(1, I)
    Next

End Sub

Private Sub quitter_Click()
Unload Me
End Sub

Merci de l'aide qui pourra m'être apportée afin de résoudre ce dysfonctionnement.

Cordialement
 
Solution
Bonjour,

Voici la solution que j'ai trouvé en corrigeant les lignes :
Sheets("Synthèse").Cells(Ligne, 4) = ListBox_categorie.List(ListBox_categorie.ListIndex)
Sheets("Synthèse").Cells(Ligne, 5) = ListBox_marche.List(ListBox_marche.ListIndex)
Sheets("Synthèse").Cells(Ligne, 6) = ListBox_motif.List(ListBox_motif.ListIndex)

cela fonctionne.

Attention : la valeur MultiSelect de la ListBox doit être à 0-fmMultiSelectSingle sinon cela ne fonctionne pas.

Pour ceux que cela intéresse voici le code intégral.

VB:
Private Sub UserForm_Initialize()


'   Date formulaire
    'TextDate.Value = DateValue(Now)
    TextDate.Value = Format(Now(), "dd mmm yyyy hh:mm:ss am/pm")

'   Numéro séquence...

Dranreb

XLDnaute Barbatruc
Bonjour.
Pourquoi ne prenez vous pas la propriété Text des ComboBox ?
On peut aussi prendre leur propriété Value. Je ne l'aime pas parce son nom suggère qu'elle pourait être numérique, alors que c'est toujours un Variant/String, tandis que la Text est directement le String.
 

Aldonanou

XLDnaute Junior
Bonjour,

Voici la solution que j'ai trouvé en corrigeant les lignes :
Sheets("Synthèse").Cells(Ligne, 4) = ListBox_categorie.List(ListBox_categorie.ListIndex)
Sheets("Synthèse").Cells(Ligne, 5) = ListBox_marche.List(ListBox_marche.ListIndex)
Sheets("Synthèse").Cells(Ligne, 6) = ListBox_motif.List(ListBox_motif.ListIndex)

cela fonctionne.

Attention : la valeur MultiSelect de la ListBox doit être à 0-fmMultiSelectSingle sinon cela ne fonctionne pas.

Pour ceux que cela intéresse voici le code intégral.

VB:
Private Sub UserForm_Initialize()


'   Date formulaire
    'TextDate.Value = DateValue(Now)
    TextDate.Value = Format(Now(), "dd mmm yyyy hh:mm:ss am/pm")

'   Numéro séquence
    Me.TextBoxNum.Value = Format((Application.WorksheetFunction.Max(Worksheets("Synthèse").Columns(1))) + 1, "000")
   
   
'   Ajout de la liste des agences
    liste_agence.AddItem "1"
    liste_agence.AddItem "2"
    liste_agence.AddItem "3"
    liste_agence.AddItem "4"
    liste_agence.AddItem "5"
    liste_agence.AddItem "6"
    liste_agence.AddItem "7"
    liste_agence.AddItem "8"
    liste_agence.AddItem "9"
    liste_agence.AddItem "10"
 
'   Ajout de la liste de la Catégorie
    ListBox_categorie.AddItem "Client"
    ListBox_categorie.AddItem "N'est pas client"
    ListBox_categorie.AddItem "Prospect"
    ListBox_categorie.AddItem "Autres"

   
'   Ajout de la liste du Marché
    ListBox_marche.AddItem "A"
    ListBox_marche.AddItem "B"
    ListBox_marche.AddItem "C"
    ListBox_marche.AddItem "D"
    ListBox_marche.AddItem "E"
    ListBox_marche.AddItem "Autres"
   
   
'   Ajout de la liste du Motif
    ListBox_motif.AddItem "Remise"
    ListBox_motif.AddItem "Retrait"
    ListBox_motif.AddItem "RDV"
    ListBox_motif.AddItem "Sollicite une information"
    ListBox_motif.AddItem "Prise de RDV"
    ListBox_motif.AddItem "Demande d'assistance"
    ListBox_motif.AddItem "Effectuer une réclamation"
    ListBox_motif.AddItem "Autres"
   

End Sub


Private Sub ajouter_Click()

'   Coloration des Labels en noir (&H80000012 = couleur de base de la propriété ForeColor)
'   Si les informationsne sont pas toutes sélectionnées
    Label1.ForeColor = &H80000012
    LabelCategorie.ForeColor = &H80000012
    LabelMarche.ForeColor = &H80000012
    LabelMotif.ForeColor = &H80000012
   
'   Contrôles des champs
    If liste_agence = "" Then ' si pas d'agence
        Label1.ForeColor = RGB(255, 0, 0)
        intpout = MsgBox("Information à sélectionner", vbInformation, "")
    ElseIf ListBox_categorie.ListIndex = -1 Then 'Si pas de catégorie
        LabelCategorie.ForeColor = RGB(255, 0, 0)
        intpout = MsgBox("Information à sélectionner", vbInformation, "")
    ElseIf ListBox_marche.ListIndex = -1 Then 'Si pas de marché
        LabelMarche.ForeColor = RGB(255, 0, 0)
        intpout = MsgBox("Information à sélectionner", vbInformation, "")
    ElseIf ListBox_motif.ListIndex = -1 Then 'Si pas de motif
        LabelMotif.ForeColor = RGB(255, 0, 0)
        intpout = MsgBox("Information à sélectionner", vbInformation, "")
   
    Else


    Dim Synthèse As String
   
    Sheets("Synthèse").Activate
    ActiveSheet.Visible = True
    ActiveSheet.Select
    ActiveSheet.Unprotect Password:=""
   
'   Test msgbox pour confirmations des sélections
    'If ListBox_categorie.ListIndex = -1 Then Exit Sub
    'MsgBox ListBox_categorie.List(ListBox_categorie.ListIndex)
   
    'If ListBox_marche.ListIndex = -1 Then Exit Sub
    'MsgBox ListBox_marche.List(ListBox_marche.ListIndex)
   
    'If ListBox_motif.ListIndex = -1 Then Exit Sub
    'MsgBox ListBox_motif.List(ListBox_motif.ListIndex)
 
 
'   Message de confirmation de la saisie
    Dim réponse As Integer
       
        réponse = MsgBox("Date : " & TextDate + vbNewLine + vbNewLine + _
            ListBox_categorie.List(ListBox_categorie.ListIndex) + vbNewLine + _
            ListBox_marche.List(ListBox_marche.ListIndex) + vbNewLine + _
            ListBox_motif.List(ListBox_motif.ListIndex) + vbNewLine + vbNewLine + _
            "Voulez-vous confirmer ?", vbQuestion + vbYesNo, "Confirmation")

'   Si Oui
        Select Case réponse
            Case vbYes
            réponse = MsgBox("Nouvelle visite enregistrée avec succès !", , "Visite ajoutée")

    Dim Response As Byte
    Dim Ligne As Integer: Ligne = 2

       
            While Sheets("Synthèse").Cells(Ligne, 3).Value <> ""
            Ligne = Ligne + 1
            Wend
           
            Sheets("Synthèse").Cells(Ligne, 1) = CDbl(TextBoxNum)
            Sheets("Synthèse").Cells(Ligne, 2) = CDate(TextDate)
            Sheets("Synthèse").Cells(Ligne, 3) = liste_agence
            Sheets("Synthèse").Cells(Ligne, 4) = ListBox_categorie.List(ListBox_categorie.ListIndex)
            Sheets("Synthèse").Cells(Ligne, 5) = ListBox_marche.List(ListBox_marche.ListIndex)
            Sheets("Synthèse").Cells(Ligne, 6) = ListBox_motif.List(ListBox_motif.ListIndex)
           
            While Sheets("Synthèse").Cells(Ligne, 2).Value <> ""
            Ligne = Ligne + 1
            Wend
           
'   Si Non
            Case vbNo
            réponse = MsgBox("Nouvelle visite annulée avec succès !", , "Visite annulée")
       
        End Select

        Application.ScreenUpdating = True
        Application.Calculation = xlAutomatic
         
           
'       Vide les données puis affiche l'UserForm
            Unload Me
            Application.DisplayAlerts = False
            ActiveWorkbook.Save

           
            Application.DisplayAlerts = True
            UserForm1.Show
         
End If
 
   Sheets("Menu").Select
 
End Sub

Private Sub liste_agence_Change()

    Dim I As Integer

    'Boucle pour ajouter les 10 agences à la liste déroulante
    For I = 1 To 10
        liste_agence.AddItem Cells(1, I)
    Next

End Sub

Private Sub quitter_Click()
Unload Me
End Sub

Merci à XLDnaute Junior pour avoir suggérer une solution.
 

Pièces jointes

  • Etude de fréquentation.xlsm
    36 KB · Affichages: 6

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
313 271
Messages
2 096 724
Membres
106 720
dernier inscrit
Alain EDZOA