Quelle fonction?
didijo44
-
Vaucluse Messages postés 27336 Date d'inscription Statut Contributeur Dernière intervention -
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.
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
-
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 ;)
@+++ -
En effet cela pourrait m'intéresser, parce que le copier coller avec les filtres commence à me gaver!!!
Merci de ton aide -
Tu connais un peu le développement? Sais tu comment on fait une macro dans excel? Quelle est ta version d'excel?
-
-
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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 :)
@++++ -
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 -
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