Formule Excel regroupement par Date(Mois)

GuillaumA

XLDnaute Occasionnel
Bonjour à tous!

Je cherche à faire apparaître dans une case les textes correspondant au mois choisi en A1 feuil2.
Les dates sont toutes présentent en colonne P et on peu donc faire une RechercheV sur P ?

Je sais mes précisions sont assez flou c'est pourquoi je vous joint le fichier suivant !

PS1: Feuil 1 et Feuil 2. J'ai essayé a base de SOMME(DATE) etc.. mais je n'y arrive définitivement pas
PS2: Une macro devrait être utilisé ici ?

Merci de votre considération et bonne journée.

Cordialement,
Guillaume A.
 

Pièces jointes

  • MonProbleme.xls
    14.5 KB · Affichages: 99
  • MonProbleme.xls
    14.5 KB · Affichages: 104
  • MonProbleme.xls
    14.5 KB · Affichages: 113

hoerwind

XLDnaute Barbatruc
Re : Formule Excel regroupement par Date(Mois)

Bonjour,

Une proposition en pièce jointe.

Vois si elle répond à ta demande.
 

Pièces jointes

  • ExtractionSuivantMois.xls
    17.5 KB · Affichages: 213
  • ExtractionSuivantMois.xls
    17.5 KB · Affichages: 226
  • ExtractionSuivantMois.xls
    17.5 KB · Affichages: 220

GuillaumA

XLDnaute Occasionnel
Re : Formule Excel regroupement par Date(Mois)

Re-bonjour,
Toujours sur le même sujet, j'ai crée la macro suivante:
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If [B1] = "1" Then [A1] = "Janvier"
If [B1] = "2" Then [A1] = "Février"
If [B1] = "3" Then [A1] = "Mars"
If [B1] = "4" Then [A1] = "Avril"
If [B1] = "5" Then [A1] = "Mai"
If [B1] = "6" Then [A1] = "Juin"
If [B1] = "7" Then [A1] = "Juillet"
If [B1] = "8" Then [A1] = "Août"
If [B1] = "9" Then [A1] = "Septembre"
If [B1] = "10" Then [A1] = "Octobre"
If [B1] = "11" Then [A1] = "Novembre"
If [B1] = "12" Then [A1] = "Décembre"

End Sub

En effet, au lieu d'une liste déroulante avec le nom des mois comme vu en feuil2, j'utilise
Code:
=MOIS(G1)
qui va chercher le mois dans une cellule prédéfini G1 pour la placer en B1. Seulement il s'agit de l'envoi du code mois qui n'est pas reconnu par la formule que tu m'a proposée.

De plus, elle ne permet pas d'être utilisée par un anglais par exemple car Septembre par exemple ne représentera pas September... Du coup je devrait obliger les utilisateurs finaux à changer une liste de mois ou la macro irait chercher ses références! Aberrant...

Y aurait-il un moyen pour que cela marche, quelque soit la version d'Excel (pays).

Je joint bien entendu un fichier updaté

Cordialement,
Guillaume
 

Pièces jointes

  • ExtractionSuivantMois.xls
    25.5 KB · Affichages: 106
  • ExtractionSuivantMois.xls
    25.5 KB · Affichages: 103
  • ExtractionSuivantMois.xls
    25.5 KB · Affichages: 112
Dernière édition:

GuillaumA

XLDnaute Occasionnel
Re : Formule Excel regroupement par Date(Mois)

Ça y est! Ça marche, j'ai finalement débusqué les bugs (notamment du fait de cellules fusionnées, etc., et tes formules marchent dorénavant parfaitement.

Seulement voila, comme tout, un nouveau problème m'est apparu.
En effet, la feuil2 est un cadre dans mon fichier original, qui, à travers le biais d'une macro, se trouve être le fond de nouveaux onglets créés.
Ma feuil1 reste cependant la même et du coup, les formules du type
=SI(ET(P7>0;MOIS(P7)=MOIS(Cadre!I$3));MAX(D$1:D6)+1;"")
présente en feuil1 ne sont pas liés aux onglets créés (ces derniers ont les noms suivant: octobre 10, novembre 10, décembre 10, janvier 11, etc...)

