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 :

Sélection tableau et automatisation copie


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Par défaut Sélection tableau et automatisation copie
    Bonjour,

    Je viens de commencer un nouveau job, et on me demande de faire une macro... Sauf que j'ai jamais touché à VBA!!!

    2 petites questions: j'ai un classeur composé de plusieurs onglets qui ont la même structure (1e colonne et 1e ligne identique). Il faut que je crée un nouvel onglet en copiant les lignes du 2e onglet, puis à la suite celles du 3e, puis celles du 4e, etc... (le 1er onglet, c'est le sommaire...)

    -comment on sélectionne un tableau SANS la 1e colonne (pour pouvoir le copier dans un nouvel onglet)?
    -et comment je fais pour automatiser le copiage de chaque onglet?


    Merci d'avance pour votre aide, je suis paumée!!!!

  2. #2
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    Bonjour, et bienvenue.

    Avant de répondre à ta question, je te signale un tutorial sympathique : lien.

    Et je te conseilles de jouer avec l'enregistreur de macros. Par exemple, lance l'enregistreur de macros (le bouton rouge dans la barre de menus Visual Basic), selectionne les colonnes que tu veux, copies-les, arrête l'enregistreur de macro, et va dans l'éditeur VBA(par Alt+F11 ou par le menu macros) pour regarder ce qu'il a fait.

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub Macro1()
    '
    ' Macro1 Macro
    ' Macro enregistrée le 18/02/2011 par 999277146
    '
     
    '
        Sheets("Feuil1").Select
        Columns("B:D").Select
        Selection.Copy
        Sheets("Feuil2").Select
        Columns("B:D").Select
        ActiveSheet.Paste
    End Sub

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Par défaut
    Merci pour le lien!

    J'ai joué avec l'enregisteur!!! Mais malheureusement, j'ai 26 onglets dans mon classeur, donc je n'ai pas forcément envie de rentrer 26 fois cette formule... Surtout que dans chaque onglet, j'ai un nombre de lignes différents...

  4. #4
    Modérateur
    Avatar de AlainTech
    Homme Profil pro
    Consultant informatique
    Inscrit en
    Mai 2005
    Messages
    4 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : Belgique

    Informations professionnelles :
    Activité : Consultant informatique
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2005
    Messages : 4 235
    Par défaut
    Dans ce cas, on en revient là:
    Citation Envoyé par el_slapper Voir le message
    Avant de répondre à ta question, je te signale un tutorial sympathique : lien.
    Et, principalement, à partir de la page 46, Les boucles.

    Une petite info pour t'aider, les feuilles d'un classeur forment une Collection (Sheets), qui peut être parcourue avec une boucle For... Each.

    Bon apprentissage.
    N'oubliez pas de cliquer sur quand vous avez obtenu ou trouvé vous-même la réponse à votre question.
    Si vous trouvez seul, pensez à poster votre solution. Elle peut servir à d'autres!
    Pensez aussi à voter pour les réponses qui vous ont aidés.
    ------------
    Je dois beaucoup de mes connaissances à mes erreurs!

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 3
    Par défaut
    Merci beaucoup, mais c'est bcp trop compliqué pour moi là...

    Tant pis, je vais le faire en manuel ; il faut que je rende mon fichier pour ce soir...

  6. #6
    Expert confirmé
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 814
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 814
    Par défaut
    Bon, clair que pour un(e) non programmeur, ça ne se fait pas en claquant des doigts.....


    tu n'auras peut-être pas le temps d'appliquer la formule, mais en relisant ton texte initial, je me dis qu'il peut être plus simple de copier tout le feuillet, puis d'effacer la première ligne. En outre, le for each sur une collection mouvante(puisqu'on rajoute des feuillets), ça me parait risqué et peu aisé à débogger.

    ça donne ça :

    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
    Sub DoubleSansPremiereLigne()
        Dim NombreInitial As Integer, NombreFinal As Integer
        Dim NombreActuel As Integer
        Dim FeuilletEnCours As Integer
     
        NombreInitial = Sheets.Count
        NombreActuel = NombreInitial
        NombreFinal = NombreInitial * 2
     
        Application.ScreenUpdating = False
     
        'on boucle sur tous les feuillets existants pour les copier
        For FeuilletEnCours = 1 To NombreInitial
            Sheets(FeuilletEnCours).Copy after:=Sheets(NombreActuel)
            NombreActuel = NombreActuel + 1
        Next FeuilletEnCours
     
        'on boucle sur tous les feuillets en cours pour supprimer la première ligne
        For FeuilletEnCours = (NombreInitial + 1) To NombreFinal
            Sheets(FeuilletEnCours).Rows(1).ClearContents
        Next FeuilletEnCours
     
        Application.ScreenUpdating = True
     
    End Sub
    testé et vérifié : ça copie l'intégralité des feuillets, et ça efface le contenu de la première ligne dans toutes les cibles.

    EDIT : si en plus tu dois donner un nom plus explicite à tes feuillets, il faut taper, dans la deuxième boucle, dans la propriété
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets(FeuilletEnCours).Name
    , que tu assignes ensuite en fonction de ton besoin

  7. #7
    Expert confirmé
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    4 128
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 128
    Par défaut
    Salut
    Je n'ai pas testé, mais je ferais un truc du genre

    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
    26
    27
    28
    29
    Dim NbrLigne As Long
    Dim Ws_Bout As Worksheet
    Dim TheSheet As Worksheet
     
     
    'On rajoute un onglet
    Set Ws_Bout = Sheets.Add
    Ws_Bout.Name = "Total"
     
    'On boucle sur tous les onglets du classeur
    For Each TheSheet In Sheets
        'Si c'est notre nouvelle onglet on passe au suivant
        If TheSheet <> Ws_Bout Then
            'En partant du principe que les entetes sont en ligne 1
            'On determine le nomnre de colonnes a copier
            NbrCol = TheSheet.Cells(1, Columns.Count).End(xlToLeft).Column 'la derniere entet non vide
     
            'Je suppose que la colonne A aura toujours en valeur par enregistrement
            NbrLigne = TheSheet.Cells(Rows.Count, "A").End(xlUp)
     
            'On verifie que notre tableau contient bien des données
            If NbrLigne > 1 Then
                'On copie les données et on les colle a la suite
                TheSheet.Range("A2", .Cells(NbrLigne, NbrCol)).Copy Ws_Bout.Cells(Rows.Count, "A").End(xlUp)
            End If
        End If
    Next
     
    End Sub
    ++
    Qwaz

    MagicQwaz := Harry Potter la baguette en moins
    Le monde dans lequel on vit
    Ma page perso DVP
    Dernier et Seul Tutoriel : VBA & Internet Explorer
    Dernière contribution : Lien Tableau Structuré et UserForm
    L'utilisation de l’éditeur de message

Discussions similaires

  1. Réponses: 1
    Dernier message: 20/04/2009, 16h26
  2. Recherche dans tableau 2 dimension / Copie tableau 2 dimension vers 1
    Par mustang-ffw02 dans le forum Windows Forms
    Réponses: 6
    Dernier message: 20/10/2007, 19h50
  3. Sélection Tableau extensible
    Par billout rm dans le forum InfoPath
    Réponses: 4
    Dernier message: 30/07/2007, 18h50
  4. [Tableau]Problèmes avec copie de tableau
    Par Itachi-san dans le forum Collection et Stream
    Réponses: 13
    Dernier message: 25/11/2005, 18h23

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