A voir également:
- COMBOBOX change et outil de recherche dans BdD
- Changer de dns - Guide
- Recherche automatique des chaînes ne fonctionne pas - Guide
- Outil de benchmark gratuit - Accueil - Utilitaires
- Télécharger outil capture d'écran ciseaux - Télécharger - Capture d'écran
- Recherche photo - Guide
4 réponses
Bonjour
la balise de code invalide la balise de gras, mais bon on voit écrit <gras>...</gras> dans ton code.
VBA, c'est pas mon fort, mais à vue de nez, ici
Et là
Une solution simple est de mettre un booléen global, avant toutes ces boucles tu le passes à True, et après tu le remets False.
Dans l'événement, tu agis seulement quand ce booléen vaut False.
la balise de code invalide la balise de gras, mais bon on voit écrit <gras>...</gras> dans ton code.
VBA, c'est pas mon fort, mais à vue de nez, ici
Set obj = Me.Controls("ComboBox_CAT_" & inc)obj est un comboxbox.
Et là
obj.Value = Sheets(NomFeuille).Cells(i, inc + 3).Texttu changes sa valeur, donc l'évèment changed est déclenché.
Une solution simple est de mettre un booléen global, avant toutes ces boucles tu le passes à True, et après tu le remets False.
Dans l'événement, tu agis seulement quand ce booléen vaut False.
merci pour ta réponse qui m'a permis de comprendre :)
je te montre la procédure actualiser boxe ou justement la j'ai mis un booléen global!! est ce que je dois faire pareil pour l'initialisation de la userform du coup ?
je te montre la procédure actualiser boxe ou justement la j'ai mis un booléen global!! est ce que je dois faire pareil pour l'initialisation de la userform du coup ?
Private Sub actualiserBoxes() Dim inc As Integer, i As Integer Dim obj As Object Dim Ligne As Range Dim num As String, nom As String eventFlag = True ' on active le flag évènement pour ne pas appeler indéfiniment l'évènement "change" If Me.Visible = True Then ' si la userform a déjà été initialisée alors... Set obj = Me.ActiveControl num = Right(obj.Name, 1) ' on active le filtre concerné worksheets(NomFeuille).Range("$A$3:$AW$1000").AutoFilter Field:=num + 3, Criteria1:=obj.Value For inc = 1 To NbColonne Set obj = Me.Controls("ComboBox_CAT_" & inc) If "ComboBox_CAT_" & inc <> Me.ActiveControl.Name Then ' Si ce n'est pas la boxe sélectionnée alors... nom = obj.Value obj.Clear ' pour chaque ligne filtrée on récupère la valeur de la cellule concernée For Each Ligne In worksheets(NomFeuille).AutoFilter.Range.Columns(inc + 3).SpecialCells(xlCellTypeVisible).Cells obj.Value = Ligne.Text If obj.ListIndex = -1 And Ligne.Text <> sheets(NomFeuille).Cells(3, inc + 3).Text Then obj.AddItem Ligne.Text Next Else ' sinon on récupère juste la valeur active et on vide le contenu de la boxe sélectionnée nom = obj.Value obj.Clear End If obj.Value = nom ' puis on replace la valeur initiale de la boxe (vide ou valeur qui avait été choisie par l'utilisateur) Next End If ' libération mémoire et flag évènement Set obj = Nothing eventFlag = False End Sub