Ma macro de création d'onglet se fait à partir de la feuille "cadre" et se présente sous la forme suivante:
Sub CreerUnMois()
Application.ScreenUpdating = False
NomDuMois = InputBox("Créer un nouveau mois", _
"Mois", _
Format(Date, "MMMM YY"))
If NomDuMois = "" Then
MsgBox Range("Le mois n'est pas défini")
Exit Sub
End If


Sheets("Recapdesmois").Unprotect
With Sheets("Recapdesmois")
For CompteurDeLigne = 5 To 13 Step 4
For compteurDeColonne = 3 To 9 Step 2
If .Cells(CompteurDeLigne, compteurDeColonne) = "" Then
Sheets("Cadre").Visible = True
Sheets("Cadre").Select
Sheets.Add
On Error GoTo GestionDesErreurs
ActiveSheet.Name = NomDuMois
On Error GoTo 0
Sheets("Cadre").Select
Cells.Select
Selection.Copy
Sheets(NomDuMois).Select
Cells.Select
ActiveSheet.Paste
Range("A5").Select
ActiveWindow.FreezePanes = True
Range("B1") = NomDuMois
Sheets("Recapdesmois").Activate
NomDuBouton = .Cells(CompteurDeLigne - 1, compteurDeColonne)
.Cells(CompteurDeLigne, compteurDeColonne) = NomDuMois

Sheets("Recapdesmois").DrawingObjects(NomDuBouton).Visible = True
ActiveSheet.DrawingObjects(NomDuBouton).Select
Selection.Characters.Text = NomDuMois
Sheets("Cadre").Visible = False
Application.GoTo Reference:=Worksheets(NomDuMois).Range("A4"), Scroll:=True
Application.GoTo Reference:=Worksheets("Recapdesmois").Range("A1"), Scroll:=True
Sheets("Recapdesmois").Protect
Exit Sub
End If
Next
Next
End With
MsgBox Range("une année s'est écoulé, recréez un fichier")
Application.GoTo Reference:=Worksheets("Recapdesmois").Range("A1"), Scroll:=True
GestionDesErreurs:
If Err = 1004 Then
Err = 0
MsgBox Range("le mois existe déjà")
Application.DisplayAlerts = False
ActiveSheet.Delete
Application.DisplayAlerts = True
Sheets("Recapdesmois").Cells(CompteurDeLigne, compteurDeColonne) = ""
Application.GoTo Reference:=Worksheets("Recapdesmois").Range("A1"), Scroll:=True
Sheets("Recapdesmois").Protect
Exit Sub
End If
End Sub

Sub AffichageBouton()
With Sheets("Recapdesmois")
.DrawingObjects("Bouton 1").Visible = True
.DrawingObjects("Bouton 2").Visible = True
.DrawingObjects("Bouton 3").Visible = True
.DrawingObjects("Bouton 4").Visible = True
.DrawingObjects("Bouton 6").Visible = True
.DrawingObjects("Bouton 7").Visible = True
.DrawingObjects("Bouton 8").Visible = True
.DrawingObjects("Bouton 9").Visible = True
.DrawingObjects("Bouton 10").Visible = True
.DrawingObjects("Bouton 11").Visible = True
.DrawingObjects("Bouton 12").Visible = True
.DrawingObjects("Bouton 13").Visible = True
End With
Sheets("Recapdesmois").Select
Range("A1").Select

Sub MasquageBouton()
With Sheets("Recapdesmois")
.DrawingObjects("Bouton 1").Visible = False
.DrawingObjects("Bouton 2").Visible = False
.DrawingObjects("Bouton 3").Visible = False
.DrawingObjects("Bouton 4").Visible = False
.DrawingObjects("Bouton 6").Visible = False
.DrawingObjects("Bouton 7").Visible = False
.DrawingObjects("Bouton 8").Visible = False
.DrawingObjects("Bouton 9").Visible = False
.DrawingObjects("Bouton 10").Visible = False
.DrawingObjects("Bouton 11").Visible = False
.DrawingObjects("Bouton 12").Visible = False
.DrawingObjects("Bouton 13").Visible = False
End With
Sheets("Recapdesmois").Select
Range("A1").Select
End Sub


Quelqu'un aurait'il une idée de comment faire pour que les formules en feuil1 s'appliquent aux feuilles octobre 10, novembre 10, décembre 10, janvier 11, etc... et non plus au cadre seulement ?

Cordialement,
Guillaume A.
 
Dernière édition:

