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

L

lironik

Guest
Bonsoir à tous
J'ai le code suivant qui marche parfaitement mais qui est très long. J'aimerais donc savoir s'il est possible de le raccourcir en ayant recourt à une boucle.

Code:
'H1: Le client possède une voiture
If SaisieNvoClt.NbVoiture = "1" Then
  'Affichage données voiture 1
    SaisieNvoClt.Voiture1.Visible = True
    SaisieNvoClt.LabelMatriculeV1.Visible = True
    SaisieNvoClt.MatriculeV1.Visible = True
    SaisieNvoClt.LabelMarqueV1.Visible = True
    SaisieNvoClt.MarqueV1.Visible = True
    SaisieNvoClt.LabelMoteurV1.Visible = True
    SaisieNvoClt.MoteurV1.Visible = True
    
    
  'Ne pas afficher données voitures 2 et 3
    SaisieNvoClt.Voiture2.Visible = False
    SaisieNvoClt.LabelMatriculeV2.Visible = False
    SaisieNvoClt.MatriculeV2.Visible = False
    SaisieNvoClt.LabelMarqueV2.Visible = False
    SaisieNvoClt.MarqueV2.Visible = False
    SaisieNvoClt.LabelMoteurV2.Visible = False
    SaisieNvoClt.MoteurV2.Visible = False

    SaisieNvoClt.Voiture3.Visible = False
    SaisieNvoClt.LabelMatriculeV3.Visible = False
    SaisieNvoClt.MatriculeV3.Visible = False
    SaisieNvoClt.LabelMarqueV3.Visible = False
    SaisieNvoClt.MarqueV3.Visible = False
    SaisieNvoClt.LabelMoteurV3.Visible = False
    SaisieNvoClt.MoteurV3.Visible = False
    
    
'H2: Le client possède deux voitures
    ElseIf SaisieNvoClt.NbVoiture = "2" Then
  'Affichage données voitures 1 et 2
    SaisieNvoClt.Voiture1.Visible = True
    SaisieNvoClt.LabelMatriculeV1.Visible = True
    SaisieNvoClt.MatriculeV1.Visible = True
    SaisieNvoClt.LabelMarqueV1.Visible = True
    SaisieNvoClt.MarqueV1.Visible = True
    SaisieNvoClt.LabelMoteurV1.Visible = True
    SaisieNvoClt.MoteurV1.Visible = True
    
    SaisieNvoClt.Voiture2.Visible = True
    SaisieNvoClt.LabelMatriculeV2.Visible = True
    SaisieNvoClt.MatriculeV2.Visible = True
    SaisieNvoClt.LabelMarqueV2.Visible = True
    SaisieNvoClt.MarqueV2.Visible = True
    SaisieNvoClt.LabelMoteurV2.Visible = True
    SaisieNvoClt.MoteurV2.Visible = True

  'Ne pas afficher données voiture 3
    SaisieNvoClt.Voiture3.Visible = False
    SaisieNvoClt.LabelMatriculeV3.Visible = False
    SaisieNvoClt.MatriculeV3.Visible = False
    SaisieNvoClt.LabelMarqueV3.Visible = False
    SaisieNvoClt.MarqueV3.Visible = False
    SaisieNvoClt.LabelMoteurV3.Visible = False
    SaisieNvoClt.MoteurV3.Visible = False
  
