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 :

Créer une feuille et copier des lignes en fonction de la valeur d'une cellule


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut Créer une feuille et copier des lignes en fonction de la valeur d'une cellule
    A B C D E
    A1 B1 C1 1 0
    A2 B2 C2 0 1
    A3 B3 C3 1 0



    Sur une ma Feuil1=Sommaire, j'ai un tableau à 5 colonnes minimum (ci-dessus)
    Les 3 premières colonnes servent de descriptions/définitions d'indicateurs
    Les 4ème et 5ème colonnes font référence à des projets - il y en aura plus que 2
    Je vais inviter les utilisateurs à sélectionner dans la liste des indicateurs (A1 à An) ceux qu'ils souhaitent mettre en place pour leur projet.

    J'aimerais qu'ensuite les lignes correspondant aux indicateurs sélectionnés (0 ou 1) soient automatiquement copiées dans une autre feuille

    Par exemple, pour le projet D, je souhaite que soient copiées les lignes 1, 2 et 4 sur la Feuil2=D et pour le projet E les lignes 1 et 3 sur la Feuil3=E

    Le top serait même qu'une nouvelle feuille se crée automatiquement avec le nom du projet (=valeur de l'en-tête de colonne) et remplie avec les lignes sélectionnées pour chaque projet

    je suis un peu novice en macro et VBA et je ne sais pas par où commencer

    merci pour votre aide

  2. #2
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Je ne comprends pas bien ton exemple, il y a 3 lignes dans le tableau et tu parles des lignes 1, 2 et 4...

    en partant du tableau, tu voudrais en feuille D
    A1 | B1 | C1
    A3 | B3 | C3
    et en feuille E
    A2 | B2 | C2
    ???
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  3. #3
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut
    Bonjour Zebreloup,

    merci de te pencher sur mon pb...

    La ligne 1 correspond à un en-tête que je souhaite voir apparaître sur chaque feuille créée

    Avec un fichier exemple ce sera plus parlant (je ne voulais pas le mettre pour respecter les recommandations du forum).

    j'espère que ce sera plus clair ?

    Merci pour ton aide
    Fichiers attachés Fichiers attachés

  4. #4
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    Un exemple de code à insérer dans un module. J'ai essayer de le commenter mais je suis à ta disposition si tu as des questions.
    J'ai fait des copier-coller pour garder ton format et par souci de simplicité, mais j'avoue qu'en général je n'aime pas trop ça, on aurait pu copier les valeurs et gérer la mise en forme de manière plus précise.
    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
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    Option Explicit
     
    Public Sub RepartitionIndicateursProjets()
        Application.EnableEvents = False 'Pour ne pas que ton Worksheet_Change ne se déclenche
     
        Dim wsSomm As Worksheet
        Dim wsProjet As Worksheet
        Dim iCol, iRow, newRow As Integer
     
        Set wsSomm = Worksheets("Sommaire") 'La feuille principale
     
        iCol = 4
     
        'On boucle sur les colonnes des différents projets
        Do While wsSomm.Cells(1, iCol).Value <> ""
            'On regarde si la feuille correspondante existe, sinon on la crée
            On Error Resume Next
            Set wsProjet = Worksheets(wsSomm.Cells(1, iCol).Value)
            If Err.Number <> 0 Then
                Set wsProjet = Worksheets.Add
                wsProjet.Name = wsSomm.Cells(1, iCol).Value
            End If
            On Error GoTo 0
     
            'On prépare la mise ne forme
            wsProjet.Cells.Clear
            wsSomm.Range("A1:C1").Copy
            wsProjet.Paste wsProjet.Range("A1")
     
            'On boucle sur les lignes
            iRow = 2
            newRow = 2
            Do While wsSomm.Cells(iRow, iCol).Value <> "" 'Tant qu'il y a une valeur
                If wsSomm.Cells(iRow, iCol).Value = 1 Then 'Si on a 1 dans la colonne correspondante
                    'On copie la ligne
                    wsSomm.Range(wsSomm.Cells(iRow, "A"), wsSomm.Cells(iRow, "C")).Copy
                    wsProjet.Paste wsProjet.Cells(newRow, "A")
     
                    newRow = newRow + 1 'Ligne suivante dans l'onglet du projet
                End If
     
                iRow = iRow + 1 'Ligne suivante dans le sommaire
            Loop
     
            iCol = iCol + 1 'On change de colonne
        Loop
     
        Application.EnableEvents = True
    End Sub
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

  5. #5
    Membre régulier
    Homme Profil pro
    Administrateur de base de données
    Inscrit en
    Décembre 2011
    Messages
    257
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Santé

    Informations forums :
    Inscription : Décembre 2011
    Messages : 257
    Points : 76
    Points
    76
    Par défaut
    Merci pour ta réponse express...
    çà marche presque comme je le souhaite.
    Je vais essayer de comprendre le code pour essayer de le corriger pcq j'ai quelques remarques :
    1. J'aimerais que les feuilles qui se créée se mettent à la suite de ma feuille Sommaire
    2. J'aimerais que seules les feuilles projets pour lesquelles les indicateurs ont été sélectionnés ne se créée. Avec ton code, même si les cellules de la colonne E (E2 à E4) ne sont pas renseignées, une feuille E se crée avec uniquement les en-tête de colonne
    3. J'aimerais que le code ne se déclenche que lorsque la dernière cellule de la colonne (D4 ou E4) est renseignée (en O ou 1)
    4. A la fin de l'exécution de la commande, les dernières lignés copiées sont encore sélectionnées

    Merci pour cette excellente base de réflexion et le côté didactique de ton explication.

  6. #6
    Membre chevronné Avatar de ZebreLoup
    Homme Profil pro
    Ingénieur Financier
    Inscrit en
    Mars 2010
    Messages
    994
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur Financier
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 994
    Points : 2 131
    Points
    2 131
    Par défaut
    1. Regarde l'aide sur la fonction Worksheets.Add, il y a des options pour placer la feuille où tu veux
    2. Soit tu recherches avant s'il y a des 1 sur la colonne (regarde du coté de Find), soit tu effaces la feuille si newRow vaut toujours 2 (pas très optimal)
    3. Appelle la macro sur l'évènement Worksheet_Change après avoir vérifier que tout le reste de la colonne est rempli
    4. Pour une fois, tu peux faire un Activate ou un Select pour retourner où tu veux
    « Compter en octal, c’est comme compter en décimal, si on n’utilise pas ses pouces » - Tom Lehrer
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste. » - Steve McConnell

Discussions similaires

  1. Copier coller des lignes en fonction de la valeurs d'une cellule
    Par Tyu38 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/09/2014, 09h38
  2. [XL-2010] Supprimer des lignes en fonction de la valeur de la cellule de deux colonnes
    Par jérémyp8 dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 18/07/2013, 09h25
  3. [XL-2010] Colorer des lignes en fonction de la valeur d'une colonne
    Par antoninr dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 24/01/2013, 13h33
  4. [XL-2010] supprimer des lignes en fonction de la valeur de la cellule d'une colonne
    Par psylo24 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/11/2012, 13h09
  5. protection d'une feuille et supprimer des lignes
    Par courti01 dans le forum Excel
    Réponses: 6
    Dernier message: 09/06/2010, 18h45

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