Quelle fonction?

Fermé
didijo44 - 17 févr. 2010 à 14:01
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 - 18 févr. 2010 à 06:49
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

ndsaerith Messages postés 304 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 10 mai 2017 28
17 févr. 2010 à 14:17
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
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 304 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 10 mai 2017 28
17 févr. 2010 à 14:26
Tu connais un peu le développement? Sais tu comment on fait une macro dans excel? Quelle est ta version d'excel?
0
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 304 Date d'inscription vendredi 16 janvier 2004 Statut Membre Dernière intervention 10 mai 2017 28
17 févr. 2010 à 16:38
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 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 411
17 févr. 2010 à 17:20
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 58669 Date d'inscription lundi 13 août 2007 Statut Contributeur Dernière intervention 27 septembre 2024 17 203
18 févr. 2010 à 02:32
Bien !
Je ne parviens pas à jongler ainsi avec INDEX et EQUIV ... donc j'apprécie d'autant mieux.
0
Vaucluse Messages postés 26496 Date d'inscription lundi 23 juillet 2007 Statut Contributeur Dernière intervention 1 avril 2022 6 411
18 févr. 2010 à 06:49
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