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 avec colonnes discontinues


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 129
    Points : 78
    Points
    78
    Par défaut Remplir un tableau avec colonnes discontinues
    Bonjour
    Je souhaiterai remplir, rapidement, un tableau avec des colonnes discontinues
    Avec des colonnes continue je le fais ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
        ReDim HD(1000, 5)
        HD = F1.Range("A1:B1000").Value
    End Sub
    et je pensais faire ainsi avec des colonnes discontinues
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
        ReDim HD(1000, 5)
        HD = F1.Range("A1:B1000,E1:F1000").Value
    End Sub
    mais visblement ça ne marche pas...

    Auriez vous une solution ?

    Merci

  2. #2
    pgz
    pgz est déconnecté
    Expert éminent 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 : 70
    Localisation : France

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

    Informations forums :
    Inscription : Août 2005
    Messages : 3 692
    Points : 6 591
    Points
    6 591
    Par défaut plage multizone
    Bonjour.

    Je crois en effet qu'on ne peut pas lire dans une variable tableau le contenu d'une plage multizone.
    Le plus efficace me semble être :
    1. lire dans un variant le contenu de chaque zone
    2. concaténer les différents variants dans une variable tableau.

    Cordialement,

    PGZ
    pluritas non est ponenda sine necessitate - Le rasoir d'Okham
    Ne jamais attribuer à la malignité ce que la stupidité peut expliquer -Le rasoir d'Hanlon

  3. #3
    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 heu
    Bonjour
    une solution hyper simple sans redim de tableau

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Option Base 1
    Sub merge_tableau()
        Dim tablo1, tablo2
        'ici on prend en compte 4 colonne même si la c et la d seront re rempli par la suite
        tablo1 = F1.Range("A1:D1000")
        ' ici on récupère le tableau de la colonne E et F
        tablo2 = F1.Range("E1:F1000")
        'maintenant on va merger les tableaux
        For i = 1 To UBound(tablo1)
            tablo1(i, 3) = tablo2(i, 1)    ' la case du tableau qui avait la valeur de la colonne C va recevoir la valeur de la colonne E
            tablo1(i, 4) = tablo2(i, 2)    ' la case du tableau qui avait la valeur de la colonne D va recevoir la valeur de la colonne F
        Next
    End Sub
    Au plaisir
    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

  4. #4
    Membre régulier
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 129
    Points : 78
    Points
    78
    Par défaut
    Jolie travail, et très bien documenté.
    Merci.

  5. #5
    Expert éminent sénior


    Profil pro
    Inscrit en
    Juin 2003
    Messages
    14 008
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 14 008
    Points : 20 038
    Points
    20 038
    Par défaut
    bonjour,

    ne manquerait'il pas des guillemets sur le premier code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
        ReDim HD(1000, 5)
        HD = Feuil1.Range("A1:B1000", "E1:F1000").Value
    End Sub

  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 re
    salut bill
    de toute façon c'était faux depuis le début
    en effet
    un redim su 2 dimension au départ
    et en ligne en dessous un redim par un range
    ensuite le range utilisé donnerait un tableaux a 3 dimension de part la virgule représentant normalement la séparation de colonne d'un tableau
    hors il désir un tablo a 1000 ligne sur 4 colonne s
    ca reviendrait a faire dim tablo(1000,2,2,) du moins il me semble mais je n'en suis pas sur
    tu crois pas ??
    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 régulier
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    129
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Décembre 2010
    Messages : 129
    Points : 78
    Points
    78
    Par défaut
    Je vois que mon sujet vous interesse,
    mais désolé de contredire un expert comme bbil mais avec le code proposé
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
        ReDim HD(1000, 5)
        HD = Feuil1.Range("A1:B1000", "E1:F1000").Value
    End Sub
    j'ai le meme résultat que si j'ecris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Sub test()
        ReDim HD(1000, 5)
        HD = Feuil1.Range("A1:F1000").Value
    End Sub
    Les colonnes C et D sont également chargées dans la matrice, or je ne les veux pas!

  8. #8
    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
    absolument pas stdonat
    Avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HD = Feuil1.Range("A1:F1000").Value
    tu aurais un tableau a 6 colonnes sur 1000 lignes
    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

  9. #9
    Membre habitué Avatar de Capitaine Kirk
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Points : 128
    Points
    128
    Par défaut
    Bonjour à tous

    D'après ce que j'ai compris de la demande je pense que j'aurais codé la chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Sub MyBigArray()
        Dim MyArray, MyBigRange As Range
        Set MyBigRange = Application.Union(Range("A1:B1000"), Range("E1:F1000"))
        MyArray = MyBigRange.Value
    End Sub
    Capitaine Kirk.

  10. #10
    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
    Citation Envoyé par Capitaine Kirk Voir le message
    Bonjour à tous

    D'après ce que j'ai compris de la demande je pense que j'aurais codé la chose comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Option Explicit
     
    Sub MyBigArray()
        Dim MyArray, MyBigRange As Range
        Set MyBigRange = Application.Union(Range("A1:B1000"), Range("E1:F1000"))
        MyArray = MyBigRange.Value
    End Sub
    un array n'a qu'une dimension du moins je crois ???????
    1ligne et plusieurs colonne
    la il nous faut 1000 lignes et 4 colonnes
    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

  11. #11
    Membre actif
    Formateur en informatique
    Inscrit en
    Janvier 2011
    Messages
    134
    Détails du profil
    Informations professionnelles :
    Activité : Formateur en informatique

    Informations forums :
    Inscription : Janvier 2011
    Messages : 134
    Points : 205
    Points
    205
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HD = Feuil1.Range("A1:B1000", "E1:F1000").Value
    ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HD = Feuil1.Range("A1:F1000").Value
    renvoient toutes deux un tableau à 2 dim qui contient les 6 colonnes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    HD = Application.Union(Range("A1:B1000"), Range("E1:F1000"))
    renvoie un tableau à 2 dim qui contient les 2 premières colonnes uniquement

    Le message de Patrick à 12h50 donne une solution performante (0.004 s sur mon très vieux pc) pour n'avoir que 4 colonnes ...

    Stéphane

  12. #12
    Membre habitué Avatar de Capitaine Kirk
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    98
    Détails du profil
    Informations personnelles :
    Localisation : Etats-Unis

    Informations forums :
    Inscription : Mars 2005
    Messages : 98
    Points : 128
    Points
    128
    Par défaut
    Bonsoir,

    Citation Envoyé par Stef999 Voir le message
    HD = Application.Union(Range("A1:B1000"), Range("E1:F1000"))
    renvoie un tableau à 2 dim qui contient les 2 premières colonnes uniquement
    Stéphane
    arf lol effectivement, j'aurais peut être dû tester avant, m'enfin le demandeur à trouvé satisfaction avec le code de Patrick c'est bien là le principal .
    Capitaine Kirk.

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

Discussions similaires

  1. tableau avec colonne de taille maxi
    Par dark vador dans le forum Balisage (X)HTML et validation W3C
    Réponses: 7
    Dernier message: 29/05/2007, 11h31
  2. remplir un tableau avec un autre
    Par sandball22 dans le forum C
    Réponses: 28
    Dernier message: 20/04/2007, 16h13
  3. [MySQL] remplir un tableau avec les noms des champs d'une table
    Par solidaritok dans le forum PHP & Base de données
    Réponses: 5
    Dernier message: 05/04/2007, 13h47
  4. Réponses: 8
    Dernier message: 11/03/2007, 18h10
  5. [C#] Comment remplir un tableau avec un arraylist
    Par Cazaux-Moutou-Philippe dans le forum Windows Forms
    Réponses: 9
    Dernier message: 22/06/2006, 15h14

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