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 :

Copier une variable tableau dans une feuille mais sans la 1ère ligne [XL-2016]


Sujet :

Macros et VBA Excel

  1. #1
    Membre émérite Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 566
    Points : 2 525
    Points
    2 525
    Par défaut Copier une variable tableau dans une feuille mais sans la 1ère ligne
    Bonjour à tous,

    en complément de la discussion https://www.developpez.net/forums/d1...feuille-excel/ j'essaie à présent de copier le contenu de ma variable TABLEAU dans une feuille Excel (sheets) MAIS sans la première ligne (cette première ligne contient les étiquettes de champs et a déjà été extraite via l'excellentissime solution de PatrickToulon ()

    Pour l'instant, j'effectue cette recopie via une boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For ligne = 2 To 5
    Cells(ligne + 4, 1).Resize(1, UBound(TABLEAU2, 2) + 1) = Application.Index(TABLEAU2, ligne)
    Next
    je me sert en fait de la solution de Patrick que je parcours via cette boucle (j'ai rien inventé finalement)
    Mais je suppose qu'il y a une solution "plus élégante" et surtout performante pour effectuer cette recopie.

    Bonne journée à tous.
    Curt
    Pas de demande par MP, sinon j'correctionne plus, j'dynamite, j'disperse, j'ventile !!!
    ---------------------------------------------------------------------
    Vous avez un talent insoupçonné... Faites-en profitez les autres. Un p'tit CLIC pour une grande cause.
    Et si vous faisiez un bon geste en 2024 ? Soyez utile, ça vous changera ! Moi, ça m’a changé !

  2. #2
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    pourquoi ne pas tout simplement copier l'intégralité du tableau sur ta feuille, et ensuite supprimer la première ligne transférée ?
    Ça sera moins gourmand qu'une boucle qui transfère ligne à ligne ton tableau

  3. #3
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Déjà, l'utilisation de Index pour un tableau de variables, je doute que ça puisse fonctionner, mais, surtout, je n'en vois pas l'intérêt alors qu'il est si simple d'accéder à l'index d'une variable.

    Au lieu de se faire des noeuds au cerveau, autant utiliser une double boucle.
    Ce n'est pas une solution "élégante" mais c'est pragmatique.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For ligne = 2 To 5
        For Colonne = 1 To UBound(TABLEAU2, 2)
            Cells(ligne + 4, Colonne).Value = TABLEAU2(ligne, Colonne)
        Next Colonne
    Next ligne
    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion.

  4. #4
    Expert éminent

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 073
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 073
    Points : 9 853
    Points
    9 853
    Billets dans le blog
    5
    Par défaut
    Si si,

    application.Index permet d'extraire une ligne entière ou une colonne entière d'un tableau

    Pour une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Index(MonTableau,MaLigne)
    Pour une colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Index(MonTableau,0,MaColonne)

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    re
    salut curt
    si je comprends bien tu veux copier ton tableau sans la 1 ere ligne du tableau sur le sheets en ligne 6

    un petit exemple tout simple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub test()
        Dim tablo1
        tablo1 = Range("A1:C3").Value    'on créé le tableau avec une plage pour l'exemple
        With Cells(5, 1).Resize(UBound(tablo1), UBound(tablo1, 2))    ' on determine l'emplacement de la copie
            .Value = tablo1    ' on y met le tableau
            tablo1 = .Offset(1).Value    ' on reprend le tablo mais dans le nouvel emplacementet a partir de la 2d ligne
            .ClearContents    ' on revide ce nouvel emplacement
            .Value = tablo1    ' on lui repet le tableau
        End With
    End Sub
    pas plus compliqué que ca
    Nom : demo2.gif
Affichages : 1486
Taille : 254,7 Ko
    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
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut
    Citation Envoyé par joe.levrai Voir le message
    Si si,

    application.Index permet d'extraire une ligne entière ou une colonne entière d'un tableau

    Pour une ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Index(MonTableau,MaLigne)
    Pour une colonne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Index(MonTableau,0,MaColonne)
    oui absolument et on obtient pour la colonne un tablo a 2 dim (x ligne ,1 colonne )
    pour transformer ce tableau en array (c'est parfois utile de le convertir) c'est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    application.transpose(Application.Index(MonTableau,0,MaColonne))
    ainsi plutot que de l'exploiter avec msgbox tablo(4,1) on l'exploite avec msgbox tablo(4)car c'est devenu un array (tableau a 1 dim)
    ca fonctionne de la meme maniere avec une plage sauf l'indexation qui commence a 1 une variable tableau pouvant comencer a 0
    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

  7. #7
    Membre émérite Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 566
    Points : 2 525
    Points
    2 525
    Par défaut
    Bonjour à tous,

    je ne pensais pas avoir autant de pistes sur ma question.

    - Effectivement, je peux copier tout le TABLEAU et ensuite supprimer la 1ère ligne
    - La boucle est (à mon avis) la solution passe-partout - ça n'est pas forcément la plus rapide

    et pour PatrickTOULON
    si je comprends bien tu veux copier ton tableau sans la 1 ere ligne du tableau sur le sheets en ligne 6
    Oui, tu as tout compris et c'est ta solution que je prends

    Merci à tous pour votre commentaires, avis et solutions.

    Curt
    Pas de demande par MP, sinon j'correctionne plus, j'dynamite, j'disperse, j'ventile !!!
    ---------------------------------------------------------------------
    Vous avez un talent insoupçonné... Faites-en profitez les autres. Un p'tit CLIC pour une grande cause.
    Et si vous faisiez un bon geste en 2024 ? Soyez utile, ça vous changera ! Moi, ça m’a changé !

  8. #8
    Membre habitué Avatar de Klin89
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 119
    Points : 178
    Points
    178
    Par défaut
    Bonjour à tous

    Vois ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Sub test()
        a = Range("a1").CurrentRegion.Value
        b = Application.Index(a, Evaluate("row(2:" & UBound(a, 1) & ")"), Application.Transpose(Evaluate("row(1:" & UBound(a, 2) & ")")))
    End Sub
    klin89

  9. #9
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    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 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut re
    bien vu klin
    cela dit on a pas besoins de controler la 1 colonne puisque l'on veut toute les ligne sauf les entete donc dans l'evaluate partie ligne ubound(a) suffit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
        a = Range("a1").CurrentRegion.Value
        b = Application.Index(a, Evaluate("row(2:" & UBound(a) & ")"), Application.Transpose(Evaluate("row(1:" & UBound(a, 2) & ")")))
    Cells(6, 1).Resize(UBound(b), UBound(b, 2)) = b
    End Sub
    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

  10. #10
    Membre émérite Avatar de curt
    Homme Profil pro
    Ingénieur Etudes
    Inscrit en
    Mars 2006
    Messages
    1 566
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur Etudes
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Mars 2006
    Messages : 1 566
    Points : 2 525
    Points
    2 525
    Par défaut
    Bonjour Klin et Patrick,

    effectivement, ça fonctionne aussi mais la macro est un peu plus difficile à "décoder"

    Encore bravo à vous.

    Curt
    Pas de demande par MP, sinon j'correctionne plus, j'dynamite, j'disperse, j'ventile !!!
    ---------------------------------------------------------------------
    Vous avez un talent insoupçonné... Faites-en profitez les autres. Un p'tit CLIC pour une grande cause.
    Et si vous faisiez un bon geste en 2024 ? Soyez utile, ça vous changera ! Moi, ça m’a changé !

  11. #11
    Membre habitué Avatar de Klin89
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    119
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2008
    Messages : 119
    Points : 178
    Points
    178
    Par défaut correctif
    Re

    Y'avait un bug lorsque le tableau restitué ne comportait qu'une seule ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub test()
        a = Range("a1").CurrentRegion.Value
        b = Application.Index(a, Evaluate("row(2:" & UBound(a, 1) & ")"), Application.Transpose(Evaluate("row(1:" & UBound(a, 2) & ")")))
        If UBound(Application.Transpose(b), 2) = 1 Then
            Range("a10").Resize(1, UBound(b)) = b
        Else
            Range("a10").Resize(UBound(b, 1), UBound(b, 2)) = b
        End If
    End Sub
    klin89

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

Discussions similaires

  1. Copier une variable tableau dans une autre.
    Par Z20500 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 11/02/2014, 00h05
  2. Portée d'une variable tableau dans une fonction JS
    Par renaud26 dans le forum jQuery
    Réponses: 7
    Dernier message: 02/08/2011, 10h24
  3. [PHP 5.0] Problème avec une variable tableau dans une session
    Par diblasio dans le forum Langage
    Réponses: 5
    Dernier message: 23/08/2010, 09h59
  4. Réponses: 5
    Dernier message: 26/03/2008, 21h48
  5. afficher une variable tableau dans une JSP
    Par johnnywalker dans le forum Struts 1
    Réponses: 11
    Dernier message: 04/03/2007, 22h02

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