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 :

Transformer un Range d'une colonne en Array une dimension


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut Transformer un Range d'une colonne en Array une dimension
    Bonjour,

    Lorsqu'on récupère une colonne de valeur dans Excel via Range, celle-ci est sous forme d'Array 2 dimensions, avec 1 comme unique valeur possible pour la première dimension.
    Y a t il un moyen rapide et efficace de récupérer directement les valeurs sous forme d'un Array d'une seule dimension? Ou est il possible de transformer directement et efficacement l'array 2 dimension en un array une dimension sans passer par une boucle for?

    Merci d'avance pour vos réponses!

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 151
    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 : 13 151
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Par exemple en utilisant la fonction Transpose
    Code de la Procédure Test qui invoque la fonction RedimArray
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test()
     Dim rng As Range: Set rng = Feuil1.Range("A2:A14")
     Dim myNewTable()
     Dim r As Long
     myNewTable = RedimArray(rng)
     For r = 1 To UBound(myNewTable)
      Debug.Print myNewTable(r)
     Next
    End Sub
    Code de la fonction RedimArray
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Function RedimArray(Table)
     RedimArray = Application.WorksheetFunction.Transpose(Table)
    End Function
    Bien entendu on peut le faire sans passer par une fonction mais j'aime découper les procédures
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub Test()
     Dim rng As Range: Set rng = Feuil1.Range("A2:A14")
     Dim myNewTable()
     Dim r As Long
     myNewTable = Application.WorksheetFunction.Transpose(rng)
     For r = 1 To UBound(myNewTable)
      Debug.Print myNewTable(r)
     Next
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Inscrit en
    Juin 2009
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2009
    Messages : 52
    Par défaut
    Parfait, c'est exactement le genre de chose que je voulais!
    Mais par contre je ne comprend pas... Pourquoi il supprime tout seul une des dimensions de la matrice pour le considérer comme un simple vecteur? Une transposition ne devrait qu'intervertir lignes et colonnes normalement...

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 151
    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 : 13 151
    Billets dans le blog
    53
    Par défaut
    Bonsoir,
    Tu as tout à fait raison c'est curieux mais je te renvoie au tutoriel de Didier Gonard superbement écrit Conceptualisation des variables tableau en VBA et Application à l'optimisation du code sous Excel où tout cela est très bien expliqué.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. Réponses: 4
    Dernier message: 12/03/2015, 11h46
  2. Réponses: 3
    Dernier message: 29/03/2011, 20h38
  3. Réponses: 3
    Dernier message: 19/07/2006, 14h28
  4. copie d'une table Y d'une base A vers une table X d'une base
    Par moneyboss dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 30/08/2005, 21h24
  5. [SYBASE ASE] Rajouter une contrainte null sur une colonne
    Par Little_Goldo dans le forum Sybase
    Réponses: 1
    Dernier message: 09/02/2005, 10h48

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