'H3: Le client possède trois voitures
'Afficher données voitures 1, 2 et 3
    Else: SaisieNvoClt.Voiture1.Visible = True
    SaisieNvoClt.LabelMatriculeV1.Visible = True
    SaisieNvoClt.MatriculeV1.Visible = True
    SaisieNvoClt.LabelMarqueV1.Visible = True
    SaisieNvoClt.MarqueV1.Visible = True
    SaisieNvoClt.LabelMoteurV1.Visible = True
    SaisieNvoClt.MoteurV1.Visible = True
    
    SaisieNvoClt.Voiture2.Visible = True
    SaisieNvoClt.LabelMatriculeV2.Visible = True
    SaisieNvoClt.MatriculeV2.Visible = True
    SaisieNvoClt.LabelMarqueV2.Visible = True
    SaisieNvoClt.MarqueV2.Visible = True
    SaisieNvoClt.LabelMoteurV2.Visible = True
    SaisieNvoClt.MoteurV2.Visible = True
    
    SaisieNvoClt.Voiture3.Visible = True
    SaisieNvoClt.LabelMatriculeV3.Visible = True
    SaisieNvoClt.MatriculeV3.Visible = True
    SaisieNvoClt.LabelMarqueV3.Visible = True
    SaisieNvoClt.MarqueV3.Visible = True
    SaisieNvoClt.LabelMoteurV3.Visible = True
    SaisieNvoClt.MoteurV3.Visible = True
        
 End If

Merci à tous
 
Re : Problème boucle

Bonsoir Lironik, skoobi,

N'ayant pas le fichier, et étant débutant en Userform, je ne te garanti pas que le code ci-dessous fonctionne! A tester

Code:
'H1: Le client possède une voiture
If SaisieNvoClt.NbVoiture = "1" Then
  'Affichage données voiture 1
    SaisieNvoClt.Voiture1.Visible = True
    SaisieNvoClt.LabelMatriculeV1.Visible = True
    SaisieNvoClt.MatriculeV1.Visible = True
    SaisieNvoClt.LabelMarqueV1.Visible = True
    SaisieNvoClt.MarqueV1.Visible = True
    SaisieNvoClt.LabelMoteurV1.Visible = True
    SaisieNvoClt.MoteurV1.Visible = True
  
  'Ne pas afficher données voitures 2 et 3
For i = 2 to 3
    SaisieNvoClt.Voiture & i & .Visible = False
    SaisieNvoClt.LabelMatriculeV & i & .Visible = False
    SaisieNvoClt.MatriculeV & i & .Visible = False
    SaisieNvoClt.LabelMarqueV & i & .Visible = False
    SaisieNvoClt.MarqueV & i & .Visible = False
    SaisieNvoClt.LabelMoteurV & i & .Visible = False
    SaisieNvoClt.MoteurV & i & .Visible = False
Next i
    
'H2: Le client possède deux voitures
    ElseIf SaisieNvoClt.NbVoiture = "2" Then
  'Affichage données voitures 1 et 2
For j = 1 to 2
    SaisieNvoClt.Voiture & j & .Visible = True
    SaisieNvoClt.LabelMatriculeV & j & .Visible = True
    SaisieNvoClt.MatriculeV & j & .Visible = True
    SaisieNvoClt.LabelMarqueV & j & .Visible = True
    SaisieNvoClt.MarqueV & j & .Visible = True
    SaisieNvoClt.LabelMoteurV & j & .Visible = True
    SaisieNvoClt.MoteurV & j & .Visible = True
Next j
  
  'Ne pas afficher données voiture 3
    SaisieNvoClt.Voiture3.Visible = False
    SaisieNvoClt.LabelMatriculeV3.Visible = False
    SaisieNvoClt.MatriculeV3.Visible = False
    SaisieNvoClt.LabelMarqueV3.Visible = False
    SaisieNvoClt.MarqueV3.Visible = False
    SaisieNvoClt.LabelMoteurV3.Visible = False
    SaisieNvoClt.MoteurV3.Visible = False
  
'H3: Le client possède trois voitures
'Afficher données voitures 1, 2 et 3
    Else: For k = 1 to 3
    SaisieNvoClt.Voiture & k & .Visible = True
    SaisieNvoClt.LabelMatriculeV & k & .Visible = True
    SaisieNvoClt.MatriculeV & k & .Visible = True
    SaisieNvoClt.LabelMarqueV & k & .Visible = True
    SaisieNvoClt.MarqueV & k & .Visible = True
    SaisieNvoClt.LabelMoteurV & k & .Visible = True
    SaisieNvoClt.MoteurV & k & .Visible = True
           Next k   
     
 End If

