Quelle fonction?

didijo44 -  
Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   -
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. ndsaerith Messages postés 308 Date d'inscription   Statut Membre Dernière intervention   28
     
    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
  2. didijo44
     
    En effet cela pourrait m'intéresser, parce que le copier coller avec les filtres commence à me gaver!!!

    Merci de ton aide
    0
  3. ndsaerith Messages postés 308 Date d'inscription   Statut Membre Dernière intervention   28
     
    Tu connais un peu le développement? Sais tu comment on fait une macro dans excel? Quelle est ta version d'excel?
    0
  4. didijo44
     
    Version 2003, et j'ai "survolé" les macros au cours de diverses formations...
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. ndsaerith Messages postés 308 Date d'inscription   Statut Membre Dernière intervention   28
     
    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
  7. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    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. Raymond PENTIER Messages postés 58213 Date d'inscription   Statut Contributeur Dernière intervention   17 482
       
      Bien !
      Je ne parviens pas à jongler ainsi avec INDEX et EQUIV ... donc j'apprécie d'autant mieux.
      0
  8. Vaucluse Messages postés 27336 Date d'inscription   Statut Contributeur Dernière intervention   6 453
     
    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