GNT sans publicité, site mobile, fonctionnalitées exclusives...

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
Lire les 16 réponses

Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses Page 1 / 4
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Benoît Marchand [Benead]
Le #21366931
Bonjour,

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 :
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
Benoît Marchand [Benead]
Le #21366921
Bonjour,

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 :
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
Benoît Marchand [Benead]
Le #21366911
Bonjour,

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 :
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
Benoît Marchand [Benead]
Le #21367051
Bonjour,

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 :
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
elect31
Le #21376651
Merci de ta réponse Benoit
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 :
Bonjour,

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 :
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
Publicité
Suivre les réponses
Poster une réponse
Anonyme