Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 20/12/2011, 12h03   #1
Invité de passage
 
Homme
Administrateur de base de données
Inscription : décembre 2011
Messages : 3
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 : 3
Points : 0
Points : 0
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
OZ1977 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 15h44   #2
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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
Citation:
A1 | B1 | C1
A3 | B3 | C3
et en feuille E
Citation:
A2 | B2 | C2
???
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 15h58   #3
Invité de passage
 
Homme
Administrateur de base de données
Inscription : décembre 2011
Messages : 3
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 : 3
Points : 0
Points : 0
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
Type de fichier : xls proj1.xls (28,5 Ko, 3 affichages)
OZ1977 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 16h21   #4
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
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 :
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
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/12/2011, 21h34   #5
Invité de passage
 
Homme
Administrateur de base de données
Inscription : décembre 2011
Messages : 3
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 : 3
Points : 0
Points : 0
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.
OZ1977 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/12/2011, 08h31   #6
Membre Expert
 
Avatar de ZebreLoup
 
Homme Sebastien L
Ingénieur Financier
Inscription : mars 2010
Messages : 880
Détails du profil
Informations personnelles :
Nom : Homme Sebastien L
Âge : 33
Localisation : France, Val de Marne (Île de France)

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

Informations forums :
Inscription : mars 2010
Messages : 880
Points : 1 867
Points : 1 867
  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
ZebreLoup est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 20h30.


 
 
 
 
Partenaires

Hébergement Web