GuillaumA

XLDnaute Occasionnel
Re : Formule Excel regroupement par Date(Mois)

Re-bonjour ! =)

Je crois avoir une piste avec la fonction Remplacer texte. En effet, Excel permet de remplacer le texte.
Si dans la macro d'ouverture d'un onglet Mois, je pouvais dire à la macro d'aller changer automatiquement le texte "cadre" de la feuil1 par "octobre 10" par exemple.
Comme le texte changerai tout le temps, je propose de mettre "cadre" dans une cellule prédéfini Recapdesmois!J1 et , la macro changerai à chaque fois le contenu de cette cellule par le nom de la feuille mois créé. Du

Voici la macro d'ouverture:
Code:
Sub AccèsMois1()
    NomDeLaFeuille = Range("C5")
    If Range("Recapdesmois!H1") = "" Then
    Sheets(NomDeLaFeuille).Select


[COLOR="Red"]-------- ICI LA MODIF DU TYPE -------- [/COLOR]
Sheets(Feuil1).Remplacer valeurs = Sheets(Recapdesmois).[J1] (en J1 le texte "cadre" a la base) PAR NomDeLaFeuille
Et (après cela)
Remplacer valeur [J1] par NomDeLaFeuille
[COLOR="Green"]'Du coup, la valeur de référence de la macro changera tous le temps permettant de changer, par exemple,  un septembre 10 en feuil1 par un octobre 10)[/COLOR]

[COLOR="Red"]----------------------------------------- [/COLOR]



    ElseIf Range("Recapdesmois!H1") = "oui" Then
    Réponse = MsgBox(Range("Êtes vous sûr de vouloir supprimer") & NomDeLaFeuille & " ?", vbYesNo)
        If Réponse = vbYes Then
            Application.DisplayAlerts = False
            Sheets(NomDeLaFeuille).Delete
            Application.DisplayAlerts = True
            Sheets("MonthSummary").Unprotect
            ActiveSheet.DrawingObjects("Bouton 1").Select
            Selection.Characters.Text = ""
            Sheets("MonthSummary").DrawingObjects("Bouton 1").Visible = False
            Sheets("MonthSummary").Range("C5:C6") = ""
            
            Sheets("Recapdesmois").Protect
            Range("Recapdesmois!H1") = ""
        ElseIf Réponse = vbNo Then
            Range("Database!H1") = ""
        End If
    End If
End Sub

Tout ce que je demande, c'est si quelqu'un peut m'aider avec la fonction Replace.
J'ai trouvé:
expression.Replace(What, Replacement, LookAt, SearchOrder, MatchCase, MatchByte, SearchFormat, ReplaceFormat)
mais je ne sais pas l'adapter

Help!!!

Cordialement,
Guillaume A.
 
Dernière édition:

GuillaumA

XLDnaute Occasionnel
Re : Formule Excel regroupement par Date(Mois)

Ma modification mais elle fait bugger. Quelqu'un verrait-il quelque chose de mauvais dedans ?
A noter que mon J1, s'est tranformé en B600 de la feuil1, plus simple...


Code:
   Worksheets("Feuil1").Range("D7:D564").Replace _
    What:=[B600], Replacement:=NomDeLaFeuille, _
    SearchOrder:=xlByColumns, MatchCase:=True
    
    Worksheets("Feuil1").Range("B600").Replace _
    What:=[B600], Replacement:=NomDeLaFeuille, _
    SearchOrder:=xlByColumns, MatchCase:=True
 

GuillaumA

XLDnaute Occasionnel
Re : Formule Excel regroupement par Date(Mois)

Nouveau:

Code:
    Worksheets("Feuil1").Range("D7:D564").Replace _
    What:=[B600], Replacement:=NomDeLaFeuille, _
    SearchOrder:=xlByColumns, MatchCase:=True
    
    Worksheets("Feuil1").Range("B600:B600").Replace _
    What:=[B600], Replacement:=NomDeLaFeuille, _
    SearchOrder:=xlByColumns, MatchCase:=True

Serait-ce peine perdu....
B600 correspond au texte "cadre" car dans D7 : D564 les formules sont du type
Code:
=SI(ET(P7>0;MOIS(P7)=MOIS(Cadre!I$3));MAX(D$1:D6)+1;"")

