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 :

Remplacer une const par une variable dans un tableau(n,2) pour renseigner une listbox


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut Remplacer une const par une variable dans un tableau(n,2) pour renseigner une listbox
    Dans un module standard, je récupère une valeur dans une variable déclarée en Public
    Public FL1 As Worksheet
    Public DerniereLigne As Long

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Macro1()
    Set FL1 = Worksheets("Feuil")
    DerniereLigne = FL1.Range("A65535").End(xlUp).Row
    UserForm2.Show
    End Sub
    Dans la feuille de code de l'userform, je souhaite dimensionner un tableau à deux dimensions, la première étant = à DerniereLigne
    Dim Tableau(0 To DerniereLigne, 2)
    qui ne fonctionne évidemment pas puisque DerniereLigne doit être une constante
    Pour l'utilisation que j'en fais, (remplissage d'une liste à trois colonnes - 0, 1 et 2) je ne peux pas inverser les dimensions
    Existe-t-il un moyen pour détourner ce pb
    En désespoir de cause, j'ai tenté
    Const Derlig = DerniereLigne
    placé dans la macro renseignant la liste
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Public Const = .....
    Private Const = .....
    Une idée pour détourner le problème ?
    Par avance, merci

    Edit
    Je précise que l'exemple avec une plage de cellules n'est qu'un exemple.
    Sinon, la propriété BoundColumn règlerait le problème.
    Dans mon cas, les données peuvent provenir des différents calculs.

  2. #2
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bon, j'ai trouvé un moyen détourné pour obtenir mon tableau dimensionné au nombre de cellules en mettant tout dans Initialize
    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
    22
    23
    24
    25
    26
    27
    Dim FL1 as Worksheet
    
    Private Sub UserForm_Initialize()
    Dim Tableau()
    Dim DerLigne As Long
    Dim Tab2(2) 'Nombre de colonnes dans la listbox
    Set FL1 = Worksheets("Feuil1")
    DerLigne = FL1.Range("A65535").End(xlUp).Row
    ReDim Tableau(DerLigne)
        For i = 1 To DerLigne
            For NoCol = 1 To 3
                Tab2(NoCol - 1) = Cells(i, NoCol)
                Tableau(i - 1) = Tab2
            Next
        Next
    
    'On peut constater que les données se trouvent en bonne place
        For i = 0 To DerLigne
            For NoCol = 0 To UBound(Tab2)
                MsgBox Tableau(i)(NoCol)
            Next
        Next
        
    'cependant, sans planter, les lignes suivantes ne fonctionnent pas
        ListBox1.List() = Tableau()
        ListBox2.Column() = Tableau()
    End Sub
    Et pourquoi que ça marche pas

    Edit
    ListBox1.List() = Tableau()()
    ListBox2.Column() = Tableau()()
    ne fonctionne pas non plus

    Pourtant, si je mets
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
        ListBox1.List() = Tableau()(1)
        ListBox2.Column() = Tableau()(1)
    J'ai bien mes trois lignes dans la première liste et mes trois colonnes dans la seconde

  3. #3
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Bon, puisque c'est comme ça, je vais m'arranger avec Additem mais à vrai dire ça ne m'arrange pas du tout !

    Je laisse traîner cette discussion encore un peu... au cas où... Après je délesterai si personne n'a mieux à me proposer.

  4. #4
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut...

    Ceci peut-être
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
        Dim tableau()
        Dim DerLigne As Long
     
        DerLigne = 100
        ReDim Preserve tableau(0 To DerLigne, 2)
    Ok?

    [EDIT] Preserve est inutile dans ce cas-ci.[/EDIT]
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Hello Pierre,
    Alors on ne sait pas qu'on ne peut pas redimensionner la première dimension d'un tableau mais seulement la dernière ? Ou l'inverse selon le sens dans lesquelles on les prend
    Citation Envoyé par L'aide en ligne
    Si vous utilisez le mot clé Preserve, vous ne pouvez redimensionner que la dernière dimension du tableau. Vous ne pouvez en aucun cas modifier le nombre de dimensions. Par exemple, si votre tableau n'a qu'une dimension, vous pouvez la modifier puisqu'il s'agit de la dernière et seule dimension. Toutefois, si le tableau compte plusieurs dimensions, seule la taille de la dernière dimension est modifiable si vous souhaitez préserver le contenu du tableau. L'exemple suivant montre comment augmenter la taille de la dernière dimension d'un tableau dynamique sans effacer les données qu'il contient :
    Vous me le copierez 100 fois

  6. #6
    Rédacteur/Modérateur


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

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Homme de peu de foi...!!!!!

    Essaie d'abord, et reviens me dire ensuite...

    L'aide parle de redimensionner, mais dans le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dim tableau()
    ...
    Point de dimensions...

    Astucieux, n'est-il pas?
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Inactif  
    Avatar de ouskel'n'or
    Profil pro
    Inscrit en
    Février 2005
    Messages
    12 464
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 12 464
    Par défaut
    Edit
    Pourtant, à la réflexion, si je lis entre les lignes, cette phrase m'interpelle :
    Toutefois, si le tableau compte plusieurs dimensions, seule la taille de la dernière dimension est modifiable si vous souhaitez préserver le contenu du tableau
    Je (re) teste ça tout de suite
    A+

    Voui voui, t'a peut-être raison (on s'est croisé)

  8. #8
    Expert confirmé

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Par défaut
    bonjour cher Pierre et cher Ouskel'n'or

    Pour ma part je n'ai pas compris ce que tu cherches à faire et quel est ton soucis:


    Au hasard:

    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
    22
    23
    Option Explicit
     
    Dim FL1 As Worksheet
     
    Private Sub UserForm_Initialize()
        Dim Tableau()
        Dim DerLigne As Long, i As Long
        Dim NoCol As Long
     
        Set FL1 = Worksheets("Feuil1")
        DerLigne = FL1.Range("A65535").End(xlUp).Row
     
        ReDim Tableau(1 To DerLigne, 1 To 3)
     
        For i = 1 To DerLigne
            For NoCol = 1 To 3
                Tableau(i, NoCol) = Cells(i, NoCol)
            Next
        Next
     
        ListBox1.ColumnCount = UBound(Tableau, 2)
        ListBox1.List() = Tableau()
    End Sub



    bon après midi
    michel

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 01/04/2010, 22h23
  2. Réponses: 3
    Dernier message: 21/07/2007, 01h48
  3. Remplacer des balises par des valeurs dans une String
    Par RadicalBob dans le forum Langage
    Réponses: 4
    Dernier message: 26/04/2007, 15h22
  4. Réponses: 2
    Dernier message: 12/04/2007, 17h12
  5. Réponses: 6
    Dernier message: 23/01/2007, 10h17

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