[VBA]déclarer var1,var2,var3...var100 en1Dim?
Résolu
lml-mike
Messages postés
487
Statut
Contributeur
-
nirG95 Messages postés 319 Statut Membre -
nirG95 Messages postés 319 Statut Membre -
Bonjour,
Est-il possible de déclarer plusieurs variables en public avec qu'une seule dim quand ils se suivent avec un numéro incrémental après ?
Merci beaucoup !
Est-il possible de déclarer plusieurs variables en public avec qu'une seule dim quand ils se suivent avec un numéro incrémental après ?
Merci beaucoup !
4 réponses
Bonjour,
Non ce n'est pas possible.
Et si c'était possible, alors ce serait ridicule.
Pourquoi ne pas utiliser un tableau de variables ?
Cordialement, M.
Non ce n'est pas possible.
Et si c'était possible, alors ce serait ridicule.
Pourquoi ne pas utiliser un tableau de variables ?
Cordialement, M.
nirG95
Messages postés
319
Statut
Membre
32
D'ou les tableaux :p
En fait j'ai une 40aine de checkbox avec des variables stockées dedans dans un formulaire.
quand je valide ce formulaire, il me dit : "si la première checkbox est cochée, je place la variable dans un tableau", et fait pareil pour toutes les autres checkbox.
C'est présenté sous forme de checkbox pour un utilisateur lambda qui doit choisir parmis par cases à cocher divers options.
Tant pis, je ferais :
public var1, var2, var3, var4, var5...var38
Merci de l'info ;)
quand je valide ce formulaire, il me dit : "si la première checkbox est cochée, je place la variable dans un tableau", et fait pareil pour toutes les autres checkbox.
C'est présenté sous forme de checkbox pour un utilisateur lambda qui doit choisir parmis par cases à cocher divers options.
Tant pis, je ferais :
public var1, var2, var3, var4, var5...var38
Merci de l'info ;)
Bonjour,
Dans ce cas, le mieux est de nommer tous les checkbox pareil, et te servir de la propriété index.
Tu auras donc un genre de "tableau de checkbox", associé à un tableau de variables.
Ce sera surement beaucoup plus facile à gérer ; ca remplace tes 40 lignes de vérification de checkbox par une simple boucle de 3 lignes...
Cordialement, M.
Dans ce cas, le mieux est de nommer tous les checkbox pareil, et te servir de la propriété index.
Tu auras donc un genre de "tableau de checkbox", associé à un tableau de variables.
Ce sera surement beaucoup plus facile à gérer ; ca remplace tes 40 lignes de vérification de checkbox par une simple boucle de 3 lignes...
Cordialement, M.
Bonjour,
Voilà un sujet qui pourra peut être t'aider :
https://forums.commentcamarche.net/forum/affich-2826090-vba-checkbox-et-groupe-de-controle
Cdlt.
Voilà un sujet qui pourra peut être t'aider :
https://forums.commentcamarche.net/forum/affich-2826090-vba-checkbox-et-groupe-de-controle
Cdlt.
un petit exemple en supposant que les checkbox sont nommées checkbox1; checkbox2 etc ...:
voilà le genre, après je ne sais pas comment tu attribus tes variable à tes checkbox.
Cdlt.
dim Controle as control
//pour chaques controls de mon formulaire
For Each Controle In me.Controls
//si les 8 premiers caractère de mon controle vaut "checkbox"
If Left(Controle.Name, 8) = "checkbox" Then
//si mon controle est coché
if Controle.value = true Then
** Je place ma variable dans mon tableau
end if
end if
Next Controle
voilà le genre, après je ne sais pas comment tu attribus tes variable à tes checkbox.
Cdlt.
Salut,
Ou alors s'ils sont nommés différemment :
sources : utiliser les controles dans un userform en VBA Excel
Ou alors s'ils sont nommés différemment :
Dim Ctrl As Control
For Each Ctrl In Me.Controls
If TypeOf Ctrl Is MSForms.CheckBox Then MsgBox Ctrl.Object.Value
Next Ctrl
sources : utiliser les controles dans un userform en VBA Excel
Tout fonctionne à merveille !!!
Merci a NirG95 pour sa réponse très astucieuse !
Maintenant j'ai la possibilité de faire mon tableau en fonction de chaque case cochée de façon niquel ! Voici le code :
Merci encore !!!
Merci a NirG95 pour sa réponse très astucieuse !
Maintenant j'ai la possibilité de faire mon tableau en fonction de chaque case cochée de façon niquel ! Voici le code :
' code de deux types de checkbox :
Public Sub Choix1_Click()
prixtot = prixtotal.Value
prix1 = 3
Choix1.Tag = prix1
If Choix1.Value = True Then
prixtot = prixtot + prix1
Else
prixtot = prixtot - prix1
End If
prixtotal.Value = prixtot
End Sub
Public Sub Autre1_Click()
If Autre1.Value = True Then
Message1.Visible = True
Message1b.Visible = True
Text1.Visible = True
Text1.Value = 0
prix_save = prixtotal.Value
Else
Message1.Visible = False
Message1b.Visible = False
Text1.Visible = False
prixtotal.Value = prix_save
End If
End Sub
Public Sub Text1_change()
Dim prix As Single
Dim prixtot As Single
If Text1.Value = "" Then
Exit Sub
Else
prix = Text1.Value
End If
prixtot = prix_save
prixtot2 = prixtot + prix
prixtotal.Value = prixtot2
If Text1.Value = "" Then
Text1.Value = 0
Exit Sub
End If
Text1.Tag = prix
End Sub
Private Sub Text1_Enter()
Text1.Value = ""
End Sub
Public Sub Text1_keypress(ByVal Keyascii As MSForms.ReturnInteger)
If InStr("1234567890.", Chr(Keyascii)) = 0 _
Or InStr(Text1.Value, ".") <> 0 And Chr(Keyascii) = "." Then
Keyascii = 0: Beep
End If
End Sub
'code du bouton valider
Public Sub valider_Click()
Dim choix_sand As Control
Dim choix_sand2 As Control
numpc = Sheets("PC").numpc
Autre1.Tag = Text1.Tag
Autre2.Tag = Text2.Tag
Autre3.Tag = Text3.Tag
Autre4.Tag = Text4.Tag
Autre5.Tag = Text5.Tag
For I = 1 To 38
Set choix_sand = Me.Controls("Choix" & I)
If choix_sand.Value = True Then
prix_conso = choix_sand.Tag
Sheets("PC").Activate
Range("d1").Activate
ligne = Range("d1").Row
col = Range("d1").Column
While Cells(ligne, col).Value <> numpc
ligne = ligne + 1
Wend
Cells(ligne, col).Activate
ActiveCell.Offset(0, 4).Activate
While ActiveCell.Value <> ""
ActiveCell.Offset(0, 1).Activate
Wend
ActiveCell.Value = Time
ActiveCell.Offset(1, 0).Activate
If I <= 26 Then
ActiveCell.Value = "Sandwich"
ElseIf I <= 32 Then
ActiveCell.Value = "Salade"
ElseIf I <= 34 Then
ActiveCell.Value = "Pizza"
ElseIf I <= 36 Then
ActiveCell.Value = "Pâtes"
ElseIf I <= 38 Then
ActiveCell.Value = "Frites"
End If
ActiveCell.Offset(1, 0).Activate
ActiveCell.Value = prix_conso
ActiveCell.Offset(1, 0).Activate
End If
Next
For J = 1 To 5
Set choix_sand2 = Me.Controls("Autre" & J)
If choix_sand2.Value = True Then
prix_conso = choix_sand2.Tag
Sheets("PC").Activate
Range("d1").Activate
ligne = Range("d1").Row
col = Range("d1").Column
While Cells(ligne, col).Value <> numpc
ligne = ligne + 1
Wend
Cells(ligne, col).Activate
ActiveCell.Offset(0, 4).Activate
While ActiveCell.Value <> ""
ActiveCell.Offset(0, 1).Activate
Wend
ActiveCell.Value = Time
ActiveCell.Offset(1, 0).Activate
If J = 1 Then
ActiveCell.Value = "Sandwich"
ElseIf J = 2 Then
ActiveCell.Value = "Salade"
ElseIf J = 3 Then
ActiveCell.Value = "Pizza"
ElseIf J = 4 Then
ActiveCell.Value = "Pâtes"
ElseIf J = 5 Then
ActiveCell.Value = "Frites"
End If
ActiveCell.Offset(1, 0).Activate
ActiveCell.Value = prix_conso
ActiveCell.Offset(1, 0).Activate
End If
Next
Unload Me
End Sub
Merci encore !!!