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 :

remplir un tableau a 2 dimensions a partir de colonnes discontinues [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Points : 24
    Points
    24
    Par défaut remplir un tableau a 2 dimensions a partir de colonnes discontinues
    bonjour,

    j'ai un worksheet "wsTravail". Sur ce worksheet j'ai des donné en colonne A et en colonne C.

    Je souhaite remplir un tableau a 2 dimension avec la colonne C en premier et la colonne A en deuxième.

    Comment faire ?

    y a-t-il la possibilité d'adapter ce code ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dim tableau As Variant
    tableau = wsTravail.Range("A1:B7").Value

  2. #2
    Membre habitué
    Homme Profil pro
    Technicien bureau d'études
    Inscrit en
    Novembre 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien bureau d'études

    Informations forums :
    Inscription : Novembre 2015
    Messages : 118
    Points : 172
    Points
    172
    Par défaut
    Bonjour Thomas.

    Tes lignes se suivent-elles (C1, A1, etc...) pour remplir le tableau ?

  3. #3
    Membre à l'essai
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    oui la premiere ligne de mon tableau contient C1 et A1. il n'y a pas de decalage entre sur les lignes.

  4. #4
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Bonjour,
    Tu peux t'inspirer de la réponse que j'ai donné dans ce post
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  5. #5
    Membre habitué
    Homme Profil pro
    Technicien bureau d'études
    Inscrit en
    Novembre 2015
    Messages
    118
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Technicien bureau d'études

    Informations forums :
    Inscription : Novembre 2015
    Messages : 118
    Points : 172
    Points
    172
    Par défaut
    Bonjour Ryu.

    A adapter à ton nom d'onglet.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Test()
    Dim t(), temp(), l&, i&
     
    With Sheets("Feuil1")
        l = .[a65000].End(xlUp).Row
        temp = .Range(.Cells(1, 1), .Cells(l, 3)).Value
        ReDim t(1 To UBound(temp), 1 To 2)
        For i = LBound(temp) To UBound(temp)
            t(i, 1) = temp(i, 3)
            t(i, 2) = temp(i, 1)
        Next i
    End With
    End Sub

  6. #6
    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 677
    Points
    18 677
    Par défaut


    Bonjour,

    réalisable sans boucle en une ligne via la simple fonction de feuille de calculs INDEX d'Excel (Application.Index en VBA).
    Je vous laisse lire l'aide d'Excel (et non pas celle de VBA) et tenter de votre côté, niveau pas trop compliqué …

    Sinon voir l'exemple de cette discussion

    _________________________________________________________________________________________________________
    Je suis Paris, Charlie, Bruxelles, …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  7. #7
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Hi thebenoit59,
    Je regarderai ça, merci

    Édit : merci Marc j'irais voir tout cela
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  8. #8
    Membre à l'essai
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    la methode avec index me plait bien mais je narrive pas a m'en servir.

  9. #9
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re
    Qu'as-tu fait au final??
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  10. #10
    Membre à l'essai
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    j'essaye deja de m'en servir sur une feuille excel pour comprendre.

    j'ai remplis la colonne A avec des chiffres 1 2 3 4 5
    j'ai remplis la colonne B avec des lettre A B C D E F

    j'essaye de récupérer dans mon résultat un tableau avec en colonne 1 des lettre et en colonne 2 des chiffres

    donc dans mon index je met mes 2 ranges , en numero de ligne je met 0 pour recuperer toute la colonne, et ensuite avec le numero de colonne je ne sais aps trop quoi faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =INDEX((A1:A18;B1:B18);0;1)
    j'essaye aussi de décrypter ce code, de le comprendre quoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     With Range("A4:F" & Application.Max(Cells(Rows.Count, 1).End(xlUp).Row, 4))
            VA = Application.Index(.Value, Evaluate("ROW(1:" & .Rows.Count & ")"), [{1,2,6}])
     End With
    je suppose que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Range("A4:F" & Application.Max(Cells(Rows.Count, 1).End(xlUp).Row, 4))
    sert a définir le range qui sert a l'index mais je vois pas pourquoi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     VA = Application.Index(.Value, Evaluate("ROW(1:" & .Rows.Count & ")"), [{1,2,6}])
    VA est le tableau qui récupère le resultat.
    .value est le range

    Evaluate("ROW(1:" & .Rows.Count & ")") = row(1 : X) donc on selectionne toute les lignes ? je croyais que écrire 0 était équivalent
    [{1,2,6}] ca j'ai jamais vu . mais normalement c'est l'argument de colonne

  11. #11
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Pour ma part, je ne peux pas regarder de suite, mais dès que j'ai un moment je m'y attelle.
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

  12. #12
    Membre à l'essai
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    voila ce que j'ai fait

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
     
    Public WS As Worksheet
    Sub test()
        Set WS = ThisWorkbook.Worksheets(1)
        Dim VA As Variant
        Dim rg As Range
     
        Set rg = WS.Range("A1:C7")
     
        Dim tmp
        With rg
            VA = Application.Index(.Value, Evaluate("ROW(1:" & .Rows.Count & ")"), [{2,1}])  '
        End With
     affiche VA
     
    End Sub
     
    Sub affiche(vartab As Variant)
    Dim i As Long
    Dim j As Long
    For i = 1 To UBound(vartab, 1) 'boucle sur la 1ere dimension
                'Lit les éléments du tableau
                Debug.Print vartab(i, 1) & vartab(i, 2)
        Next i
    End Sub
    il faut remplir la plage A1 : C7 pour voir quelque chose
    ça fonctionne. Mais je ne comprends pas pourquoi Evaluate("ROW(1:" & .Rows.Count & ")") est necessaire. d'après l'aide en ligne , un 0 devrais renvoyer toute les lignes mais ça ne fonctionne pas.

  13. #13
    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 677
    Points
    18 677
    Par défaut
    Citation Envoyé par Thomas_C_Moi Voir le message
    j'ai des données en colonne A et en colonne C.

    Je souhaite remplir un tableau à 2 dimensions avec la colonne C en premier et la colonne A en deuxième.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub Demo1()
    '   With ThisWorkbook.Worksheets(1).UsedRange
        With ThisWorkbook.Worksheets(1).Cells(1).CurrentRegion
            VA = Application.Index(.Value, .Parent.Evaluate("ROW(1:" & .Rows.Count & ")"), [{3,1}])
        End With
                    Stop
    '   Jeter un œil au contenu de VA dans la fenêtre Variables locales !
    End Sub
    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  14. #14
    Membre à l'essai
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    merci bien pour les corrections. c'est vrai que la fonction d'affichage était inutile avec la fenêtre de variable local. Mais tout cela ne répond pas à ma question.

  15. #15
    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 677
    Points
    18 677
    Par défaut

    Pourtant l'aide VBA est assez claire (enfin pour moi elle l'a été), tu l'as peut-être lue un peu vite !

    Cette seconde démonstration devrait aider à comprendre pourquoi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Demo2()
        VA = Application.Index(ThisWorkbook.Worksheets(1).UsedRange.Value, , 3)
        Stop
    End Sub
    _________________________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  16. #16
    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 677
    Points
    18 677
    Par défaut
    Citation Envoyé par Thomas_C_Moi Voir le message
    [{1,2,6}] ça j'ai jamais vu
    {1,2,6} est la notation matricielle d'Excel comme on peut justement le voir dans l'exemple 2 de l'aide d'INDEX.

    Les crochets sont l'écriture courte de la puissante méthode Evaluate (à consulter dans l'aide VBA) …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  17. #17
    Membre à l'essai
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    avec ton code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub Demo2()
        VA = Application.Index(ThisWorkbook.Worksheets(1).UsedRange.Value, , 3)
        Stop
    End Sub
    j'ai erreur 2023 dans la fenêtre de variable local EDIT C'est moi qui est fait une bêtise ça marche

    je vais essayer de trouver plus d'info sur l’écriture matricielle

    bon ce que je vois c'est qu'avec une seul valeur pour le nombre de colonne, mettre un nombre de ligne à 0 renvoie effectivement toute la ligne.
    en revanche avec [{1,2,6}] ça ne fonctionne plus.

  18. #18
    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 677
    Points
    18 677
    Par défaut




    Cela ne fonctionne plus car ce n'est plus la valeur numérique d'une colonne mais une matrice de colonnes,
    la raison pour laquelle côté lignes une matrice doit aussi être renseignée …
    C'est parce que la vitesse de la lumière est plus rapide que celle du son que tant de gens paressent brillants avant d'avoir l'air con ! (Thomas Boishardy)

  19. #19
    Membre à l'essai
    Homme Profil pro
    rien
    Inscrit en
    Juin 2015
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : rien

    Informations forums :
    Inscription : Juin 2015
    Messages : 46
    Points : 24
    Points
    24
    Par défaut
    et bien je te remercie pour ta patience. il me semble qu'il ne me reste plus qu'a marqué le sujet résolu.

  20. #20
    Expert confirmé
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Points : 4 174
    Points
    4 174
    Par défaut
    Re Marc,
    je viens de lire ton lien Variable Tableau : récupérer une plage multiple, lecture super instructive
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre en n'oubliant pas d'indiquer qu'elle est la solution finale choisie

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

Discussions similaires

  1. [XL-2003] VBA-Remplir un tableau a deux dimensions
    Par gualoule dans le forum Excel
    Réponses: 3
    Dernier message: 05/08/2009, 00h49
  2. Réponses: 8
    Dernier message: 06/08/2007, 11h32
  3. [TP] Remplir un tableau à partir des données d'un autre tableau
    Par The future scientist dans le forum Turbo Pascal
    Réponses: 6
    Dernier message: 27/05/2007, 17h31
  4. [MySQL] Remplir un tableau à 2 dimensions
    Par LeXo dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 17/03/2007, 13h17

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