Emplacement et domaine des variables VBA
Répondre à la discussion
Affichage des résultats 1 à 9 sur 9

Emplacement et domaine des variables VBA



  1. #1
    invite2313209787891133
    Invité

    Emplacement et domaine des variables VBA


    ------

    Bonjour à tous

    J'utilise VBA depuis quelques années, pourtant il y a un truc élémentaire que je n'ai jamais vraiment compris: Comment fonctionne cette histoire de zone de validité des variables.

    Je donne un petit exemple fictif, pour illustrer le problème : J'ai un tableau de 6 lignes et 2 colonnes sur une feuille excel.
    Je récupère les valeurs de la 1ere colonne pour les entrer dans un userform; parallèlement je remplie une variable de type tableau:

    Code:
    Sub Bouton1_QuandClic()
    
    ligne = 1
    Do While Cells(ligne, 1) <> ""
    UserForm1.ComboBox1.AddItem (Cells(ligne, 1))
    ReDim tableau(ligne)
    tableau(ligne) = Cells(ligne, 2).Value
    ligne = ligne + 1
    
    Loop
    
    UserForm1.Show
    
    End Sub
    J'affiche un userform avec un combobox et un bouton valider qui lance ce code:

    Code:
    Private Sub CommandButton1_Click()
    
    MsgBox ("valeurs associées : " & tableau(ligne))
    
    End Sub

    Où dois je déclarer mes variables pour que le contenu de tableau soit exploitable ?
    Merci d'avance

    -----

  2. #2
    invite4492c379

    Re : Emplacement et domaine des variables VBA

    Hello,

    ta question porte sur la portée des variables. Dans ton cas il y a trois options :

    * niveau procedure

    tu déclares ta variable après le sub, cette variable ne sera disponible que dans la procédure

    * niveau module = déclaration en private, par défaut
    tu déclares ta variable après l'option explicit et ton premier sub. Elle sera disponible dans tout le module.

    * niveau projet, = déclaration en public
    au même endroit que précedemment, tu ajoutes public et cette variable sera visible dans tout le projet.

    Tu peux jeter un coup d'oeil sur http://www.mdf-xlpages.com/modules/s....php?itemid=51 ou sur http://mhubiche.developpez.com/Access/variables/#LIII pour plus d'infos.

    Ne pas déclarer les varaibles est fortement déconseillé. Utiliser des variables globales (niveau module et projet)est déconseillé également, il vaut mieux passer les données par paramètres.

  3. #3
    invite2313209787891133
    Invité

    Re : Emplacement et domaine des variables VBA

    Merci pour ta réponse. Je pense que le fond du problème c'est que je n'ai jamais pris la peine de lire attentivement de la documentation comme celle que tu m'as fournie... Je vais donc potasser un peu tout ça.

  4. #4
    invite2313209787891133
    Invité

    Re : Emplacement et domaine des variables VBA

    Je continue avec mon exemple (car je découvre les variables type tableau également).

    j'utilise ce code pour alimenter mon tableau à partir d'un tableau format excel sur une feuille

    Code:
    Public tableau(2000, 2) As String
    Public ligne As Integer
    
    Sub Bouton1_QuandClic()
    
    ligne = 1
    Do While Cells(ligne, 1) <> ""
    
    UserForm1.ComboBox1.AddItem (Cells(ligne, 1))
    
    For i = 1 To 2
    tableau(ligne, i) = Cells(ligne, i + 1).Value
    Next i
    
    ligne = ligne + 1
    
    Loop
    
    UserForm1.Show
    
    End Sub
    Le problème c'est que ce n'est pas très "élégant": Je préférerai utiliser une taille de tableau variable, qui s'ajusterait à la taille de ma zone de données (et si un jour je monte à plus de 2000 lignes ça ne marchera pas) ; seulement quand je fais
    Code:
    redim preserve tableau (ligne,2)
    ça ne fonctionne pas.
    Comment dois je m'y prendre ?
    Dernière modification par invite2313209787891133 ; 27/09/2011 à 21h37.

  5. A voir en vidéo sur Futura
  6. #5
    invite4492c379

    Re : Emplacement et domaine des variables VBA

    Re,

    D'après http://silkyroad.developpez.com/vba/tableaux/#LIII, la syntaxe serait plutôt

    Code:
    redim preserve ligne(2)
    Mais peut-être pourrais-tu nous en dire plus sur l'erreur que tu obtiens ?

  7. #6
    invite2313209787891133
    Invité

    Re : Emplacement et domaine des variables VBA

    Bonjour

    Non, le nom de la variable est "tableau", et il s'agit d'une variable de type tableau à 2 dimensions (1 dimension égale au nombre de lignes et une dimension égale à 2 car 2 colonnes sur le tableau présent sur la feuille excel).
    Si je déclare la variable avec une taille fixe ça fonctionne, mais je voudrais dimensionner la taille de la variable en fonction du nombre de données.

  8. #7
    invite4492c379

    Re : Emplacement et domaine des variables VBA

    Malheureusement tu ne pourras redimensionner que la dernière dimension ... Dans ton cas si le nombre de colonnes est constant, il va falloir inverser les dimensions. Tu auras un tableau(colonne, ligne) et la tu pourras redimensionner suivant le nombre de lignes.

    Cela est expliqué dans http://silkyroad.developpez.com/vba/tableaux/#LII-C

    Lorsque vous souhaitez agrandir un tableau dynamique tout en conservant les données existantes, seule la dernière dimension peut être redimensionnée

  9. #8
    invite8666d089

    Re : Emplacement et domaine des variables VBA

    En fait c'est assez simple. Il faut déterminer dans la macro le nombre de lignes et de colonnes utilisées.
    Code:
    Option Explicit
    
    Private Sub Bouton1_Quandclic_Click()
        Dim I As Integer 'Colonnes
        Dim J As Integer 'Lignes
        Dim Tableau() As Variant
        
        J = ActiveSheet.UsedRange.Rows.Count
        I = ActiveSheet.UsedRange.Columns.Count
        MsgBox "Nb colonnes = " & I & " - Nb Lignes = " & J
        
        ' Redim Preserve n'est utile que si on veut protéger les données entrées
        ' sinon on utilise tout simplement Redim() de façon dynamique
        ReDim Tableau(I, J)
        ' Maintenant, il suffit d'entrer dans le tableau le contenu des cellules
    End Sub
    A noter qu'on peut aussi connaître le nombre de lignes, mais pas le nombre de colonnes par :
    J = ActiveSheet.UsedRange.SpecialC ells(xlCellTypeLastCell).Row

  10. #9
    invite2313209787891133
    Invité

    Re : Emplacement et domaine des variables VBA

    La solution de Dormeur74 me plait bien, c'est simple et bien trouvé.
    Merci.

Discussions similaires

  1. Domaine de définition des fonctions sinus/arcsin à plusieurs variables
    Par inviteaf160b24 dans le forum Mathématiques du supérieur
    Réponses: 4
    Dernier message: 26/09/2011, 21h49
  2. caser des variables dans un emplacement bien précis au niveau des banques...
    Par invite4cca36da dans le forum Logiciel - Software - Open Source
    Réponses: 0
    Dernier message: 05/05/2010, 13h47
  3. Domaine de définition fonction de plusieurs variables, L2 PC
    Par invitea70da2ae dans le forum Mathématiques du supérieur
    Réponses: 3
    Dernier message: 05/10/2009, 17h51
  4. Influence des variables d'une fonction à 2 variables
    Par invitee2a62e92 dans le forum Mathématiques du supérieur
    Réponses: 2
    Dernier message: 18/07/2008, 01h54
  5. Intégration dans le domaine de Fourier, avec des variables discrètes
    Par monnoliv dans le forum Mathématiques du supérieur
    Réponses: 29
    Dernier message: 18/02/2005, 14h20