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 :

Maniement Variable Tableau [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 94
    Par défaut Maniement Variable Tableau
    Bonjour à tous,

    J'assaie de progresser sur le maniement des variables tableau sous vba... Je voudrais ainsi savoir s'il est possible de charger une plage de type Range multi-zones dans un tableau à 2 dimensions :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Plage multi-zones = Union(Range("A1:A10"), Range("C1:C10"))
    Variable tableau  Tab(1 to 10, 1 to 2)
    J'ai essayé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Tab = Union(Range("A1:A10"), Range("C1:C10")).value
    mais ça ne me charge que la première colonne de ma plage et ça redimensionne mon tableau à une dimension... QUelqu'un aurait-il un tuyau ?

    Dans le sens inverse je voudrais copîer la deuxième colonne de mon tableau dans une plage de cellules : savez vous comment faire ? je n'arrive pas à trouver l'instruction qui sélectionne la deuxième colonne de ma variable tableau....

    Merci d'avance

    Stargates

  2. #2
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    Bonjour


    oui on peut et tres facilement
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub tablo()
          Dim MonTablo() as Variant
          MonTablo = Range("A1:C10").value
    End Sub

  3. #3
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Bonjour.

    Citation Envoyé par stargates01 Voir le message
    Je voudrais ainsi savoir s'il est possible de charger une plage de type Range multi-zones dans un tableau à 2 dimensions
    Wilfried n'a pas dû bien lire la question. A ma connaissance, la réponse est non. Si tu tentes l'opération, tu ne chargeras que la première zone, c'est-à-dire le premier terme de la fonction Union.

    Citation Envoyé par stargates01 Voir le message
    Dans le sens inverse je voudrais copîer la deuxième colonne de mon tableau dans une plage de cellules : savez vous comment faire ? je n'arrive pas à trouver l'instruction qui sélectionne la deuxième colonne de ma variable tableau....
    A ma connaissance, ce n'est pas possible non plus. Contournement : tu crées un nouveau tableau de la taille de la zone qui t'intéresse, tu copies de l'un dans l'autre. Tu peux alors écrire les données du nouveau tableau dans la zone de la feuille.

    Cordialement,

    PGZ

  4. #4
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 94
    Par défaut
    Merci de vos réponses. Concernant la réponse de PGZ : y-a-t-il une instruction simplle pour copier la colonne d'un tableau dans l'autre ou faut-il passer par une boucle ?

  5. #5
    Membre émérite

    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Ardèche (Rhône Alpes)

    Informations forums :
    Inscription : Octobre 2006
    Messages : 652
    Par défaut
    Bonjour à tous

    Une astuce que tu pourrais utiliser

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Option Base 1
    Private Type Untablo
            Tablo1() As Variant
            Tablo2() As Variant
    End Type
     
    Sub test()
    Dim Montablo As Untablo
    With Montablo
        .Tablo1 = Application.Transpose(Range("A1:A10").Value)
        .Tablo2 = Application.Transpose(Range("C1:C10").Value)
    End With
    End Sub

  6. #6
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 94
    Par défaut
    Merci à Michel : ça marche mais le maniement de Montablo, sauf à ce que j'ai raté qch, n'est pas très simple puisqu'il faut à chaque fois passer par les sous tableaux tablo1 et tablo2. Idéalement il aurait fallu que l'on puisse manier Montablo comme une variable tableau en appelant par exemple un élément sous la forme Montablo(1,1). Je vais continuer à creuser pour voir s'il y a d'autres astuces...

  7. #7
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Re,
    Citation Envoyé par stargates01 Voir le message
    Concernant la réponse de PGZ : y-a-t-il une instruction simplle pour copier la colonne d'un tableau dans l'autre ou faut-il passer par une boucle ?
    Il faut une boucle For ... Next. Mais ces instructions s'exécutent très rapidement, les tableaux étant en mémoire...

    Dans le fond, je ne saisis pas bien ton insistance à passer par un seul tableau et cela empêche de trouver un contournement.
    Avec l'exemple que tu as donné, tu pourrais aussi faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonTableau = .Range("A1:C10")
    , ce qui te donne 3 colonnes dont 2 utiles, mais un seul tableau.

    PGZ

  8. #8
    Membre confirmé
    Inscrit en
    Novembre 2010
    Messages
    94
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 94
    Par défaut
    Oui tu as raison dans le cas que j'ai pris en exemple. Mais dans mon projet il s'agit d'une plage 3000 lignes x 40 colonnes et je n'ai besoin que de travailler sur quelques colonnes non contigües. Je crains que charger tout l'ensemble consomme trop de mémoire inutilement...

    ST

  9. #9
    Membre Expert Avatar de wilfried_42
    Homme Profil pro
    Auto-entrepreneur
    Inscrit en
    Novembre 2006
    Messages
    1 427
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 63
    Localisation : France, Vendée (Pays de la Loire)

    Informations professionnelles :
    Activité : Auto-entrepreneur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2006
    Messages : 1 427
    Par défaut
    Re:

    Tu peux pourquoi pas te creer une feuille Tablo et l'incrémenter avec des copier coller ce qui est rapide et l'utiliser comme un tablo

  10. #10
    pgz
    pgz est déconnecté
    Expert confirmé Avatar de pgz
    Homme Profil pro
    Développeur Office VBA
    Inscrit en
    Août 2005
    Messages
    3 692
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Office VBA
    Secteur : Conseil

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Par défaut
    Re,
    Citation Envoyé par stargates01 Voir le message
    Oui tu as raison dans le cas que j'ai pris en exemple. Mais dans mon projet il s'agit d'une plage 3000 lignes x 40 colonnes et je n'ai besoin que de travailler sur quelques colonnes non contigües. Je crains que charger tout l'ensemble consomme trop de mémoire inutilement...

    ST
    A moins que tu n'aies que peu de mémoire vive, un tableau de 120 000 données n'a rien de "lourd". Ca passe ou ça ne passe pas... Ce n'est pas comme une feuille de 1 200 000 données!

    Bref, as-tu essayé? Si oui as-tu observé une "lourdeur" quelconque?

    Cordialement,

    PGZ

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

Discussions similaires

  1. Programme de variables tableau
    Par Wilvart dans le forum C++
    Réponses: 3
    Dernier message: 24/04/2006, 21h30
  2. [Tableaux] récuperer une variable tableau passé par URL
    Par molesqualeux dans le forum Langage
    Réponses: 2
    Dernier message: 23/12/2005, 01h12
  3. variables tableau dans requettes mysql ... et affichage
    Par mulbek dans le forum Requêtes
    Réponses: 3
    Dernier message: 26/10/2005, 16h29
  4. Problème d'initialisation variable tableau
    Par HeZiX dans le forum Langage
    Réponses: 3
    Dernier message: 08/06/2005, 16h30
  5. Acces à une variable-tableau de PHP
    Par Erwan21 dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/02/2005, 13h55

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