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 plusieurs feuille Excel à partir d'un Tableau Variant de VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 10
    Par défaut Remplir plusieurs feuille Excel à partir d'un Tableau Variant de VBA
    Bonjour à tous,

    J'ai un petit problème sur un code que je suis en train de réaliser.

    Sous VBA après avoir rempli un tableau de type Variant de par exemple 26 colonnes et 12 lignes j'aimerai extraire chaque colonne du tableau et mettre un colonne par feuille.

    Par exemple j'ai 26 feuilles : a, b, c, d, e, f etc....
    et j'aimerai que la feuille a colonne 1 = 1ere colonne du tableau
    feuille b colonne 1 = 2ème colonne du tableau
    feuille c colonne 1 = 3ème colonne du tableau etc

    j'ai tenté de mettre le nom des feuilles dans une liste

    et d'essayer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    for j =1 to 26
     
    for each zy in liste
    nom=zy.Value
     
    for i=1 to 12
     
    Sheets(nom).Cells(i,1)=Tableau(i,j)
     
    Next i
    Next zy
    Next j
    Mais comme vous vous en doutez cela ne marche pas. La même opération est effectuée sur chaque feuille et ce pour chaque j....

    Auriez vous une idée pour résoudre ce problème ?

    Merci beaucoup pour votre aide !

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    il manque pas mal d'info

    est-ce que les feuilles se suivent dans excel ?
    ton tableau de 26 colonnes est déjà rempli ? D'ailleurs d'où proviennent ces données ?
    où doivent être collées les données dans chaque feuille ?


    une piste qui souffre des imprécisions que j'ai soulevé
    j'ai construit un tableau exemple, je pars du principe que les feuilles sont pas dans l'ordre (donc je dois toutes les nommer dans un tableau) et on doit coller les données à partir de A1

    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
    Option Base 1
    Sub toto()
    Dim Tableau(1000, 26)
    Dim ListeFeuille()
     
    ' on construit un tableau avec l'ordre des feuilles
    ' si elles ne sont pas ordonnées correctement dans Excel
    ' (sinon on a juste besoin de connaître le nom de la première feuille !
    ListeFeuille = Array("Feuil1", "Feuil2", "Feuil3", "Feuil4", "Feuil5") ' etc ... jusque Feuil26
     
    ' remplissage de Tableau pour illustrer la procédure uniquement
    For i = LBound(Tableau, 1) To UBound(Tableau, 1)
        For j = LBound(Tableau, 2) To UBound(Tableau, 2)
            Tableau(i, j) = CStr(i) & "|" & CStr(j)
        Next j
    Next i
     
    ' pour chaque colonne .... attention dans cet exemple j'utilise que 5 feuilles au lieu des 26
    ' donc si tu lances ceci en l'état, tu auras une erreur VBA quand il voudra trouver la 6ème feuille ...
        For i = LBound(Tableau, 2) To UBound(Tableau, 2)
            ' on met dans la feuille                ' à partir de A1 et sur les 1000 lignes             la colonne
            ThisWorkbook.Worksheets(ListeFeuille(i)).Cells(1, 1).Resize(UBound(Tableau, 1), 1).Value = Application.Index(Tableau, , i)
        Next i
    End Sub

  3. #3
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 10
    Par défaut
    Bonjour,

    Tout d'abord merci pour ta réponse.

    Oui les feuilles se suivent bien dans l'ordre dans mon classeur excel.
    Les données du tableau sont remplies de la même manière que le tien pour le test que je suis en train de faire avant de réadapter sur un autre tableau.
    (Sauf que j'ai mis Tableau(i, j) = i+1)

    J'aimerai copier la première colonne du tableau dans la Feuil 1 à partir de la cellule A2, puis copier la deuxième colonne du tableau dans la Feuil 2 à partir de la cellule A2 aussi, et la troisième colonne du tableau dans la Feuil 3 à partir de la cellule A2 etc...

    J'ai essayé de lancer ton code, avec Dim Tableau(1000,2) et ListeFeuille=Array("Feuil1", "Feuil2").
    mais cela m'indique que ThisWorkbook.Worksheets(ListeFeuille(i)).Cells(1, 1).Resize(UBound(Tableau, 1), 1).Value = Application.Index(Tableau, , i) n'appartient pas à l'indice de sélection...

  4. #4
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 10
    Par défaut
    ah, j'ai essayé de mettre dans un nouveau module vierge sans ligne de code au dessus et ton code marche parfaitement !

  5. #5
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    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 169
    Billets dans le blog
    5
    Par défaut
    C'est normal

    le code est taillé pour avoir 26 feuilles à peupler, je l'ai indiqué en commentaire

    Si tu dois peupler à partir de A2 tu remplaces Cells(1,1) par Cells(2,1)


    Si les feuilles se suivent, et que tu es CERTAINE qu'elles ne changeront pas de place, nul besoin d'un tableau avec les 26 feuilles

    Créer un classeur vierge avec 26 feuilles
    Met cette procédure dans un module standard du classeur
    Adapte le nom de ta première feuille si c'est pas "Feuil1"
    Lance et regarde si c'est ce que tu souhaites
    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
    Option Base 1
    Sub toto()
    Dim Tableau(1000, 26)
    Dim FeuilleDepart As String, PositionFeuille As Long
     
    FeuilleDepart = "Feuil1"  ' la première feuille
    ' on va calculer son indice - 1  dans la collection des feuilles pour traiter tes 26 feuilles
    PositionFeuille = ThisWorkbook.Worksheets(FeuilleDepart).Index - 1
     
    For i = LBound(Tableau, 1) To UBound(Tableau, 1)
        For j = LBound(Tableau, 2) To UBound(Tableau, 2)
            Tableau(i, j) = CStr(i) & "|" & CStr(j)
        Next j
    Next i
     
    For i = LBound(Tableau, 2) To UBound(Tableau, 2)
        ThisWorkbook.Worksheets(PositionFeuille + i).Cells(2, 1).Resize(UBound(Tableau, 1), 1).Value = Application.Index(Tableau, , i)
    Next i
    End Sub

  6. #6
    Membre habitué
    Femme Profil pro
    Étudiant
    Inscrit en
    Août 2017
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Août 2017
    Messages : 10
    Par défaut
    Oui c'est exactement ça !
    Merci beaucoup pour ton aide !

Discussions similaires

  1. [XL-2007] Remplir une feuille Excel à partir d'un UserForm
    Par djgreg971 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/12/2013, 15h03
  2. Réponses: 1
    Dernier message: 07/07/2008, 16h16
  3. Réponses: 0
    Dernier message: 04/04/2008, 13h22
  4. feuille excel à partir d'un tableau
    Par maumau68 dans le forum Excel
    Réponses: 3
    Dernier message: 04/10/2007, 16h58
  5. Réponses: 5
    Dernier message: 05/07/2005, 20h25

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