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

Simplifier un code repetitif

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

SSIAP2

XLDnaute Occasionnel
Bonjour a tous

pouvez vous me donner un petit coup de main sur mon code vba

j'ai à l'origine ce code
Code:
If Sheets("Plans").Range("p2").Value = "OUI" Then
L30.Visible = True
Else
L30.Visible = False
End If
" L" etant le nom de mes label suivie d'un nombre de 30 à 39 mais cela peut evoluer


j'ai dans ma colonne "P2 " à "P41" des texte OUI ou NON le nombre pouvant également évoluer pour évité répeter ce code en plusieur fois j'ai essayer
de faire cette arrangement sans sucée


Code:
Private Sub Worksheet_Activate()
For u = 2 To 41
For t = 30 To 39
If Sheets("Plans").Range("p & u").Offset = ("OUI") Then


Plans.Controls("L" & t).Visible = True
Else
Plans.Controls("L" & t).Visible = False
End If

Next
Next
end sub

j'ai une erreur definie par l'aplication ou l'objet

ai je fais une erreur et comment résoudre ce probleme SVP merci
 
Re : Simplifier un code repetitif

Bonjour Ssiap2 🙂, C'est Range("P" & u) qui est correct 😛...
2 boucles sont inutiles, mais en principe, le nombre de cellules à vérifier devrait être égal au nombre de contrôles... et par exemple pour les cellules 2 à 11, tu utilises les contrôles 30 à 39 avec u + 28... Dans ton code actuel, tu ne vérifie que la cellule P41, le début de la boucle est effacé par la suite 😱...
Enfin, étant dans un code de feuille, j'espère que ton USF est ouvert pour pouvoir le charger 😀...
Et je préferrais "Next u" à Next tout court 🙄...
Bon courage 😎
 
Re : Simplifier un code repetitif

Bonjour JNP et merci pour tes explications

j'ai avancer un petit peut mais cette fois une erreur objet requis

Code:
For u = 2 To 11
For t = 30 To 39
If Sheets("Plans").Range("p" & u).Offset(u) = ("OUI") Then
Plans.Controls("L" & t).Visible = True
Else
Plans.Controls("L" & t).Visible = False
End If

Next
Next

pour information Plans n'est pas mon USF mais ma feuil tous mes controleur sont egalement sur ma feuil

j'ai donc modifier Range ("p & u)

et le nombre e controleur est égale au nombre de ligne.

y a ceci j'ai pas vraiment compris

Dans ton code actuel, tu ne vérifie que la cellule P41, le début de la boucle est effacé par la suite

il ne reste que sa ne marche toujour pas lol

ou ai je encore fauter?
 
Re : Simplifier un code repetitif

Bonjour SSIAP2, JNP,

SSIAP2, je te propose de modifier ton code comme suit :

Code:
With Sheets("Plans")
  For u = 2 To 11
    For t = 30 To 39
      If .Range("p" & u).Offset(u) = ("OUI") Then
         .Controls("L" & t).Visible = True
         Else
         .Controls("L" & t).Visible = False
      End If
    Next t
  Next u
End With

Mais c'est sans garantie, je n'ai pas pu tester.

Par ailleurs, je ne saurais que trop te conseiller d'appliquer les décalages de lignes au sein des boucles afin de clarifier la lecture ou relecture du code. Et comme te le conseille JNP, du moins dans le cas de boucles imbriquées, rappeler l'indice sur le Next correspondant.

Cordialement.

Edit : bonjour pierrejean
 
Re : Simplifier un code repetitif

Bonjour papounet et pierre jean

le probleme perciste donc j'ai fais une PJ courte

a savoir que ces controle sont des Label qui safiche sous condition

si oui un point exclamation s'affiche dans le cas contraire rien ne s'affiche

actuelement avec le code de papou-net j'ai cette erreur

propriete ou methode non géré par cette objet

j'ai donc mis une pj pour vous voyer un peut le probleme je reprecise que les labels et le code sont dans une Feuil et non dans un USF sorte de code evenementiel.

merci pour votre patience
 

Pièces jointes

Re : Simplifier un code repetitif

Eh bien voila, avec un fichier exemple c'est beaucoup plus parlant.

Voici donc le code modifié :

Code:
Private Sub CommandButton2_Click()
With Sheets("Plans")
  For u = 2 To 4
      If UCase(.Range("p" & u)) = ("OUI") Then
         .Shapes("L" & u + 28).Visible = True
         Else
         .Shapes("L" & u + 28).Visible = False
      End If
  Next u
End With
End Sub

Notes que dans ce cas, ce n'est pas "Controls" qu'il faut employer, mais "Shapes" car tu as utilisé des Labels de la barre d'outils Formulaires.

Par ailleurs, la boucle For t ... Next est inutile, et de plus provoque un comportement erratique du programme.

Espérant avoir résolu ton problème.

Cordialement.
 
Re : Simplifier un code repetitif

Re

Merci papou-net il est vrai j'aurais du commencer par la PJ

donc j'ai adapter ton code a mon vrai project

comme ceci

Code:
With Sheets("Plans")
  For u = 30 To 39
      If UCase(.Range("p" & u)) = ("OUI") Then
         .Shapes("L" & u + 28).Visible = True
         Else
         .Shapes("L" & u + 28).Visible = False
      End If
  Next u
j'ai egalement déplacer mes ligne pour qu'il corresponde de 30 a 39 et la beug

argument appel procedure incorrecte

et pourais tu me dire a quoi sa correspond +28 s'il te plait

merci d'avance
 
Re : Simplifier un code repetitif

j'ai egalement déplacer mes ligne pour qu'il corresponde de 30 a 39 et la beug

argument appel procedure incorrecte

et pourais tu me dire a quoi sa correspond +28 s'il te plait

Le +28, dans ton exemple, servait à passer de la variable u (2 par exemple) à l'indice correspondant du label (30 par exemple).

Donc, si tu as modifié les indices de la boucle, il faut bien sûr adapter cette nouvelle valeur (qui peut tout aussi bien être négative).

Restant à ton écoute.

Cordialement.
 
Re : Simplifier un code repetitif

Génial Papounet un gand merci sa marche et j'ai compris le principe.

+28 est la différence qui me sépare entre le numero de mon label a mon numero de ligne c'est a dire

si mon Label est L30 et que la ligne correspondant est 30 la pas besoin de +28 ou autre

en revanche si mon label est L30 et que la ligne correspondant a ma variable est 10 sa fera variable u + 20 pour que le numero du controle et de la ligne soit la même

à sa me fais plaisir

un grand merci a toi et a tous ceux qui mon aider tous au long bonne journée et à bientot
 
- 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

Discussions similaires

Réponses
46
Affichages
3 K
Réponses
7
Affichages
829
Réponses
10
Affichages
1 K
Réponses
3
Affichages
643
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…