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.
A voir également:

7 réponses

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
didijo44
 
En effet cela pourrait m'intéresser, parce que le copier coller avec les filtres commence à me gaver!!!

Merci de ton aide
0
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
didijo44
 
Version 2003, et j'ai "survolé" les macros au cours de diverses formations...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

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