Séparation d'un tableau excel

Résolu
Blueflower -  
gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour a tous,

Je dispose d'un tableau où il y a une liste de personne avec tout un tas de données dont le nom de leur manager. J'ai donc une ligne par personne.

J'aimerai savoir comment à partir de ce tableau en créer plusieurs autres (par managers) en évitant de devoir faire des filtres et des copier/coller pour tout le monde.

En gros à la fin de mon retraitement il me faudrait un onglet Excel par manager avec le tableau des personnes étant dans son périmetre.

Merci beaucoup!
Configuration: Windows XP
Internet Explorer 6.0

3 réponses

  1. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    Je te propose cette macro à insérer dans "thisworkbook" et avec un clic droit sur une cellule avec le nom du manager choisi tu obtiens l'onglet qui le concerne.
    Bien sûr, cette macro fonctionne sur n'importe qu'elle valeur de cellule, même si ce n'est pas un manager.
    Si ta ligne titre n'est pas sur la ligne 1, change la valeur.
    Private Sub Workbook_SheetBeforeRightClick(ByVal feu As Object, ByVal sel As Range, aff As Boolean)
    Dim c As Integer 'colonne
    Dim f As Integer 'feuille
    Dim l As Integer 'ligne
    Dim rec As Range 'recherche
    Dim rep As String 'réponse
    Dim tit As Integer 'ligne titre
    
    tit = 1 '   numéro ligne titre à adapter
    For f = 1 To Sheets.Count
        If Sheets(f).Name = sel.Value Then Exit For
    Next f
    If f > Sheets.Count Then
        rep = MsgBox("Voulez-vous créer l'onglet : " & sel.Value, vbQuestion + vbYesNo, "Création manager")
        If rep = vbNo Then Exit Sub
        Sheets.Add.Name = sel.Value 'création onglet manager
    End If
    Sheets(sel.Value).Activate
    With Sheets(sel.Value)
        .Cells.ClearComments ' initialisation
        Sheets(feu.Name).Cells(tit, 1).EntireRow.Copy
        ActiveSheet.Cells(tit, 1).Select
        ActiveSheet.Paste
        l = 1: c = 1
    Do ' recherche des enregistrements
        Set rec = Sheets(feu.Name).Cells.Find(What:=sel.Value, After:=.Cells(l, c), _
            LookIn:=xlValues, LookAt:=xlPart, _
            SearchOrder:=xlByColumns, _
            SearchDirection:=xlNext, MatchCase:=False)
        If rec Is Nothing Then Exit Do
        If rec.Row <= l Then Exit Do
        tit = tit + 1
        Sheets(feu.Name).Cells(rec.Row, 1).EntireRow.Copy
        ActiveSheet.Cells(tit, 1).Select
        ActiveSheet.Paste
        l = rec.Row:    c = rec.Column
    Loop
        Application.CutCopyMode = False
    End With
    End Sub
    
    0
  2. Python
     
    Bonjour,
    j'ai exactement le même problem, est-ce que tu pourrais m'indiquer dans l'explication ci-dessus qu'est-ce que l'on doit adapter afin de séléction selon le bon NOM de Manager !?
    0
  3. gbinforme Messages postés 14930 Date d'inscription   Statut Contributeur Dernière intervention   4 744
     
    bonjour

    est-ce que tu pourrais m'indiquer dans l'explication ci-dessus qu'est-ce que l'on doit adapter afin de séléction selon le bon NOM de Manager !?

    Normalement tu n'as rien à adapter, sinon les libellés éventuellement, il suffit de copier cette macro et l'insérer dans "thisworkbook"

    Pour l'utiliser, c'est avec un clic droit sur une cellule dont tu veux mettre les occurrences sur une feuille à part et quel que soit le contenu de la cellule, un onglet est créé avec le nom sélectionné et toutes les lignes qui contiennent cette valeur sont copiées dans le nouvel onglet.

    Merci de me dire le résultat de tes tests.
    0