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

Problème boucle

  • 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,

@ Excel-lent
A quel moment dis-tu "false"? "true"
1)
VarBooléenne = (1=2) ==> VarBooléenne = False
VarBooléenne = (2=2) ==> VarBooléenne = True
Sans problème connu...

2)
Apparament on s'est planté car
.Voiture & j & .Visible = booléen
ne passe pas.
je regarde ce point

A plus
 
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

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…