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éation d'onglets dynamiquement


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 52
    Points : 38
    Points
    38
    Par défaut Création d'onglets dynamiquement
    Bonjour à tous,

    J'ai besoin d'aide en VB sur Excel,
    J'ai un tableau du type a ma disposition du style


    Modele Prix Age
    berline 120 5
    coupe 130 6
    cabriolet 145 7
    berline 160 8

    Pour chaque valeur de Modèle, je dois creér un onglet dynamiquement
    je dois donc obtenir :

    un onglet nommé "berline" avec les lignes
    Prix Age
    120 5
    160 8

    un onglet nommé "cabriolet" avec
    Prix Age
    145 7

    un onglet nommé coupé avec
    coupe 130 6


    Merci d'avance pour votre aide

  2. #2
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Février 2009
    Messages
    37
    Détails du profil
    Informations personnelles :
    Âge : 36
    Localisation : France, Sarthe (Pays de la Loire)

    Informations forums :
    Inscription : Février 2009
    Messages : 37
    Points : 24
    Points
    24
    Par défaut
    Bonjour,

    J'ai pas tout bien compris, mais voilà pour toi :

    Je ferais ça à l'aide d'un UserForm avec des TextBox à remplir et un bouton valider.

    pour créer un nouvel onglet et lui donner le nom que tu rentre dans ton TextBox1 :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    Private Sub CommandButton1_Click()
     
        Sheets.Add After:=Sheets(Sheets.Count)
        Sheets("Feuil1").Select
        Sheets("Feuil1").Name = UserForm1!TextBox1
     
        ActiveWorkbook.Save
        ActiveWorkbook.Close
     
    End Sub
    Ensuite deux méthodes, soit tu remplis directement les cellules avec

    [A3]=UserForm1!TexBox2 par exemple ou alors tu utilise un archiver:

    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
     
     
    Sheets("le_nom_de_ta_feuille").Select
    Range("la_cellule_ou_tu_commence").Select
     
    Do
    If ActiveCell.Value = "" Then
    GoTo archiver
    End If
    If ActiveCell.Value <> "" Then
    ActiveCell.Offset(1, 0).Select
    End If
     
    Loop Until ActiveCell.Value = ""
     
    archiver:
     
    ActiveCell.Value = USF_F!TextBox_F
    ActiveCell.Offset(0, 1).Select
    Explication : Offset (ligne, colonne)

    Bonne continuation.

    @+

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 255
    Points : 325
    Points
    325
    Par défaut
    Bonjour,

    en supposant ta feuille de données nommée "donnée", et que tu n'aies qu'un seul onglet (on peut adapter...)

    Et que ta base soit de la colonne A à la colonne C (on peut également adapter)

    Avec la méthode suivant, utilisant les filtres élaborés, tu créés une nouvelle feuille par modèle, et tu extrais les modèles concernés dans chaque feuille...

    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
    Sub extract()
    Dim DerLig As Long
    Dim I As Byte
    Dim Sh As Worksheet
    Application.DisplayAlerts = False
    Application.ScreenUpdating = False
    For Each Sh In Sheets
        If Sh.Name <> "donnees" Then Sh.Delete
    Next Sh
    With Sheets("donnees")
        DerLig = .Range("A65000").End(xlUp).Row
        .Range("A1:C" & DerLig).Name = "base"
        .Range("G1").Value = .Range("A1")
        .Range("A1:A" & DerLig).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("G1" _
            ), Unique:=True
        For I = 2 To .Range("G65000").End(xlUp).Row
            .Range("G2").Value = .Cells(I, 7).Value
            Sheets.Add After:=Sheets(Sheets.Count)
            .Range("base").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range("G1:G2"), _
                CopyToRange:=Range("A1"), Unique:=False
            ActiveSheet.Name = .Range("G2").Value
        Next I
        .Columns(7).Clear
        .Select
    End With
    Application.DisplayAlerts = True
    End Sub
    Essaie, et reviens, si problème...

  4. #4
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Merci beaucoup Mapeh. ça marche
    Je vais me pencher dans le code.

    Dans l'application réelle que je fais, je ne dois pas créer les onglets par rapport a la première colonne mais à la colonne x (disons colonne 7 ).

    Dans mon exemple ce serait par rapport à la colonne "Prix".

    Quelle modification est à faire dans le code que tu m'as fourni ?

    merci

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 255
    Points : 325
    Points
    325
    Par défaut
    Re-,

    tu as donc défini ta base...

    Pour extraire par rapport au prix, je suppose que tu veux extraire par rapport à une fourchette?

    Dans ce cas, il faut passer par une formule, pour le filtre élaboré....

    Si tu pouvais joindre un petit fichier zippé, sans données confidentielles, avec les fourchettes voulues (s'il s'agit bien de fourchettes... mais sinon, tu vas en avoir des onglets, pour chaque prix....)

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2008
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Juin 2008
    Messages : 52
    Points : 38
    Points
    38
    Par défaut
    Re:

    Ah excuse moi, je me suis mal exprimé. Le terme prix était juste un exemple effectivement mal adapté

    Disons que j'ai un fichier de ce type :

    Modele Ref Age
    berline b32 5
    coupe b130 6
    cabriolet b156 7
    berline b32 8

    Et je voudrais avoir un onglet pour chaque Ref.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    255
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 255
    Points : 325
    Points
    325
    Par défaut
    Re-,

    par ces 2 lignes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        .Range("G1").Value = .Range("A1")
        .Range("A1:A" & DerLig).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("G1" _
            ), Unique:=True
    tu extrais sans doublons tous les modèles....

    Si tu veux les Ref, change :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        .Range("G1").Value = .Range("B1")
        .Range("B1:B" & DerLig).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("G1" _
            ), Unique:=True
    afin d'obtenir toutes les Ref sans doublons...

    et ensuite, continue le code..

    Exécute le code en mode pas-à-pas (F8), et regarde en même temps sur l'onglet ce qui se passe, notamment en colonne G

    Remarque, si ta base va de A1:Kxxx, tu peux mettre l'extraction en colonne L, M.....

    Il te faut alors changer tout ce qui concerne G, par la colonne que tu as choisie : (Ici, j'ai pris la colonne M)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    .Range("M1").Value = .Range("B1")
        .Range("B1:B" & DerLig).AdvancedFilter Action:=xlFilterCopy, CopyToRange:=.Range("M1" _
            ), Unique:=True
        For I = 2 To .Range("M65000").End(xlUp).Row
            .Range("M2").Value = .Cells(I, 13).Value
            Sheets.Add After:=Sheets(Sheets.Count)
            .Range("base").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=.Range("M1:M2"), _
                CopyToRange:=Range("A1"), Unique:=False
            ActiveSheet.Name = .Range("M2").Value
        Next I
        .Columns(13).Clear

Discussions similaires

  1. Réponses: 9
    Dernier message: 20/12/2012, 19h28
  2. [XL-2007] Création d'onglet en fonction d'une colonne dynamique
    Par problemeaide dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 11/12/2012, 16h16
  3. [PowerBuilder] Création d'objets dynamiques
    Par Béné123456789 dans le forum Powerbuilder
    Réponses: 3
    Dernier message: 12/06/2006, 00h33
  4. Problème avec création de fenêtre dynamique
    Par FredericB dans le forum C++Builder
    Réponses: 3
    Dernier message: 29/09/2005, 17h21
  5. [FLASH MX2004] Création d'objet dynamiquement
    Par noarno dans le forum Flash
    Réponses: 3
    Dernier message: 15/12/2004, 11h00

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