IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

déclarer de nombreuses variables


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut déclarer de nombreuses variables
    Bonjour,

    Merci d'avance pour votre aide

    Je me posais la question s'il existait un moyen de déclarer plusieurs variables DIM.
    Je m'explique, dans mon projet j'ai 50 DIM à déclarer du style S1, S2,....

    Dès lors au lieu d'écrire DIM S1, S2,... as string (par exemple).
    N'y a t'il pas moyen de faire une sorte de boucle ?

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .net - Office - Quadiant
    Inscrit en
    Février 2020
    Messages
    624
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : Développeur .net - Office - Quadiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Février 2020
    Messages : 624
    Par défaut
    Bonjour,

    Si les données dans tes variables sont du même type tu devrais utiliser les tableaux : https://silkyroad.developpez.com/vba/tableaux/

    ONTAYG

  3. #3
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    Si j'ai bien compris, quelque chose de ce genre.
    Mais j'ai un message d'erreur à la ligne du S11 : variable non définie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub MonPremierTableau()
        'Définit la taille du tableau et le type de données.
        Dim NomTableau(0) As String
        Dim i As Integer
     
        'Alimente les éléments du tableau
        NomTableau(0) = "S"
    '    NomTableau(1) = "b"
    '    NomTableau(2) = "c"
     
        'Boucle sur les éléments du tableau pour lire leur contenu
        For i = 0 To 50
            Debug.Print NomTableau(0) & i
        Next i
     
     
    S11 = Worksheets("feuil1").Range("A1").Value
     
    Debug.Print S11
     
    End Sub

  4. #4
    Expert confirmé
    Avatar de jurassic pork
    Homme Profil pro
    Bidouilleur
    Inscrit en
    Décembre 2008
    Messages
    4 238
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Bidouilleur
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2008
    Messages : 4 238
    Par défaut
    Hello,
    Citation Envoyé par rossemma Voir le message
    Si j'ai bien compris, quelque chose de ce genre.
    je pense que tu n'as pas bien compris.

    Voici un exemple, qui j'espère, t'aidera à mieux comprendre comment fonctionne un tableau de chaînes :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub TestTableau()
    Dim S(50) As String 'Définit un tableau de 50 chaînes.
    S(11) = "MaChaine11" ' Affecte une chaîne au 11ème élément du tableau de chaînes.
    Debug.Print S(11) ' affiche le 11ème élément du tableau de chaînes.
    End Sub
    Ami calmant, J.P

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Hello,

    Il y a 2 façon de travailler avec des tableaux.

    1) Les tableaux statiques dont la taille est fixe. A la déclaration, on précise l'indice maximum.
    Par défaut, les tableaux sont indicés à partir de zéro, donc la taille du tableau sera indice max + 1.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim MonTableau(4) As Integer    '// Déclare un tableau de 5 entiers.
    MonTableau(2) = 25      '// Assigne 25 au 3e élément
    MonTableau(10) = 32    '// Erreur: Tentative d'accéder à un élément inexistant.
    2) Les tableaux dynamiques, dont on peut altérer la taille à l'execution. On les déclare sans indice maximal, et on utilise l'instruction Redim pour les dimensionner.
    Les règles d'indices, nombre d'elements, d'accès aux elements restent identiques au premier cas.
    Exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim MonTableau() As Integer    '// Déclare un tableau dynamique
    Redim MonTableau(4)    '// Redimentionne le tableau à 5 element.
    MonTableau(2) = 25      '// Assigne 25 au 3e élément
    MonTableau(10) = 32    '// Erreur: Tentative d'accéder à un élément inexistant.
    Concernant ton erreur, la variable S11 n'est pas déclarée.
    D'ailleur je ne vois pas ce que vient faire la lecture d'une cellule dans une fonction qui manipule un tableau. C'est du non-sens pure et simple.

  6. #6
    Membre émérite
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2022
    Messages
    685
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Octobre 2022
    Messages : 685
    Par défaut
    Bonjour,

    attention en passant "Dim S1, S2,... as String" est incorrect si tu veux déclarer S1, S2 ... en type string. Là tu déclare S1, S2... comme variant et seulement le dernier en string.

    Dans le genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim i, j As Long
    i = "A"
    j = "B"
    ne va planter que sur l'affectation de j

    La bonne syntaxe est Dim S1 as String, S2 as String... donc encore plus fastidieux et encore plus de raisons pour préférer un tableau !

  7. #7
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim SX_ As Object
    Property Get Sx(S As String) As StringIf TypeName(SX_) = "Nothing" Then Set SX_ = CreateObject("Scripting.Dictionary")
    Sx = SX_(S)
    End Property
    Property Let Sx(S As String, Value As String)
    If TypeName(SX_) = "Nothing" Then Set SX_ = CreateObject("Scripting.Dictionary")
     SX_(S) = Value
    End Property
    Sub test()
    Sx("S1") = "toto"
    Sx("S11") = "titi"
    Debug.Print Sx("S1"), Sx("S11")
    End Sub

  8. #8
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    @Thumb down:
    Heu ... C'est quoi ce code ?

    Un dictionnaire n'a rien à voir avec un tableau.
    Les variables globales posent énormément de problèmes et sont à fuir comme la peste.
    Il y a mieux à faire que la fonction Typename() pour tester si une instance existe.
    Les propriétés Get/Let violent le SRP (https://en.wikipedia.org/wiki/Single...lity_principle).

    Bref, à ne pas faire.

  9. #9
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Dans la question il n'est pas question de tableau, même si un tableau résou le problème

    Ma méthode est certe amusante mais elle répond également à la demande !😉

    Pour le reste j'ai absolument rien compris !

  10. #10
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    Citation Envoyé par Thumb down Voir le message
    Ma méthode est certe amusante mais elle répond également à la demande !😉
    Naïvement oui.
    Malheureusement ce n'est pas un code correct, pour les 3 derniers points que j'ai mentionné.

  11. #11
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    Merci à tous pour votre aide, j'ai réussi à déclarer ma variable en tableau.

    pour afficher les résultats je cherche à faire une boucle, mais je ne sais comment débuter.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    DM.Range("B4").Value = VAK(1)
    DM.Range("D4").Value = VAK(2)
    DM.Range("F4").Value = VAK(3)
    je voudrais faire une boucle sur la colonne, la ligne et le numéro de variable afin de simplifier mon code et ne pas avoir 50 lignes.

  12. #12
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For i = 1 To 50
        DM.Cells(4, (i * 2)).Value = VAK(i)' Ligne 4 colonne (I * 2)
    Next

  13. #13
    Membre éclairé
    Homme Profil pro
    Divers
    Inscrit en
    Février 2017
    Messages
    295
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Divers

    Informations forums :
    Inscription : Février 2017
    Messages : 295
    Par défaut
    sorry ceci sera plus complet :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    DM.Range("B4").Value = VAK(1)
    DM.Range("D4").Value = VAK(2)
    DM.Range("F4").Value = VAK(3)
    DM.Range("B5").Value = VAK(4)
    DM.Range("D5").Value = VAK(5)
    DM.Range("F5").Value = VAK(6)
    DM.Range("B6").Value = VAK(7)
    DM.Range("D6").Value = VAK(8)
    DM.Range("F6").Value = VAK(9)
    etc...

  14. #14
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Test()
    Dim VAK(50) As Integer,I as Integer
    For i = 0 To 50
         VAK(i) = i
    Next
    Dim L As Integer
    L = 4
    For i = 0 To 50 Step 3
        Cells(L, "B").Value = VAK(i)
        Cells(L, "D").Value = VAK(i + 1)
        Cells(L, "F").Value = VAK(i + 2)
        L = L + 1
    Next
    End Sub

  15. #15
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    1 508
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 1 508
    Par défaut
    @rossemma
    Je te conseille vivement de trouver un bon tutoril sur VBA, car visiblement tu ne possèdes pas les bases.

Discussions similaires

  1. Déclarer, affecter une variable dans une boucle cmd ?
    Par genius4evers dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/08/2016, 23h00
  2. Réponses: 12
    Dernier message: 20/11/2015, 12h52
  3. Initialiser nombreuses variables par une boucle
    Par Invité dans le forum Langage
    Réponses: 2
    Dernier message: 05/02/2015, 22h48
  4. [XL-97] Déclarer un tableau variable dans un filtre élaboré
    Par monteverest dans le forum Excel
    Réponses: 4
    Dernier message: 20/09/2014, 11h29
  5. performances nombreuses variables session
    Par philippe281281 dans le forum Langage
    Réponses: 8
    Dernier message: 21/06/2006, 15h10

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo