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 des données et classeur (Macro) [Débutant(e)]


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Inscrit en
    Juin 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations forums :
    Inscription : Juin 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Tri des données et classeur (Macro)
    Bonjour à tous,

    Je me permets de solliciter votre aide pour une action que je souhaiterai faire sous Excel dans le cadre de mon boulot.
    Pour information, je suis une vraie novice dans les macros... mais je suis capable de copier-coller un code.

    Alors je vous explique :

    J'ai un tableau de données par exemple (cf. pièce jointe).
    De celui-ci, je souhaiterai faire en sorte que soit extrait dans un autre classeur Excel les données par "entité".
    En gros, qu'un classeur Excel soit crée avec toutes les données de l'entité "a". Puis qu'un autre classeur soit crée avec toutes les données de l'entité "b" et ainsi de suite...
    C'est une forme de tri des données mais par classeur.

    Est-ce possible ? Si oui, quelle serait la manip à faire pour y arriver ?

    J'espère que vous pourrez m'aider à résoudre cette énigme !
    Images attachées Images attachées  

  2. #2
    Membre confirmé Avatar de Bear the french
    Homme Profil pro
    Inscrit en
    Mai 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Saône et Loire (Bourgogne)

    Informations forums :
    Inscription : Mai 2012
    Messages : 353
    Points : 633
    Points
    633
    Par défaut
    Bonjour,

    Oui, c'est possible.

    Plutôt que de créer un classeur par entité, je te propose déjà d'observer comment créer un onglet par entité.
    J'ai écrit un code valable pour une feuille nommée "Feuil1" et pour un tableau de 4 colonnes maximum et de 65.000 lignes maximum.
    Le tableau est donc sur les colonnes A,B,C,D et la première ligne ne compte pas (car ce sont les entêtes de colonne).


    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
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    Sub creation_onglet_tri()
     
     
    'Déclaration des variables
    Dim Lig, compte, i, j             As Long
    Dim Col                           As String
    Dim Cell, Plage                   As Range
    Dim Un                            As Collection
     
     
    'Initialisation des variables
    Lig = 2
    Col = "A"                           ' colonne de la donnée non vide à tester
    compte = 0
    Set Un = New Collection             ' création liste des éléments uniques
    Set Plage = Range("A2:A65536")      ' zone de critère et de recherche
     
     
    With Sheets("Feuil1")               ' feuille source
     
        On Error Resume Next
     
        'Boucle sur la plage de cellule
        For Each Cell In Plage
            'If Cell <> "" Permet de ne pas prendre en compte les cellules vides
            'Un.Add Cell, CStr(Cell) Ajoute le contenu de la cellule dans la collection
            If Cell <> "" Then Un.Add Cell, CStr(Cell)
        Next Cell
     
        On Error GoTo 0
     
        'Boucle sur les éléments de la collection.
        For i = 1 To Un.Count
            ' Création d'un onglet unique par article
            '.Cells(i, "E").Value = Un.Item(i)
            Sheets.Add
            ActiveSheet.Name = Un.Item(i)
        Next i
     
     
    ' compteur du nombre de lignes à trier
    While .Cells(Lig, "A").Value <> ""
    DoEvents
     
        compte = compte + 1
        Lig = Lig + 1
     
    Wend
     
     
    ' Sélectionne chacune des lignes et va chercher le premier espace vide dans l'onglet correspondant
    For Lig = 2 To compte + 1
     
                j = 1
     
                While Sheets(.Cells(Lig, Col).Value).Cells(j, "A").Value <> ""
                DoEvents
                    j = j + 1
                Wend
     
                Sheets(.Cells(Lig, Col).Value).Cells(j, "A").Value = .Cells(Lig, "A").Value
                Sheets(.Cells(Lig, Col).Value).Cells(j, "B").Value = .Cells(Lig, "B").Value
                Sheets(.Cells(Lig, Col).Value).Cells(j, "C").Value = .Cells(Lig, "C").Value
                Sheets(.Cells(Lig, Col).Value).Cells(j, "D").Value = .Cells(Lig, "D").Value
     
    Next Lig
     
    Set Un = Nothing
     
    End With
     
    End Sub
    Si tu arrives à comprendre le code, tu pourras l'adapter

    Bertrand

Discussions similaires

  1. Probléme tri des donnée de sortie
    Par jeannotmer dans le forum 4D
    Réponses: 10
    Dernier message: 12/07/2007, 15h57
  2. Sous formulaire, requete SQL et Tri des données
    Par yanouil dans le forum Requêtes et SQL.
    Réponses: 1
    Dernier message: 11/07/2007, 07h16
  3. [IN] - Tri des données
    Par kirsoul dans le forum Langage SQL
    Réponses: 1
    Dernier message: 02/05/2006, 15h36
  4. tri des données différent entre 2 bases
    Par j6m dans le forum Oracle
    Réponses: 2
    Dernier message: 12/03/2006, 10h17
  5. [JTable] Tri des données
    Par soulhouf dans le forum Composants
    Réponses: 7
    Dernier message: 08/09/2005, 14h01

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