Seulement j'ai de plus en plus l'impression qu'il est impossible de changer des bouts de formule.....


De plus, la deuxième parti qui doit transformer le texte "cadre" par NomDeLaFeuille (en l’occurrence "Octobre 10" ne marche pas)....

Aller... Une dernière fois... Quelqu'un peut m'aider même juste un peu ? Ou j'ai définitivement perdu tout le monde et personne ne comprend un yiota de ce que j'ai écrit jusqu'à présent? :(


Guillaume
 

hoerwind

XLDnaute Barbatruc
Re : Formule Excel regroupement par Date(Mois)

Bonjour,

En VBA je ne puis t'aider, ce n'est pas ma tasse de thé.

Je reviens néanmoins sur ton message #5
Si en Feuil2!A1, après avoir mis cette cellule au format Standard, tu saisis la formule :
=TEXTE(G1;"mmmm") le mois en toutes lettres s'affichera, la formule en Feuil1!A:A fonctionne et sur un poste UK le mois s'éffichera en anglais

Edition :
Mais pourquoi passer par la Feuil2!A1 ?
En Feuil1!A7 modifie la formule comme suit :
=SI(ET(P7>0;MOIS(P7)=MOIS(Feuil2!G$1));MAX(A$1:A6)+1;"")
et copie la vers la bas, cela fonctionne tout aussi bien.
 
Dernière édition:

GuillaumA

XLDnaute Occasionnel
Re : Formule Excel regroupement par Date(Mois)

Merci Hoerwind pour ta réponse. Cela correspond à ce que j'ai fait aussi pour que cela marche.

Mon problème actuel sur la formule dont on parle:
Code:
=SI(ET(P7>0;MOIS(P7)=MOIS([COLOR="Red"][B]Feuil2[/B][/COLOR]!G$1));MAX(A$1:A6) +1;"")

- J'ai une Feuil1 qui reste la même et sur laquelle ce situe la formule énoncé.

- J'ai une Feuil2 créée à partir d'un cadre. Cette Feuil2 est multiple (12 mois: Octobre 10, Novembre 10, Décembre 10, Janvier 11, etc.).

- La macro dans mon post #7 représente ce qui est lancé lorsque l'utilisateur clics sur le bouton de chaque mois (une feuil3 à un menu avec des boutons représentant chaque mois).

Il faut donc, qu'en appuyant sur le bouton d'un mois (Feuil3), la macro modifie automatique ce qui est surligné en rouge dans la formule énoncé précédemment, pour le remplacer par le NomDeLaFeuille (Par ex: Octobre 10)

Je pense avoir été clair cette fois ci =).

Merci de toute éventuel aide.

Cordialement,
Guillaume A.
 
Dernière édition:

hoerwind

XLDnaute Barbatruc
Re : Formule Excel regroupement par Date(Mois)

Re,

J'ai une Feuil2 créée à partir d'un cadre
Je suppose que tu entends par là une feuille modèle.

Cette Feuil2 est multiple (12 mois: Octobre 10, Novembre 10, Décembre 10, Janvier 11, etc.).
Ce n'est pas la Feuil2 qui est multiple, mais bien une copie multiple de la feuille modèle, dont les noms des onglets sont Octobre 10, ...

Si c'est cela ce que tu entends, alors pourquoi pas une liste déroulante en Feuil1 qui permet le choix des différents onglets et une petite modification de la formule en Feuil1!A:A te renverra automatiquement le résultat de la feuille choisie ?
Tout cela sans macros.
 

GuillaumA

XLDnaute Occasionnel
Re : Formule Excel regroupement par Date(Mois)

Re hoerwind,
Tu as raison sur ce que je recherche,

Et bien il y a la une excellente idée, que je pourrai adapter en effet. Par contre je ne vois pas comment tu peux modifier la formule afin que le contenu d'une liste déroulante s'injecte dedans. Spécialement quand ce contenu est le nom d'un onglet.
Pourrais-tu m'expliquer comment tu la modifierai ?

PS: Juste pour être sûr que l'on s'est compris, le résultat doit apparaître sur les copies multiples et non Feuil1, comme ta superbe formule que tu m'a donnée au départ fait en Feuil2


Cordialement,
Guillaume A.
 
Dernière édition:

Statistiques des forums

Discussions
299 845
Messages
1 979 499
Membres
206 753
dernier inscrit
mounir311