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

Simplification de code par boucle et "&"

  • Initiateur de la discussion Initiateur de la discussion Urdi
  • 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 !

U

Urdi

Guest
Bonjour,et pour commencer merci pour le temps que vous consacrez à mon problème. Je souhaiterai simplifier un code que voici en passant par une boucle "For" et en remplaçant les nombres changeant par une variable a. Malheureusement je n'arrive pas à trouver la bonne synthaxe. Avez-vous une idée?

Code:
Private Sub UserForm_Initialize()

    Select Case Range("C3").Value [COLOR="lime"]'ouvert1_1, ferme1_1,etc sont des noms de OptionButton de l'UserForm[/COLOR]        Case "Ouverte"
            ouvert[COLOR="Red"]1[/COLOR]_1.Value = True
        Case "Fermée"
            ferme[COLOR="red"]1[/COLOR]_1.Value = True
        Case "Indisponible"
            indispo[COLOR="red"]1[/COLOR]_1.Value = True
        Case Else
    End Select

        Select Case Range("C14").Value
        Case "Ouverte"
            ouvert[COLOR="red"]1[/COLOR]_2.Value = True
        Case "Fermée"
            ferme[COLOR="red"]1[/COLOR]_2.Value = True
        Case "Indisponible"
            indispo[COLOR="red"]1[/COLOR]_2.Value = True
        Case Else
    End Select

[COLOR="Lime"]'Code identique 9 fois (pour ouvert2_1, ferme2_1..., ouvert3_1..., ouvert9_1,...) avec à chaque fois C3, C14, C25, C36 etc...[/COLOR]
End Sub

Voici un début de code seul problème je n'arrive pas à trouver la bonne synthaxe pour l'utilisation du "&" pour un nom de bouton d'option.

Que ce soit par l'utilisation d'une variable intermédiaire nom (1ière partie).
Ou que ce soit en direct.

Code:
Private Sub UserForm_Initialize()
Dim i As Long, a As Integer

i = 3
For [COLOR="red"]a[/COLOR] = 1 To 9 
    Select Case Range("C & i").Value
    Case "Ouverte"
        [COLOR="magenta"]nom = "ouvert" & [COLOR="Red"]a[/COLOR] & "_1"[/COLOR]
        [COLOR="magenta"]nom[/COLOR].Value = True
    Case "Fermée"
        [COLOR="magenta"]nom = "ferme" & [COLOR="red"]a[/COLOR] & "_1"[/COLOR]
        [COLOR="magenta"]nom[/COLOR].Value = True
    Case "Indisponible"
        [COLOR="magenta"]nom = "indispo" & [COLOR="red"]a[/COLOR] & "_1"[/COLOR]
        [COLOR="magenta"]nom[/COLOR].Value = True
    End Select
    i = i + 11
    Select Case Range("C & i").Value
      Case "Ouverte"
        [COLOR="blue"]"ouvert" & [COLOR="red"]a[/COLOR] & "_2".Value = True[/COLOR]
      Case "Fermée"
        [COLOR="blue"]"ferme" & [COLOR="red"]a[/COLOR] & "_2".Value = True[/COLOR]
      Case "Indisponible"
        [COLOR="blue"]"indispo" & [COLOR="red"]a[/COLOR] & "_2".Value = True[/COLOR]
    End Select
    
    i = i + 11
Next [COLOR="Red"]a[/COLOR]



End Sub

Merci d'avance.
 
Re : Simplification de code par boucle et "&"

Bonjour,

en lisant le code, rectifie tout d'abord cette ligne :

Code:
Select Case Range("C & i").Value

par :

Code:
Select Case Range("C" & i).Value

puis, pour les boucles, comme un bouton d'option est un contrôle, il faut l'appeler par son nom, ainsi :

Code:
Case "Ouverte"
        Me.Controls("ouvert" & a & "_1").Value = True

Essaie et dis-nous
 
Re : Simplification de code par boucle et "&"

Merci bhbh, ça tourne parfaitement.

Au passage un petit éclaircissement, ailleurs je fais régulièrement appel à des controls en faisant directement des
"ouvert1_1.Value = True ou des "ouvert1_1.Visible = False" et j'en passe,

celà fonctionne parfaitement.

Dois-je les convertir en "Me.Controls(ouvert1_1).Value = True"... ?
 
Re : Simplification de code par boucle et "&"

Re,

non, si le nom de ton contrôle est complet, tu peux l'utiliser ainsi.

Par contre, si tu veux y introduire une variable, afin de faire une boucle sur les contrôles, tu dois le faire tel que donné dans ma réponse.

C'est pourquoi on conseille souvent de donner un nom facilement repérable, mais qui termine comme tu l'as fait, par un chiffre.
Ainsi, plutôt que d'avoir un code qui fait 20 lignes, une boucle de 3 lignes fait le même travail

Exemple en déclarant i as Byte :

Code:
For i = 1 To 20
    Me.Controls("Textbox" & i).Value = ""
Next i
 
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

  • Question Question
Microsoft 365 Export données
Réponses
4
Affichages
907
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…