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 par variable [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Par défaut Créer une feuille par variable
    Bonjour,

    J'ai une base de données avec pour chaque ligne :
    nom, date de naissance, Variable x, Variable y, Variable z....

    Il y a plusieurs lignes avec le même nom et des noms différents.

    Je souhaite créer une feuille par nom avec toutes les lignes correspondantes à ce nom dans le même classeur.

    Je ne sais pas si je suis très clair..

    Mes connaissances en VBA sont trop faibles, je ne sais pas par quel bout attaquer

    Merci pour votre aide.

    Merci d'avance
    Amicalement
    Jean-François

  2. #2
    Membre expérimenté
    Homme Profil pro
    Inscrit en
    Octobre 2012
    Messages
    199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Octobre 2012
    Messages : 199
    Par défaut
    Bonsoir,

    A mettre dans un module

    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 creer_feuille()
     
    Dim cpt_l As Integer, der_lig As Integer, cpt_col As Integer
    Dim leNom As String
     
    For cpt_l = 1 To Sheets("Feuil1").Range("a" & Rows.Count).End(xlUp).Row
        leNom = Trim(Sheets("Feuil1").Cells(cpt_l, 1))
     
        If feuille_existe(leNom) = False Then 'Si la feuille n'exite pas
            Sheets.Add After:=Sheets(Sheets.Count) 'Ajout d'une feuille
            ActiveSheet.Name = leNom
        End If
     
        'derniere ligne de la feuille créee
        der_lig = Sheets(leNom).Range("a" & Rows.Count).End(xlUp).Row + 1
        Sheets("Feuil1").Activate
        Sheets("Feuil1").Cells(cpt_l, 1).EntireRow.Copy
        Sheets(leNom).Cells(der_lig, 1).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
    Next cpt_l
     
    End Sub
    et la fonction feuille_existe

    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
     
     
     
    Function feuille_existe(laFeuille) As Boolean
     
    Dim w As Integer
     
    feuille_existe = False
     
    For w = 1 To Worksheets.Count
        If Sheets(w).Name = laFeuille Then
            feuille_existe = True
            Exit For
        End If
    Next w
     
    End Function
    Cordialement

  3. #3
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    bonjour,

    ça évoque la génération de rapports de TCD vers de nouvelles feuilles.
    Est-il vraiment utile de créer une feuille par nom?

    voilà un code à tester:
    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
    50
    51
    52
    53
    54
    55
    56
     
    Option Explicit
     
    Sub generer_rapport_Noms()
        Dim nom As String, data As Range, trans As Range
        Dim e As Integer, c As Integer
     
        'précautions
        With Application
            e = .EnableEvents
            c = .Calculation
            .EnableEvents = False
            .ScreenUpdating = False
            .Interactive = False
            .Calculation = xlCalculationManual
        End With
     
        On Error GoTo fin
     
        Sheets.Add 'ajoute une feuille pour les manipulations
        Worksheets("données sources").Range("a1").CurrentRegion.Copy ActiveSheet.Range("a1")
     
        Set trans = ActiveSheet.Range("a1").CurrentRegion
        Set data = trans.Range(Cells(2, 1), Cells(trans.Rows.Count, trans.Columns.Count)) ' épargne la ligne d'en tête
        nom = ActiveSheet.Name
        trans.AutoFilter 1, data.Cells(2, 1)
     
        Do
     
            If trans.End(xlDown).Row <= trans.Rows.Count Then
                Sheets.Add
                ActiveSheet.Name = Mid(WorksheetFunction.Clean(data.Cells(2, 1)), 1, 30) 'précaution pour des noms contenant certains caractères
                trans.CurrentRegion.Copy
                ActiveSheet.Paste
                data.SpecialCells(xlCellTypeVisible).EntireRow.Delete
     
            End If
     
            If trans.Rows.Count > 1 Then trans.AutoFilter 1, data.Cells(2, 1)
     
        Loop Until trans.Rows.Count = 1
     
    fin:
        If Err Then MsgBox Err.Description: Err.Clear
     
        Set trans = Nothing
        Worksheets(nom).Delete
     
        With Application
            .ScreenUpdating = True
            .Interactive = True
            .EnableEvents = e
            .Calculation = c
        End With
     
    End Sub

  4. #4
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Par défaut
    Bonjour,

    Merci pour votre aide. Je teste vos solutions dans la journée et je vous tiens au courant.

    Pour répondre à NVCfrm : oui la création d'une feuille par nom est obligatoire puisque chaque feuille est destinée à devenir une demande individuelle de renseignements. Sinon, effectivement, un tableau croisé dynamique aurait fait l'afffaire et ça je maîtrise .

    Bonne journée
    Jean-François

    Re bonjour,

    J'ai testé les deux solutions proposées.

    Code de Goldstar: Création d'une feuille par nom mais absence de ligne titre (ligne 1 vide). De plus, création d'une feuille "Nom" qui ne contient que la ligne titre en ligne 2. Nb lignes récupérées par feuille OK.

    Code de NVCfrm : Création d'une feuille par nom avec ligne de titre mais toutes les lignes ne sont pas récupérées dans les feuilles créées.

    Question annexe : à quel endroit de votre code puis-je intercaler un code de mise en forme des feuilles créées ?

    Merci de l'attention que vous portez à mon problème

    Amicalement
    Jean-François

  5. #5
    Membre extrêmement actif
    Avatar de NVCfrm
    Homme Profil pro
    Administrateur Système/Réseaux - Developpeur - Consultant
    Inscrit en
    Décembre 2012
    Messages
    1 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations professionnelles :
    Activité : Administrateur Système/Réseaux - Developpeur - Consultant
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Décembre 2012
    Messages : 1 037
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Belphegor59 Voir le message
    Re bonjour,

    J'ai testé les deux solutions proposées.

    Code de Goldstar: Création d'une feuille par nom mais absence de ligne titre (ligne 1 vide). De plus, création d'une feuille "Nom" qui ne contient que la ligne titre en ligne 2. Nb lignes récupérées par feuille OK.

    Code de FVCfrm : Création d'une feuille par nom avec ligne de titre mais toutes les lignes ne sont pas récupérées dans les feuilles créées.

    Question annexe : à quel endroit de votre code puis-je intercaler un code de mise en forme des feuilles créées ?

    Merci de l'attention que vous portez à mon problème

    Amicalement
    Jean-François
    Salut, j'allais répondre "pas de raisons que des lignes soient ignorées avant de relire le code que j'ai posté. Le bug se situe dans la ligne 39.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If trans.Rows.Count > 1 Then trans.AutoFilter 1, data.Cells(2, 1)
    corriger
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If trans.Rows.Count > 1 Then trans.AutoFilter 1, trans.Cells(2, 1)
    pour la question annexe, ce n'est qu'après la création de la feuille.

    Et voilà que la question: est-il vraiment nécessaire de créer une feuille par feuille? me revient à nouveau.
    j'imagine une base comportant quelques milliers de noms différents. une forêt de feuilles à parcourir... au galop

  6. #6
    Membre averti
    Homme Profil pro
    Inscrit en
    Septembre 2010
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Septembre 2010
    Messages : 21
    Par défaut
    Re Bonjour

    Génial, ça fonctionne parfaitement ! Merci beaucoup.

    Ma base de données ne contient au maximum que 60 noms. Comme c'est destiné à faire une demande de renseignements, envoyée par courrier pour réponse écrite, le TCD n'est pas valable.

    Amicalement
    Jean-François

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

Discussions similaires

  1. Modification d'une feuille par codename variable
    Par P4board dans le forum Macros et VBA Excel
    Réponses: 25
    Dernier message: 01/12/2020, 18h20
  2. [XL-2007] créer une macro par un bouton sur ma feuille
    Par timtof2011 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 08/09/2011, 20h48
  3. Créer une feuille par élément d'une liste.
    Par Lucci dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 07/07/2008, 20h54
  4. [VBA Excel] Remettre toute une feuille par défaut
    Par loacast dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/12/2005, 16h56
  5. [VB.NET]Créer une instance par page
    Par Dnx dans le forum ASP.NET
    Réponses: 20
    Dernier message: 31/10/2005, 13h22

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