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

Appel de sub sous changement d'état

  • Initiateur de la discussion Initiateur de la discussion MaximeRoth
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

MaximeRoth

XLDnaute Junior
Bonjour,

Je souhaite savoir si on peut différencier les changements d'une combobox, je veux dire que le premier changement n'ai pas le même effet que le second.

Exemple concret:

Voici mon code :

Code:
Private Sub Combobox1_Change()

With Sheets("Base_Article")

If ComboBox1.Value = "" Then MsgBox "Entrez un code svp", , "Erreur": Exit Sub

Dim x As Range

Set x = Sheets("Base_Article").Cells.Find(ComboBox1.Value, , xlValues, xlWhole, , , False)

If x Is Nothing Then
    MsgBox "Code non reconnu", , "Erreur"
Else
    'Designation
    TextBox2.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 2, False)
    'Logo
    TextBox4.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 3, False)
    'Desi C1
    TextBox9.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 4, False)
    'Four C1
    TextBox10.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 5, False)
    'Desi C2
    TextBox12.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 6, False)
    'Four C2
    TextBox13.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 7, False)
    'Desi C3
    TextBox15.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 8, False)
    'Four C3
    TextBox16.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 9, False)
    'Desi C4
    TextBox18.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 10, False)
    'Four C4
    TextBox19.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 11, False)
    'Desi C5
    TextBox21.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 12, False)
    'Four C5
    TextBox22.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 13, False)

End If

Call Derniere_Ligne

End With
End Sub

A chaque changement d'état de ma Combobox ce code est exécuté, or je souhaiterai que la dernière partie "Call Derniere_Ligne" ne s'exécute que lors du premier changement d'état.

Merci d'avance.


Max
 
Re : Appel de sub sous changement d'état

Bonjour,

Tu pourrais éventuellement te créer une variable booléenne publique qui prendrais la valeur Faux à l'ouverture de ton classeur et serait modifiée en Vrai lors de la première modification de ton ComboBox.

Il te suffirait alors de tester sa valeur avant d'exécuter ta procdéure "Derniere_Ligne".
 
Re : Appel de sub sous changement d'état

Bonjour GeoTrouvePas,

Merci pour l'idée de la variable.
Par contre je ne vois pas comment la mettre en place avec un variable booléenne Vrai/Faux.
Car j'aurais mis l'incrémentation au début de l'exécution de la procédure Derniere_Ligne avec la vérification à la suite.

Et avec une variable Integer, que tu incrémente à chaque exécution puis vérification : Variable supérieur à un ne rien faire Variable inférieur à un exécuter la procédure. Voici ma procédure placée dans un module:


Code:
Private exe As Integer 'déclare la variable li (LIgne)
exe = 0
Sub Derniere_Ligne()

    exe = exe + 1
    If exe < 1 Then
    
        Range("B8").Select
        Selection.End(xlDown).Select
        Selection.Offset(1, 0).Select
        ActiveCell.FormulaR1C1 = "=R[-1]C+1"
    
    Else
        
End Sub

Une autre question:

Je ne sais pas si on peut incrémenter comme cela ni si la mise à 0 de la variable peut se faire juste après ça déclaration.

A+
Max
 
Re : Appel de sub sous changement d'état

J'aurai plutôt procéder comme ceci :
Code:
Public Sauter_Procedure As Boolean

Private Sub Combobox1_Change()

With Sheets("Base_Article")
    If ComboBox1.Value = "" Then MsgBox "Entrez un code svp", , "Erreur": Exit Sub

Dim x As Range

    Set x = Sheets("Base_Article").Cells.Find(ComboBox1.Value, , xlValues, xlWhole, , , False)

    If x Is Nothing Then
        MsgBox "Code non reconnu", , "Erreur"
    Else
        'Designation
        TextBox2.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 2, False)
        'Logo
        TextBox4.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 3, False)
        'Desi C1
        TextBox9.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 4, False)
        'Four C1
        TextBox10.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 5, False)
        'Desi C2
        TextBox12.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 6, False)
        'Four C2
        TextBox13.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 7, False)
        'Desi C3
        TextBox15.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 8, False)
        'Four C3
        TextBox16.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 9, False)
        'Desi C4
        TextBox18.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 10, False)
        'Four C4
        TextBox19.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 11, False)
        'Desi C5
        TextBox21.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 12, False)
        'Four C5
        TextBox22.Value = WorksheetFunction.VLookup(ComboBox1.Value, Sheets("Base_Article").Range("B3: N32"), 13, False)
    
    End If

    If Sauter_Procedure = False Then Call Derniere_Ligne: Sauter_Procedure = True

End With

End Sub

Par défaut, ta variable va avoir la valeur False (sans même avoir été initialisée). Pratique pour détecter qu'on en est à la première exécution. Pas besoin d'utiliser une variable non booléenne que ce cas de figure.
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
2
Affichages
158
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
508
Réponses
3
Affichages
671
Réponses
3
Affichages
586
Réponses
10
Affichages
830
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…