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 :

Tableau avec variables


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Ergonome
    Inscrit en
    Septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Septembre 2018
    Messages : 17
    Points : 22
    Points
    22
    Par défaut Tableau avec variables
    Bonjour à tous,

    Je souhaite sous VBA créer un Array avec le nombre de ligne et de colonne demandé à l'utilisateur, et ensuite remplir ce tableaux par des nombre aléatoires. Voici mon code qui ne fonctionne pas:
    Cela m'indique "constante expression required"

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Dim nrow As Integer
    Dim ncol As Integer
    nrow = InputBox("Type number of rows")
    ncol = InputBox("Type number of columns")
    Dim Arrayvariable(nrow To ncol) As Integer
    Arrayvariable = Rnd()

    Merci pour votre aide

  2. #2
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    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
    14
     
    Sub essai()
    Dim nrow As Integer
    Dim ncol As Integer
    nrow = InputBox("Type number of rows")
    ncol = InputBox("Type number of columns")
    Dim ArrayVariable(): ReDim ArrayVariable(1 To nrow, 1 To ncol)
    For i = 1 To UBound(ArrayVariable)
      For j = 1 To UBound(ArrayVariable, 2)
        ArrayVariable(i, j) = Rnd()
      Next j
    Next i
    [A1].Resize(UBound(ArrayVariable), UBound(ArrayVariable, 2)) = ArrayVariable
    End Sub
    Boisgontier

  3. #3
    Membre averti
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2012
    Messages
    214
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Septembre 2012
    Messages : 214
    Points : 367
    Points
    367
    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
    Dim nrow As Integer
    Dim ncol As Integer
    Dim Arrayvariable() as variant
    nrow = CInt(InputBox("Type number of rows"))
    ncol = CInt(InputBox("Type number of columns"))
     
    ReDim Arrayvariable(1 To nrow, 1 To ncol)
     
    For i = 1 To nrow
        For j = 1 To ncol
            Arrayvariable(i, j) = Rnd()
        Next j
    Next i

  4. #4
    Membre à l'essai
    Femme Profil pro
    Ergonome
    Inscrit en
    Septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Septembre 2018
    Messages : 17
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par boisgontierjacques Voir le message
    Bonjour,

    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 essai()
    Dim nrow As Integer
    Dim ncol As Integer
    nrow = InputBox("Type number of rows")
    ncol = InputBox("Type number of columns")
    Dim ArrayVariable(): ReDim ArrayVariable(1 To nrow, 1 To ncol)
    For i = 1 To UBound(ArrayVariable)
      For j = 1 To UBound(ArrayVariable, 2)
        ArrayVariable(i, j) = Rnd()
      Next j
    Next i
    [A1].Resize(UBound(ArrayVariable), UBound(ArrayVariable, 2)) = ArrayVariable
    End Sub
    Boisgontier
    Merci beaucoup, pourrais tu m'expliquer ce que veut dire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    [A1].Resize(UBound(ArrayVariable), UBound(ArrayVariable, 2)) = ArrayVariable
    Et aussi UBound?

    Merci pour l'aide

  5. #5
    Membre à l'essai
    Femme Profil pro
    Ergonome
    Inscrit en
    Septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Septembre 2018
    Messages : 17
    Points : 22
    Points
    22
    Par défaut
    Citation Envoyé par sogedic Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Dim nrow As Integer
    Dim ncol As Integer
    Dim Arrayvariable() as variant
    nrow = CInt(InputBox("Type number of rows"))
    ncol = CInt(InputBox("Type number of columns"))
     
    ReDim Arrayvariable(1 To nrow, 1 To ncol)
     
    For i = 1 To nrow
        For j = 1 To ncol
            Arrayvariable(i, j) = Rnd()
        Next j
    Next i
    Merci pour l'aide
    Le code ne fonctionne pas ca me marque toujours:constant expression required
    Que signifie le CInt?

    Merci

  6. #6
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Le code ne fonctionne pas ca me marque toujours:constant expression required
    cf PJ

    Boisgontier

  7. #7
    Membre à l'essai
    Femme Profil pro
    Ergonome
    Inscrit en
    Septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Septembre 2018
    Messages : 17
    Points : 22
    Points
    22
    Par défaut
    Ton code à toi fonctionne, c'était l'autre qui ne fonctionnait pas.
    Merci pour le lien c'est top. Car je ne connais pas grand chose encore et du coup ton avant derniere ligne j'ai du mal à comprendre ce que c'est

  8. #8
    Membre chevronné
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Points : 2 156
    Points
    2 156
    Par défaut
    Ubound(ArrayVariable) donne le nb de lignes (pour un Array dimensionné par Dim ArrayVariable(1 to NbLignes,1 to Nbcol)
    Ubound(ArrayVariable,2) donne le nb de colonnes

    Boisgontier

  9. #9
    Membre à l'essai
    Femme Profil pro
    Ergonome
    Inscrit en
    Septembre 2018
    Messages
    17
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 34
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Ergonome

    Informations forums :
    Inscription : Septembre 2018
    Messages : 17
    Points : 22
    Points
    22
    Par défaut
    Merci beaucoup pour tes explications très clair

  10. #10
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par boisgontierjacques Voir le message
    Ubound(ArrayVariable) donne le nb de lignes (pour un Array dimensionné par Dim ArrayVariable(1 to NbLignes,1 to Nbcol)
    Ubound(ArrayVariable,2) donne le nb de colonnes

    Boisgontier
    Bonjour boisgontierjacques
    (Lbound/Ubound)
    je dirais plutot que ca donne la premiere et la derniere ligne ou colonne
    attention a la meprise en fonction de base 0 ou 1
    exemple pour les lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
    Dim tablo(10, 8), tablo2(1 To 10, 1 To 8)
    a = 0
    For i = LBound(tablo) To UBound(tablo): a = a + 1: Next
    MsgBox LBound(tablo) & " to " & UBound(tablo) & " Nblignes= " & a
    a = 0
    For i = LBound(tablo2) To UBound(tablo2): a = a + 1: Next
    MsgBox LBound(tablo2) & " to " & UBound(tablo2) & " Nblignes= " & a
    End Sub
    et pareil pour les colonnes

  11. #11
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 939
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 939
    Points : 28 936
    Points
    28 936
    Billets dans le blog
    53

  12. #12
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 83
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 433
    Points
    12 433
    Par défaut
    Bonjour

    La réponse de boisgontierjacques était parfaite :
    Ce n'est pas un "numéro", que retourne Ubound, mais bel est bien un nombre (une D I M E N S I O N, pour être précis)
    Que l'expression de cette DIMENSION dépende de l'option choisie (base 0 ou base 1) ne change absolument rien à ce principe fondamental.
    Mon intervention ici n'a d'autre but que celui de remettre les pendules à l'heure et ne pas confondre "double patte et patachon".
    Afin que les choses soient plus claires dans tous les esprits ...
    Amitiés à tous.

  13. #13
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par unparia Voir le message
    [...]
    Ce n'est pas un "numéro", que retourne Ubound, mais bel est bien un nombre (une D I M E N S I O N, pour être précis)[...]


    UBound renvoie le plus grand indice d'une dimension d'un tableau, et pas du tout une dimension ni un nombre (de lignes ou de quoi que ce soit d'autre) => il ne sert à rien de crier, Jacques, car c'est bien un numéro que renvoient UBound et LBound.

    Il se fait que, comme précisé par Jacques Boisgontier, pour un tableau de base 1 (il le précise clairement dans son propos), le dernier indice disponible de la dimension 1 du tableau correspond au nombre de lignes dudit tableau. Sans connaître la base du tableau (1, 0 ou n'importe quoi d'autre), UBound ne sert pas à grand chose.

    Dans l'absolu et d'une façon générique, pour connaître le nombre d'indices disponibles dans une dimension d'un tableau sans se tracasser de sa base, on utilise
    UBound - LBound +1. Par exemple, pour la dimension 1 d'un tableau, on utilise UBound(a) - LBound(a) + 1 (que la base soit 0, 1, 1000 ou -20).

    Et il est important à mon avis de connaître l'incidence (ou la non-incidence) de la ligne Option Base* en haut de module, car certains outils du VBA sont insensibles à cette option:
    • VBA.Array (toujours base 0);
    • Split (toujours base 0);
    • Conversion de plage en tableau (toujours base 1);
    • Déclaration de la base lors de la déclaration du tableau (base définie lors de la déclaration).



    * D'où, se méfier des Option de module (sauf pour Option Explicit qui doit être présent au début de tout module VBA, mon billet à ce sujet).

  14. #14
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    Microsoft.Msdn précise que Ubound retourne l'index le plus élevé.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    dim t(5 to 10)
    For i =Lbound(t) to ubound(t) 'for i = 5 to 10
    Next
    Toujours pas de justifications !

    Je commence à en faire autant pour tous les postes invariablement et quelque soit l'auteur.
    Dernière modification par Invité ; 07/10/2018 à 20h02.

  15. #15
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Points : 12 068
    Points
    12 068
    Billets dans le blog
    8
    Par défaut re
    Microsoft.Msdn précise que Ubound retourne l'index le plus élevé.
    et non!! le nombre de ligne
    merci robert

  16. #16
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 722
    Points : 43 826
    Points
    43 826
    Par défaut
    Toujours pas de justifications !
    Ben si le lien donné, qui est la documentation officielle de la fonction.

    En complément avec exemple :
    https://silkyroad.developpez.com/vba/tableaux/#LV

    Par indice, il faut comprendre plus grande valeur possible dans la dimension, voir exemple dans la doc officielle.

  17. #17
    Invité
    Invité(e)
    Par défaut
    Bonjour,
    à ma concrescence le nombre de ligne est 6-5=2 sachant qu'un table commence a zéro!


    dommage que je ne puisse pas vous coller -2 , mais j'espère arriver à faire comme Marc_L qui na rien posté depuis Avril!

    Nom : Test.gif
Affichages : 691
Taille : 17,6 Ko

    Nom : Sans titre.png
Affichages : 684
Taille : 1,5 Ko
    Dernière modification par Invité ; 08/10/2018 à 09h42.

  18. #18
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    17 722
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 17 722
    Points : 43 826
    Points
    43 826
    Par défaut
    6-2=5
    Merci pour ce rappel mathématique

    Et en quoi cela fit avancer la discussion ?

  19. #19
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 124
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 124
    Points : 55 921
    Points
    55 921
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par dysorthographie Voir le message
    […]à ma concrescence le nombre de ligne est 6-5=2 sachant qu'un table commence a zéro![…]
    Si ta table commence à 5, elle ne commence pas à 0. J'ai donné la formule générique plus haut dans le fil de discussion: UBound - LBound + 1, quelle que soit la base de la table:
    • dim a(1 to 6): Ubound - LBound + 1 = 6 - 1 + 1 = 6 lignes;
    • dim a(6): UBound - LBound + 1 = 6 - 0 +1 = 7 lignes;
    • dim a(123 to 456): UBound - LBound + 1 = 456 - 123 + 1 = 334 lignes;
    • dim a(-2 to 3): UBound - LBound + 1 = 3 - (-2) + 1 = 6 lignes.



    Je ne vois pas ce que ça appelle comme commentaires.

  20. #20
    Invité
    Invité(e)
    Par défaut
    je suis désolé mais dans le poste précédent je démontre qu'il y a bien que deux ligne fenestre espion.

    Lbound donne l'index min et ubound l'index max!


    @chrtophe le fait de donner le lien d'msdn don j'ai parlé plus haut fait avancer la discussion!

    Il.est évident que devant une telle mauvaise fois je ne peux que capituler.
    Dernière modification par Invité ; 08/10/2018 à 11h40.

Discussions similaires

  1. Selection d'un index dans un tableau avec variables
    Par Kalork dans le forum VB.NET
    Réponses: 5
    Dernier message: 13/06/2012, 22h02
  2. tableau avec variables d'entrée différentes
    Par magicfrom dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 28/05/2008, 16h35
  3. [Tableaux] Remplir tableau avec variable
    Par nicerico dans le forum Langage
    Réponses: 1
    Dernier message: 09/07/2007, 15h35
  4. Réponses: 4
    Dernier message: 09/03/2006, 09h50
  5. [VB6] Déclaration d'un tableau avec variable en paramètre.
    Par méphistopheles dans le forum VB 6 et antérieur
    Réponses: 9
    Dernier message: 23/10/2005, 12h21

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