Amélioration d'un code VBA [Résolu/Fermé]

Signaler
-
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
-
Bonjour a toutes et tous, Forum Bonjour

Serait'il possible svp d'optimiser le code ci-dessous afin d'éviter le répètitif

Je vous souhaite une bonne journée

Cordialement Ray

   
For i = 2012 To 2030
ComboBox1.AddItem i
Next i
ComboBox1.Text = Year(Now)

Dim An As Long, Sp As Long: Sp = 19
An = ComboBox1.Text

For i = 1 To 12
If i = 2 Then Sp = 22
If i = 3 Then Sp = 26
If i = 4 Then Sp = 21
If i = 5 Then Sp = 24
If i = 6 Then Sp = 23
If i = 7 Then Sp = 22
If i = 8 Then Sp = 28
If i = 9 Then Sp = 22
If i = 10 Then Sp = 22
If i = 11 Then Sp = 25
If i = 12 Then Sp = 22

Label483.Caption = Label483.Caption & Space(Sp) & An
Next i

4 réponses

Messages postés
16491
Date d'inscription
lundi 12 septembre 2005
Statut
Contributeur
Dernière intervention
21 juillet 2021
3 200
Bonjour

Dim i as integer

Dim An As integer, Sp As byte
An = ComboBox1

For i =1 to 12
Sp=choose(i,22,26,21 etc)
etc...

mais je n'ai pas compris pourquoi sp=19 dans les déclarations
et pourquoi tu mets l'année (an) en texte
Michel
2
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 65492 internautes nous ont dit merci ce mois-ci

Salut Michel_m

j'ai adapter a mon programme et j'ai regarder l'aide pour (choose) je ne connaissais pas
bon en tout cas ca fonctionne

Merci pour ton aide et ton savoir partagé

Cordialement Ray
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 627
Bonjour,

Une variante à la proposition de Michel (Salut!), en passant par un Array :

Dim An As Integer, i As Byte, Espaces()

Espaces = Array(19, 22, 26, 21, 24, 23, 22, 28, 22, 22, 25, 22)
An = Year(Now)
For i = 0 To 11
   Label1.Caption = Label1.Caption & Space(Espaces(i)) & An
Next i


Sp = 19 dans les déclarations doit être du à la première valeur que tu souhaites donner à Sp. Je l'ai donc mis en premier dans l'Array.

je la refait après dejeuner
te tient au courant
merci bon app

Ray
Re pijaku

je fais tourne avec ce code et rien ne s'affiche dans mon Label

et je n'ai pas d'erreur

quand je reprends mon code ca fonctionne ainsi que celui de Michel_m

pige pas bien




For i = 2012 To 2030
ComboBox1.AddItem i
Next i
ComboBox1.Text = Year(Now)

Dim An As Integer, Espaces() As Byte ' i déja déclarer

Espaces = Array(19, 22, 26, 21, 24, 23, 22, 28, 22, 22, 25, 22)

An = Year(Now)

MsgBox An ' = 2013 ça c'est bon

For i = 0 To 11

Label483.Caption = Label483.Caption & Space(Espaces(i)) & An

Next i
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 627
Le principal est que tu t'en sortes. Peu importe le code utilisé...
Celui de Michel, par ailleurs, fonctionne très bien, le mien n'en est qu'une variante.

Cependant, ça me turlupine, pour rester poli...
Dans tes déclarations, l'erreur vient peut être de là, tu déclares Espaces() As Byte. En fait, tu dois déclarer tes variables comme ceci :
Dim An As Integer, Espaces()

Ce qui donne :
Dim An As Integer, Espaces()

Espaces = Array(19, 22, 26, 21, 24, 23, 22, 28, 22, 22, 25, 22)
An = Year(Now)
For i = 0 To 11
   Label483.Caption = Label483.Caption & Space(Espaces(i)) & An
Next i


Mais bon, comme dis + haut, l'essentiel est que ça fonctionne.
Bonne continuation
Re

Ne te turlupine plus, c'est bon tu a raison l'erreur venait bien de la déclaration

pourquoi car tout a l'heure j'avais une erreur a propos de (i) normal puisque je l'avais déja de déclarer

et modifiant ton code pour ne plus avoir l'erreur engendre par (i) j'ai modifier le code "mal" d'ou l'erreur

j'espère que tu a encore tout tes cheveux LOL

donc c'est bon ca fonctionne bien merci

Comme tu m'a proposer un code pour m'aider, la moindre des choses est d'au moins l'essayer.
bon, pas de bol j'ai quelques peu foiré, l'essentiel ça marche également

Merci a toi pour ton aide et pour ton temps

bonne après midi a toi

Bien cordialement Raympnd
Messages postés
12251
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
17 mars 2021
2 627
Pas de souci.
Bonne après midi également.
A+
Franck
Salut Michel et pikaju

Merci pour vos réponses c'est sympa a vous deux

ci-joint le bandeau que je souhaite réaliser

http://www.cjoint.com/?0LkiW6lJFTi

Donc Sp=19 est pour placer Janv pou ne pas qu'il colle au gauche de l'USF

le petit Label rose sera transparent, je l'ai rendu visible pour l'instant

et ci dessous le code qui m'a permis de faire le bandeau

c'est pôurquoi je souhaiterai optimiser tout ça car c'est pas terrible

Merci a vous pour les codes je vais essayer ça dès mon retour RDV toubib

encore merci a plus tard et une bonne journée a vous

Cdlt Raymond


For i = 2012 To 2030
ComboBox1.AddItem i
Next i
ComboBox1.Text = Year(Now)

Dim An As Long, Sp As Long: Sp = 19
An = ComboBox1.Text

For i = 1 To 12
If i = 2 Then Sp = 22
If i = 3 Then Sp = 26
If i = 4 Then Sp = 21
If i = 5 Then Sp = 24
If i = 6 Then Sp = 23
If i = 7 Then Sp = 22
If i = 8 Then Sp = 28
If i = 9 Then Sp = 22
If i = 10 Then Sp = 22
If i = 11 Then Sp = 25
If i = 12 Then Sp = 22

Label483.Caption = Label483.Caption & Space(Sp) & An
Next i

'*** AFFICHAGE DES N°s ET DES MOIS DE L'ANNEE
Dim Numéro As String, Mois As String

Numéro = " 1" & Space(11) & "2" & Space(11) & "3" & Space(11) & "4" & Space(11) & "5" & Space(11) & "6" & Space(11) & "7" & Space(11) & "8" & Space(11) & "9" _
& Space(11) & "10" & Space(9) & "11" & Space(9) & "12"

Mois = " Janv" & Space(6) & "Févr" & Space(7) & "Mars" & Space(6) & "Avr" & Space(8) & "Mai" & Space(7) & "Juin" & Space(7) & "Juil" & Space(8) & "Aoùt" & Space(6) _
& "Sept" & Space(7) & "Oct" & Space(8) & "Nov" & Space(7) & "Déc"

Label455.Caption = Numéro
Label467.Caption = Mois
http://cjoint.com/?0Lkjd6XMeDY

le lien est cette fois