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

Résolu
lml-mike Messages postés 449 Date d'inscription   Statut Contributeur Dernière intervention   -  
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 !

4 réponses

  1. swed
     
    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
    1. nirG95 Messages postés 319 Statut Membre 32
       
      D'ou les tableaux :p
      0
  2. lml-mike Messages postés 449 Date d'inscription   Statut Contributeur Dernière intervention   123
     
    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
  3. swed
     
    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
    1. lml-mike Messages postés 449 Date d'inscription   Statut Contributeur Dernière intervention   123
       
      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
    2. swed
       
      Pardon, mes conseils concernaient le VB, mais pas le VBaaaahhhhh!
      J'avais surement pas pris le temps de lire le sujet :)
      0
    3. nirG95 Messages postés 319 Statut Membre 32
       
      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
    4. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
       
      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
  4. lml-mike Messages postés 449 Date d'inscription   Statut Contributeur Dernière intervention   123
     
    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
    1. nirG95 Messages postés 319 Statut Membre 32
       
      Au plaisir ! Bonne continuation !

      Cdlt.
      0