Parcours de controles
Le
elect31
Bonjour à tous
Dans le frame d'un userform, j'ai 40 controles divers et variés : 24
comboBox, 8 TextBox, 8 Label
Question : comment éviter de parcourir tous les controles du frame? Il
n'y a que les TextBox tagués "mains" qui m'interessent.
Dans le code ci dessous que j'utilise, Excel parcours tous les controles
jusqu'à ce qu'il en rencontre un tagué "mains".
N'y aurait il pas un moyen d'aller plus vite et de ne parcourir que les
TextBox?
With .Controls("FrameSeance" & CStr(i))
LaColonne = 0
For Each C In .Controls
If C.Tag = "mains" Then
C.Value = CStr(ThisWorkbook.Worksheets(date_seance). _
Range("CA5").Offset(laLigne, LaColonne).Value)
LaColonne = LaColonne + 1
End If
Next C
End With
PS: Ce code fonctionne. Je suis simplement en train d'essayer de
l'optimiser.
Merci de vos réponses
Dans le frame d'un userform, j'ai 40 controles divers et variés : 24
comboBox, 8 TextBox, 8 Label
Question : comment éviter de parcourir tous les controles du frame? Il
n'y a que les TextBox tagués "mains" qui m'interessent.
Dans le code ci dessous que j'utilise, Excel parcours tous les controles
jusqu'à ce qu'il en rencontre un tagué "mains".
N'y aurait il pas un moyen d'aller plus vite et de ne parcourir que les
TextBox?
With .Controls("FrameSeance" & CStr(i))
LaColonne = 0
For Each C In .Controls
If C.Tag = "mains" Then
C.Value = CStr(ThisWorkbook.Worksheets(date_seance). _
Range("CA5").Offset(laLigne, LaColonne).Value)
LaColonne = LaColonne + 1
End If
Next C
End With
PS: Ce code fonctionne. Je suis simplement en train d'essayer de
l'optimiser.
Merci de vos réponses

Poser une question


Non à ma connaissance il n'est pas possible de parcourir uniquement les
TextBox.
Par contre tu peux remplacer avantageusement l'utilisation des Tag par
TypeName(C) :
Dim C As Control
For Each C In Controls
If TypeName(C) = "TextBox" Then
' ... Ton Code ...
End If
Next C
En terme de rapidité d'exécution, la différence entre 8 contrôles ou 40
sera imperceptiblee sauf si cette boucle est elle-même inclue dans une
ou plusieurs boucles et encore...
Benead
Excel 2000
elect31 a écrit :
Non à ma connaissance il n'est pas possible de parcourir uniquement les
TextBox.
Par contre tu peux remplacer avantageusement l'utilisation des Tag par
TypeName(C) :
Dim C As Control
For Each C In Controls
If TypeName(C) = "TextBox" Then
' ... Ton Code ...
End If
Next C
En terme de rapidité d'exécution, la différence entre 8 contrôles ou 40
sera imperceptiblee sauf si cette boucle est elle-même inclue dans une
ou plusieurs boucles et encore...
A+
Benead
Excel 2000
elect31 a écrit :
Non à ma connaissance il n'est pas possible de parcourir uniquement les
TextBox.
Par contre tu peux remplacer avantageusement l'utilisation des Tag par
TypeName(C) :
Dim C As Control
For Each C In Controls
If TypeName(C) = "TextBox" Then
' ... Ton Code ...
End If
Next C
En terme de rapidité d'exécution, la différence entre 8 contrôles ou 40
sera imperceptiblee sauf si cette boucle est elle-même inclue dans une
ou plusieurs boucles et encore...
A+
Benead
Excel 2000
elect31 a écrit :
Non à ma connaissance il n'est pas possible de parcourir uniquement les
TextBox.
Par contre tu peux remplacer avantageusement l'utilisation des Tag par
TypeName(C) :
Dim C As Control
For Each C In Controls
If TypeName(C) = "TextBox" Then
' ... Ton Code ...
End If
Next C
En terme de rapidité d'exécution, la différence entre 8 contrôles ou 40
sera imperceptiblee sauf si cette boucle est elle-même inclue dans une
ou plusieurs boucles et encore...
A+
Benead
Excel 2000
elect31 a écrit :
Je peux remplacer Tag par TypeName à condition que tous les TextBox
soient concernés. Peut être que seulement certains TextBox (ceux que
j'ai tagué "mains") m'intéressent...
Sinon, effectivement, j'ai souvent plusieurs boucles imbriquées l'une
dans l'autre, d'où mon intention d'essayer d'accélérer le processus.
Bon, tant pis! Même si la réponse à ma question est négative, j'y aurai
au moins gagné la certitude que ce bout de code est optimisé... à moins
que quelqu'un d'autre ait une solution miracle comme certains peuvent
les trouver. Du genre, là où je mets 10 lignes de code, ils en mettent
1. Je suis autodidacte dans le domaine de la programmation, d'où mon
questionnement.
Encore merci à tous ceux qui lisent et qui répondent dans ce forum.
Benoît Marchand [Benead] a écrit :