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, première dimension dynamique [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut Tableau, première dimension dynamique
    Bonjour tout le monde,

    Je suis en train de faire un petit dictionnaire français anglais.
    J'ai donc dans un multipage 26 pages (une pour chaque lettre de l'alphabet), et dans chacune d'elle une listbox que j'alimente à partir d'un onglet où tout les mots sont stockés.
    Pour cela j'utilise un tableau de n lignes (en fonction du nombre de mot commençant par la lettre) et de deux colonnes (fr et anglais) que j'introduis dans la liste.

    Tout va bien lorsque les dimensions du tableau sont fixés, mais je souhaitais rendre la première dimension dynamique en fonction du nombre de mots trouvés pour ne pas avoir plein de lignes vide.

    Dois-je parcourir une première fois toute la colonne pour connaitre la dimension à appliquer sans perdre de donner ?

    Ou bien y-a-t-il une astuce pour utliser Redim Preserv sur la première dimension :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For j = 1 To 50
            If Left(Worksheets("words").Cells(j, 2).Value, 1) = "a" Then
                ReDim Preserve VarTab(1 To k, 1 To 2)
                VarTab(k, 1) = Worksheets("words").Cells(j, 2).Value
                VarTab(k, 2) = Worksheets("words").Cells(j, 3).Value
                k = k + 1
            End If
        Next j
    Merci par avance (et merci pour le tuto sur les tableaux )

  2. #2
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    J'ai poursuivi mes recherches après avoir posté mon message et j'ai trouvé comme un grand.

    Pour information (pour les débutant comme moi) il suffit :
    1) d'inverser les dimensions du tableau
    2) d'utiliser la fonction Transpose pour transposer le tableau lors de l'alimentation
    Application.WorksheetFunction.Transpose(VarTab)

    Merci

  3. #3
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    Tu aurais pu aussi redimensionner comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    With Worksheets("words")
      k = WorksheetFunction.CountIf(.Range("B1:B50"), "=a*")
      ReDim Preserve vartab(1 To k, 1 To 2)
      'For ..................
        'If......................
        '.....
        'End If
      'Next j
    End With

  4. #4
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour,

    ou bien en alimentant directement le tableau via la fonction VBA Filter

  5. #5
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bonjour,

    Merci tout d'abord pour vos réponses.

    casefayere, il y a un point que je ne comprends pas cependant. J'ai lu qu'on ne pouvait faire un Redim Preserve que sur la dernière dimension.
    Dans votre exemple vous le faites sur la première.
    Pouvez vous m'éclairer svp ?

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Re,

    comme le tableau n'est pas encore dimensionné, tu peux donc le faire, j'aurais pu écrire, pour le même résultat :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim  vartab(1 To k, 1 To 2)
    ,c'est comme si je dimensionnais le tableau au départ :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim  vartab(1 To 550, 1 To 2)'au hasard

  7. #7
    Candidat au Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Octobre 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2013
    Messages : 4
    Points : 3
    Points
    3
    Par défaut
    Bien vu l'aveugle !

    Merci...c'est le genre de raisonnement dont on a besoin lorsqu'on débute.

    Cdt.

  8. #8
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    et quand on peut le faire.....(sans MP)

    Bonne nuit

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 30/07/2013, 16h21
  2. Créer un tableau à deux dimensions dynamique
    Par dev14 dans le forum Langage
    Réponses: 2
    Dernier message: 07/02/2012, 09h12
  3. Problème tableau 2 dimensions dynamique
    Par Beaudelicius dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 22/08/2011, 14h24
  4. creation d'un tableau double dimension dynamiquement
    Par elmcherqui dans le forum C++
    Réponses: 3
    Dernier message: 09/07/2009, 20h05
  5. Réponses: 23
    Dernier message: 21/08/2003, 07h16

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