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 :

Récupérer les valeurs d'un tableau à 2 dimensions


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Sans emploi - Autonome
    Inscrit en
    Mars 2018
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Sans emploi - Autonome

    Informations forums :
    Inscription : Mars 2018
    Messages : 130
    Par défaut Récupérer les valeurs d'un tableau à 2 dimensions
    Bonjour,

    Je cherche un moyen de récupérer les valeurs contenant la variable "X" pour les coller par la suite, sur une feuille Excel à part.

    Cependant, ma variable est un tableau à deux dimensions : X = Single(1 to 201, 1 To 3), j'aimerai par exemple récupérer toutes les lignes (soit 201 lignes) de la 1ère colonne.

    J'ai testé de cette manière la, mais ça ne fonctionne pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NBR_POINTS = 201
     
    Sheets("Feuil3").Range("A1").Resize(UBound(X(NBR_POINTS, 1))) = Application.Transpose(X(NBR_POINTS, 1))
    Il me renvois sur une erreur de type tableau.

    Avez vous des idées svp ? Merci d'avance.

  2. #2
    Expert éminent
    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
    Par défaut
    Bonjour,

    via la fonction de feuille de calculs INDEX, en VBA c'est Application.Index

    ___________________________________________________________________________________________________________
    Je suis Paris, Egypte, Nigeria, New-York, Mogadicio, Barcelone, London, Manchester, Stockholm, Istanbul, Berlin, Nice, Bruxelles, Charlie, …

  3. #3
    Membre confirmé
    Homme Profil pro
    Sans emploi - Autonome
    Inscrit en
    Mars 2018
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Sans emploi - Autonome

    Informations forums :
    Inscription : Mars 2018
    Messages : 130
    Par défaut
    Salut,

    Même problème, erreur : tableau attendu.

    Petite question, je rempli ma variable grâce à deux boucle for, dois-je mettre cette instruction dans ma boucle ou à l'extérieur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil3").Range("A1").Resize(UBound(R_total_dB(NBR_POINTS, 1))) = Application.Index(R_total_dB(NBR_POINTS, 1))

  4. #4
    Expert éminent
    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
    Par défaut




    Là tu as codé INDEX pour une ligne au lieu d'une colonne (cf aide Excel) …

  5. #5
    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
    Billets dans le blog
    8
    Par défaut re
    bonjour
    c'est quoi cette syntaxe ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Resize(UBound(X(NBR_POINTS, 1)))
    pour resize il y a 2 arguments lignes /colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Resize(UBound(NBR_POINTS), 1))
    re autant pour moi je devais avoir la tete dans le ... ce matin
    c'est encore plus simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Resize(NBR_POINTS, 1))
    et pour transferer la colonne 1 du tableau dans ce resize utiliser application.index
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Expert éminent
    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
    Par défaut
    Salut Patrick !

    Le second paramètre de Resize étant optionnel …

  7. #7
    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.

    Tu peux utiliser ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("a1").Resize(UBound(tableau, 1), 1) = tableau
    Comme tu dimensionnes ta plage sur une seule colonne, tu obtiendras en A la première colonne du tableau.

    Toutefois, il est plus "propre" d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("a1").Resize(UBound(tableau, 1), 1) = Application.Index(tableau, , 1)
    "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...
    ---------------

  8. #8
    Membre confirmé
    Homme Profil pro
    Sans emploi - Autonome
    Inscrit en
    Mars 2018
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Sans emploi - Autonome

    Informations forums :
    Inscription : Mars 2018
    Messages : 130
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Tu peux utiliser ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("a1").Resize(UBound(tableau, 1), 1) = tableau
    Comme tu dimensionnes ta plage sur une seule colonne, tu obtiendras en A la première colonne du tableau.

    Toutefois, il est plus "propre" d'écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("a1").Resize(UBound(tableau, 1), 1) = Application.Index(tableau, , 1)
    Salut,

    J'ai toujours un message d'erreur : l'indice n'appartient pas à la sélection.

    Cette ligne d'instruction je dois la mettre dans ma boucle for (la ou je remplis mon tableau en VBA) ou à l'extérieur ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("Feuil3").Range("A1").Resize(UBound(X, 1), 1) = Application.Index(X, , 1)
    Sachant que ma variable X fait 201 lignes et 1 colonne

  9. #9
    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

    Citation Envoyé par SpaceX Voir le message
    [...]
    Cependant, ma variable est un tableau à deux dimensions : X = Single(1 to 201, 1 To 3)[...]
    Citation Envoyé par SpaceX Voir le message
    [...]
    Sachant que ma variable X fait 201 lignes et 1 colonne
    Finalement, elle fait combien de colonnes, ta variable, et comment ton tableau est-il déclaré?

    Si elle n'a qu'une dimension (1 to 201), tu peux utiliser:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("a1").Resize(UBound(tableau, 1), 1) = Application.Transpose(tableau)
    Et si elle a deux dimensions, même avec une seule colonne dans la deuxième dimension (1 to 201, 1 to 1), tu dois utiliser un des codes donnés dans mon précédent message (de préférence le second, plus explicite de ce que tu souhaites réaliser).
    "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...
    ---------------

  10. #10
    Membre confirmé
    Homme Profil pro
    Sans emploi - Autonome
    Inscrit en
    Mars 2018
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Sans emploi - Autonome

    Informations forums :
    Inscription : Mars 2018
    Messages : 130
    Par défaut
    Salut,

    Ah oui pardon j'ai oublié de préciser !

    Ma variable est déclaré de la manière suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ReDim X(1 To 201, 1 To 3) As Single
    Elle dispose de 3 colonnes, mais celle qui m'intéresse est la colonne 1.

  11. #11
    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
    Je t'ai déjà donné le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("a1").Resize(UBound(tableau, 1), 1) = Application.Index(tableau, , 1)
    Il n'y a pas de boucle à utiliser. Cette ligne crée une plage qui commence en A1 et elle contient le nombre de lignes contenues dans le tableau. Si tu as 201 lignes, elles sont transférées en A1:A201 d'un seul coup.
    "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...
    ---------------

  12. #12
    Membre confirmé
    Homme Profil pro
    Sans emploi - Autonome
    Inscrit en
    Mars 2018
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Sans emploi - Autonome

    Informations forums :
    Inscription : Mars 2018
    Messages : 130
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Je t'ai déjà donné le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("a1").Resize(UBound(tableau, 1), 1) = Application.Index(tableau, , 1)
    Il n'y a pas de boucle à utiliser. Cette ligne crée une plage qui commence en A1 et elle contient le nombre de lignes contenues dans le tableau. Si tu as 201 lignes, elles sont transférées en A1:A201 d'un seul coup.
    D'accord, mais j'ai toujours un message d'erreur : L'indice n'appartient pas à la sélection

  13. #13
    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
    Peux-tu donner une copie exacte du code que tu utilises?
    "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...
    ---------------

  14. #14
    Membre confirmé
    Homme Profil pro
    Sans emploi - Autonome
    Inscrit en
    Mars 2018
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Sans emploi - Autonome

    Informations forums :
    Inscription : Mars 2018
    Messages : 130
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Peux-tu donner une copie exacte du code que tu utilises?
    Désolé de t'avoir fait perdre du temps.

    Ton programme fonctionne, merci beaucoup.

  15. #15
    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
    Citation Envoyé par SpaceX Voir le message
    Désolé de t'avoir fait perdre du temps.

    Ton programme fonctionne, merci beaucoup.
    Pas de soucis
    "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...
    ---------------

Discussions similaires

  1. Récupérer les valeurs d'un tableau
    Par fermat dans le forum Débuter
    Réponses: 3
    Dernier message: 02/02/2012, 14h17
  2. [PostgreSQL] Récupérer les valeurs d'un tableau
    Par Grotoumaigr dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 16/01/2012, 09h37
  3. Réponses: 2
    Dernier message: 03/06/2011, 20h29
  4. Récupérer les valeurs dans un tableau
    Par ssxjim dans le forum Collection et Stream
    Réponses: 1
    Dernier message: 26/01/2011, 20h49
  5. Inverser les valeurs d'un tableau à 2 dimensions
    Par Jarodd dans le forum Langage
    Réponses: 2
    Dernier message: 04/11/2008, 09h40

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