Quelle fonction?

Bonjour,

je suis actuellement à la recherche d'une formule pour résoudre mon probleme.

Je dispose d'une base de donnée comportant 15 "entete" ac par exemple: Mois / Date / Destinataire.

Les valeurs que peuvent prendre destinataire sont: 1, 2, 3 et 4.

Je souhaite faire apparaitre sur 4 nouvelles feuilles et pour chaques destinataires les différents mois et dates correspondants, automatiquement.

Comment puis-je faire? Merci de votre aide.

7 réponses

  1. Bonjour,

    je ne pense pas que ça soit faisable via une fonction, mais par du code VBA. Si cela t'interesse dit le moi je t'en dirait plus ;)

    @+++
    0
    1. En effet cela pourrait m'intéresser, parce que le copier coller avec les filtres commence à me gaver!!!

      Merci de ton aide
      0
      1. Tu connais un peu le développement? Sais tu comment on fait une macro dans excel? Quelle est ta version d'excel?
        0
        1. Version 2003, et j'ai "survolé" les macros au cours de diverses formations...
          0
          1. D'abord fait une copie de ton fichier puis travail sur cette copie.

            Alors voila un petit lien dans le site pour accéder aux pages de code :
            https://www.commentcamarche.net/faq/8130-mise-a-jour-d-une-procedure-ou-d-une-fonction-en-vba

            dans l'arborescence chois "this workbook"

            dans la fenêtre qui s'ouvre, en haut, dans la 1er liste déroulante choisi "workbook"

            le code suivant apparait :
                   Private Sub Workbook_Open()
                   End Sub


            entre ces lignes, copie le code ci-dessous puis initialise les 2 variables signalées par les commentaires et sauvegarde.

             Dim i As Integer
            Dim j As Integer
            Dim y As String
            Dim listedestinataires() As String
            Dim trouvedestinataires() As String
            Dim nbdest As Integer
            Dim VarTab As Variant
            
            
            nbdest = 1
            j = 1
            'initialiser ici la lettre de la colonne qui contient l'entête destinataire
            y = "A"
            i = 1
            
            Do While Feuil1.Cells(i, y).Value <> ""
                trouvedestinataires = Filter(listedestinataires, "Destinataire " & (Feuil1.Cells(i, y).Value), True)
                On Error Resume Next
                VarTab = UBound(trouvedestinataires)
                On Error GoTo 0
                
                
                If VarTab < 0 Or i = 1 Then
                    Sheets.Add.Move After:=Sheets(Sheets.Count)
                    ActiveSheet.Name = "Destinataire " & (Feuil1.Cells(i, y).Value)
                    nbdest = nbdest + 1
                    ReDim Preserve listedestinataires(nbdest)
                    listedestinataires(nbdest) = "Destinataire " & (Feuil1.Cells(i, y).Value)
                    ActiveSheet.Cells("1", "A").Select
                Else
                    Sheets("Destinataire " & (Feuil1.Cells(i, y).Value)).Activate
                    j = 1
                    Do While Sheets("Destinataire " & (Feuil1.Cells(i, y).Value)).Cells(j, y).Value <> ""
                        j = j + 1
                    Loop
                    Sheets("Destinataire " & (Feuil1.Cells(i, y).Value)).Cells(j, "A").Select
                End If
            
                Feuil1.Cells(i, y).EntireRow.Copy
                Sheets("Destinataire " & (Feuil1.Cells(i, y).Value)).Paste
            
                i = i + 1
            Loop
            
            
            'on parcours les lignes
            '   si c 'est la première fois qu'on voit le code destinataire
            '         on crée une nouvelle feuille
            '         on se place dessus à la première ligne
            '   si le code destinataire a déjà été croisé
            '         on se place sur la feuille correspondante
            '         et sur la dernière ligne +1
            '   On copie la ligne de la feuille 1 sur la feuille en cours
            
            End Sub


            Puis ferme tout et ré ouvre le classeur (la copie hein ;) )

            Normalement le tri est fait :)

            @++++
            0
            1. Contributeur
              Bonjour
              Au modéle ci joint, une solution sans macro qui peut être, résoudra d'une autre façon votre problème.
              http://www.cijoint.fr/cjlink.php?file=cj201002/cijezbO2EX.xls
              Revenez si besoin d'explication
              Crdlmnt
              0
              1. Bien !
                Je ne parviens pas à jongler ainsi avec INDEX et EQUIV ... donc j'apprécie d'autant mieux.
                0
            2. Contributeur
              Bonjour mon ami Raymond

              pas difficile, tu fais un esai en scindant les formules:
              INDEX(CHAMP;3;2)
              te renvoi la valeur du champ sur la 3° ligne de la 2° colonne du champ

              si tu remplace le N° de ligne par EQUIV:
              EQUIV(CELL;Colonne;0)
              te renvoi le N° de ligne dans le champ ou se trouve la valeur cherchée(CELL).
              Le;0) est le même principe que pour RECHERCHE

              ensuite, pour éviter de rectifier les cellules en "ajustant" les références de colonnes cherchées, il suffit d'utiliser LIGNE() et COLONNE() , corrigés de + ou - pour renvoyer la bonne position dans le champ de recherche.

              Bon soleil. Au plaisir

              0