[VBA]déclarer var1,var2,var3...var100 en1Dim?

Résolu/Fermé
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 - 23 août 2010 à 16:01
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 - 25 août 2010 à 11:09
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 !

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.
1
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 32
23 août 2010 à 16:15
D'ou les tableaux :p
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
Modifié par lml-mike le 23/08/2010 à 18:27
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 ;)
0
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.
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
24 août 2010 à 11:49
Je peux pas les nommer pareil, il me dit "ambigous name"...De plus je ne vois pas la propriété index dans les propriétés de ma checkbox ... je dois m'y prendre mal :x
0
Pardon, mes conseils concernaient le VB, mais pas le VBaaaahhhhh!
J'avais surement pas pris le temps de lire le sujet :)
0
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 32
24 août 2010 à 13:29
Bonjour,

Voilà un sujet qui pourra peut être t'aider :

https://forums.commentcamarche.net/forum/affich-2826090-vba-checkbox-et-groupe-de-controle

Cdlt.
0
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 32
24 août 2010 à 13:43
un petit exemple en supposant que les checkbox sont nommées checkbox1; checkbox2 etc ...:

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.
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 750
24 août 2010 à 14:01
Salut,
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
0
lml-mike Messages postés 453 Date d'inscription vendredi 16 février 2007 Statut Contributeur Dernière intervention 18 novembre 2018 120
25 août 2010 à 10:59
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 :

' 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 !!!
0
nirG95 Messages postés 292 Date d'inscription lundi 21 avril 2008 Statut Membre Dernière intervention 15 décembre 2010 32
25 août 2010 à 11:09
Au plaisir ! Bonne continuation !

Cdlt.
0