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 :

TRI avec création d'une nouvelle feuille à chaque nom


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Par défaut TRI avec création d'une nouvelle feuille à chaque nom
    Bonjour tout le monde,

    J'aimerais créer une nouvelle feuille à chaque tri effectué, avec les données des 3 colonnes copiées dans la nouvelle feuille.

    Nom : Screen Shot 2018-07-30 at 13.45.10.png
Affichages : 435
Taille : 197,3 Ko

    J'ai réussi à faire un module seulement pour obtenir ce que je veux pour "Ambassade de Bretagne", mais j'aimerais qu'à la fin de celui-ci, le module poursuive sur "Anticafé Beaubourg" et ainsi de suite, afin de créer autant de feuille qu'il y a de nom de restaurants différents dans la colonne C. :

    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
    Sub creafeuille()
    '
    ' creafeuille Macro
    '
     
    '
        ActiveSheet.Range("$A$1:$C$41979").AutoFilter Field:=3, Criteria1:= _
            "Ambassade de Bretagne"
        Range(Selection, Selection.End(xlToLeft)).Select
        Range(Selection, Selection.End(xlUp)).Select
        Range(Selection, Selection.End(xlToLeft)).Select
        Selection.Copy
        Sheets.Add
        ActiveSheet.Paste
        ActiveSheet.Name = Range("C2").Text
    End Sub
    Je pense qu'il faut que je fasse une sorte de loop, mais je ne maitrise malheureusement que les loops avec des nombres entiers.

    Quelqu'un aurait des tips ?

    Merci

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour Thib, bonjour le forum,

    Essaie comme ç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
    26
    27
    28
    29
    Sub Macro1()
    Dim OS As Worksheet 'déclare la variable OS (Onglet Source)
    Dim OD As Worksheet 'déclare la variable OD (Onglet Destination)
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim D As Object 'déclare la variable D (Dictionnaire)
    Dim I As Long 'déclare la variable I (incrément)
     
    Set OS = Worksheets("Feuil1") 'définit l'onglet source OS (à adapter à ton cas)
    TV = OS.Range("A1").CurrentRegion 'définit le tableau des valeurs TV
    Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
    For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        If Not D.exists(TV(I, 3)) Then 'condition 1 : si la clé n'existe pas dans le dictionnaire
            D.Add TV(I, 3), I 'ajoute la clé au dictionnaire
            On Error Resume Next 'gestion des erreurs (en cas d'erreur passe a la ligne suivante)
            Set OD = Worksheets(TV(I, 3)) 'définit l'onglet destination OD (génère une erreur si l'onglet n'existe pas)
            If Err <> 0 Then 'condition 2 : si un erreur a été générée
                Err.Clear 'supprime l'erreur
                Worksheets.Add After:=Sheets(Sheets.Count) 'ajoute un onglet en dernière position
                Set OD = ActiveSheet 'définit l'onglet destination OD
                OD.Name = TV(I, 3) 'renomme l'onglet
            End If 'fin de la condition 2
            On Error GoTo 0 'annule la gestion des erreurs
            OD.Cells.ClearContents 'efface le contenu de l'onglet destinatin (au cas où...)
            OS.Range("A1").CurrentRegion.AutoFilter Field:=3, Criteria1:=TV(I, 3) 'filtre l'onglet source avec la donnée ligne I colonne 3
            OS.Range("A1").CurrentRegion.SpecialCells(xlCellTypeVisible).Copy OD.Range("A1") 'copie les cellules visibles et le colle dans A1 de l'onglet destination
            OS.Range("A1").CurrentRegion.AutoFilter 'supprime le filtre automatique
        End If 'fin de la condition 1
    Next I 'prochaine ligne de la boucle
    End Sub

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par thib.gueraud Voir le message
    Je pense qu'il faut que je fasse une sorte de loop, mais je ne maitrise malheureusement que les loops avec des nombres entiers.
    Je te conseille de lire ceci : http://silkyroad.developpez.com/vba/boucles/

  4. #4
    Nouveau membre du Club
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juillet 2018
    Messages
    5
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Juillet 2018
    Messages : 5
    Par défaut
    Hello Thauthème

    Merci pour ta réponse

    J'ai quelques questions :

    Je ne comprends pas trop à quoi correspondent les lignes suivantes :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Set D = CreateObject("Scripting.Dictionary") 'définit le dictionnaire D
    For I = 2 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV (en partant de la seconde)
        If Not D.exists(TV(I, 3)) Then 'condition 1 : si la clé n'existe pas dans le dictionnaire
            D.Add TV(I, 3), I 'ajoute la clé au dictionnaire
    D'autant plus qu'un message d'erreur s'affiche dès la lecture de la ligne Set D = ...

    Nom : Screen Shot 2018-08-01 at 15.00.44.png
Affichages : 359
Taille : 103,2 Ko

    J'ai cherché de quelle manière résoudre ce problème, en vain.

    Merci beaucoup

  5. #5
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Re,

    J'ai ce genre de message quand j'orthographie mal : Scripting.Dictionary. J'ai testé le code sur un fichier avant de te l'envoyé. Je n'ai pas eu de message d'erreur et le résultat correspondait à ta requête... L'utilisation d'un objet Dictionary permet, entre autre, d'éviter les doublons...

Discussions similaires

  1. Création d'une nouvelle feuille à chaque nouvelle donnée filtrée
    Par oz2007 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 30/04/2018, 16h19
  2. [XL-2003] Création d'une nouvelle feuille si elle n'existe pas
    Par panda31 dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 05/08/2011, 14h22
  3. Réponses: 13
    Dernier message: 21/02/2011, 20h33
  4. [XL-2007] Macro de création d'une nouvelle feuille dans un classeur
    Par jahnaz dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/06/2010, 08h33
  5. [XL-2003] Création d'une nouvelle feuille pour une liste de fichier
    Par Cedrick dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 01/07/2009, 17h53

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