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

  • Votes
  • Date
  • Date décroissante
  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 ;)

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

      Merci de ton aide
      1. Tu connais un peu le développement? Sais tu comment on fait une macro dans excel? Quelle est ta version d'excel?
        1. Version 2003, et j'ai "survolé" les macros au cours de diverses formations...
          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 :)

            @++++
            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
              1. Contributeur
                Bien !
                Je ne parviens pas à jongler ainsi avec INDEX et EQUIV ... donc j'apprécie d'autant mieux.
            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