Tiens nous au courant.

Bonne soirée

Edition : au vu de ton code ici, celui ci-dessus devrait fonctionner!
 
Dernière édition:
Re : Problème boucle

Bonsoir Soenda,

Si le client possède 2 voitures, la une et la deux, que va contenir ta variable n ? 12?

A quel moment dis-tu "false"? "true" c'est sous entendu? Dans quel partie du code?

Tu peux expliquer ton code?

Excel-LentAvideDeComprendreEtApprendre
 
Re : Problème boucle

Re, le fil

Le code corrigé (Merci myDearFriend)

Code:
With SaisieNvoClt

    For j=1 to 3

        n = .NbVoiture

        Controls("Voiture" & j).Visible = (j <= n)
        Controls(".LabelMatriculeV" & j).Visible = (j <= n)
        Controls(".MatriculeV" & j).Visible = (j <= n)
        Controls(".LabelMarqueV" & j).Visible = (j <= n)
        Controls(".MarqueV" & j).Visible = (j <= n)
        Controls(".LabelMoteurV" & j).Visible = (j <= n)
        Controls(".MoteurV" & j).Visible = (j <= n)
    
    next
End with
A plus
 
Re : Problème boucle

Re,
Bonsoir Excel-Lent, Soenda,

Voici une autre proposition (pas testé):

Code:
Sub test()
'H1: Le client possède une voiture
If SaisieNvoClt.NbVoiture = "1" Then
  Call AffCachCtrl(Array(True, False, False))
'H2: Le client possède deux voitures
ElseIf SaisieNvoClt.NbVoiture = "2" Then
  Call AffCachCtrl(Array(True, True, False))
'H3: Le client possède trois voitures
Else
  Call AffCachCtrl(Array(True, True, True))
End If

End Sub
Sub AffCachCtrl(Valeur As Variant)
For i = 1 To 3
  SaisieNvoClt.Controls("Voiture" & i).Visible = Valeur(i - 1)
  SaisieNvoClt.Controls("LabelMatriculeV" & i).Visible = Valeur(i - 1)
  SaisieNvoClt.Controls("MatriculeV" & i).Visible = Valeur(i - 1)
  SaisieNvoClt.Controls("LabelMarqueV" & i).Visible = Valeur(i - 1)
  SaisieNvoClt.Controls("MarqueV" & i).Visible = Valeur(i - 1)
  SaisieNvoClt.Controls("LabelMoteurV" & i).Visible = Valeur(i - 1)
  SaisieNvoClt.Controls("MoteurV" & i).Visible = Valeur(i - 1)
Next
End Sub
 
Re : Problème boucle

Re

Désolé, j'avais oublié le point devant chaque Controls
(on est dans un bloc With)

Code:
[SIZE=3][COLOR=Red][B].[/B][/COLOR][/SIZE]Controls("Voiture" & j).Visible = (j <= n)
[B][SIZE=3][COLOR=Red].[/COLOR][/SIZE][/B]Controls(".LabelMatriculeV" & j).Visible = (j <= n)
[SIZE=3][B][COLOR=Red].[/COLOR][/B][/SIZE]Controls(".MatriculeV" & j).Visible = (j <= n)
[COLOR=Red][B][SIZE=3].[/SIZE][/B][/COLOR]Controls(".LabelMarqueV" & j).Visible = (j <= n)
[SIZE=3][B][COLOR=Red].[/COLOR][/B][/SIZE]Controls(".MarqueV" & j).Visible = (j <= n)
[B][SIZE=3][COLOR=Red].[/COLOR][/SIZE][/B]Controls(".LabelMoteurV" & j).Visible = (j <= n)
[SIZE=3][B][COLOR=Red].[/COLOR][/B][/SIZE]Controls(".MoteurV" & j).Visible = (j <= n)
Mea culpa

A plus

Précision : il faut mettre un point devant chacune de ces lignes,
on ne change pas le reste du code.

Bonsoir skoobi, que je n'avais pas vu
 
Dernière édition:
- 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

Retour