mise en forme sur plusieurs colonnes fusionnées

Le
Microsoft
Bonjour et meilleurs voux à tous

en ligne 3 j'ai des dates de lundi de "B3" à "CG3" et peut être +
exemple B3 = 05/01/09 C3/01/09 (formule "LC(-1)+7") D3/01/09
(format "jj")

sur la ligne 2, je souhaiterai mettre le mois et l'année (format "mmmm aa"),
mais 1 seule fois pour les 4 ou 5 colonnes qui se suivent
et dont les lundis (ligne3) font partie du même mois

centré sur plusieurs colonnes (4 ou 5 suivant le nbre de lundi du mois)
et bien sur automatiquement

merci d'avance pour votre aide et vos conseils

ThierryK


XP PRO SP3 Office 2003 SP3
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
michdenis
Le #18419011
Une réponse partielle que tu utilisera pour te créer
une petite macro :

Pour obtenir dans une cellule le nombre de lundi dans un mois :
Formule publiée ici par l'excellent Daniel Maher

Date en B1
=ENT((JOUR(DATE(ANNEE($B$1);MOIS($B$1)+1;0))-JOURSEM(DATE(ANNEE($B$1);MOIS($B$1)+1;1))+7)/7)

à titre d'exemple, ta procédure pourrait ressembler
à ceci : (pas tester -> pas l'environnement pour le faire)
Tu dois adapter le nom de la feuille.

'------------------------------
Sub test()
Dim Rg As Range, X As Integer
Dim A As Integer, NbColonne As Integer
'Premiêre cellule de ta ligne contenant une date

With Worksheets("Feuil1") ' à adapter
'Détermine le nombre de colonnes dans la ligne
NbColonne = .Range("B3:CG3").Columns.Count
'Affecte à la variable objet Range la
'première cellule contenant la date du
'premier mois à évaluer
Set Rg = .Range("B3")

'Boucle
For A = 1 To NbColonne
'évaluation du nombre de lundi pour ce mois
X = Evaluate("INT((DAY(DATE(YEAR(" & Rg.Address & "),MONTH(" & _
Rg.Address & ")+1,0))-WEEKDAY(DATE(YEAR(" & Rg.Address & _
"),MONTH(" & Rg.Address & ")+2,1))+7)/7)")

'Redimensionne la plage (nombre de colonnes)
'pour appliquer le formatage
With Rg.Resize
'Applique le format désiré
.HorizontalAlignment = xlCenterAcrossSelection
'Détermine la cellule suivante qui doit être
'une date du mois suivant
Set Rg = .Offset(, X)
End With
'Incrémente A pour limiter le nombre de boucles
A = A = X + 1
Next
End Sub
'------------------------------


"Microsoft" discussion :
Bonjour et meilleurs voux à tous

en ligne 3 j'ai des dates de lundi de "B3" à "CG3" et peut être +
exemple B3 = 05/01/09 C3/01/09 (formule "LC(-1)+7") D3/01/09
(format "jj")

sur la ligne 2, je souhaiterai mettre le mois et l'année (format "mmmm aa"),
mais 1 seule fois pour les 4 ou 5 colonnes qui se suivent
et dont les lundis (ligne3) font partie du même mois

centré sur plusieurs colonnes (4 ou 5 suivant le nbre de lundi du mois)
et bien sur automatiquement

merci d'avance pour votre aide et vos conseils

ThierryK


XP PRO SP3 Office 2003 SP3
Jacky
Le #18419281
Bonjour,
Ceci peut-être
'-------------------
Sub jj()
Dim debut As Long, fin As Long
Set plage = Range("b3", Cells(3, Range("IV3").End(xlToLeft).Column))
[B2] = Format([b3], "mmmm")
debut = 2
For Each c In plage
If Month(c) <> Month(c.Offset(0, -1)) Then
c.Offset(-1, 0) = Format(c, "mmmm")
fin = c.Offset(-1, -1).Column
Range(Cells(2, debut), Cells(2, fin)).HorizontalAlignment =
xlCenterAcrossSelection
debut = c.Offset(-1, 0).Column
End If
Range(Cells(2, debut), Cells(2,
Range("IV3").End(xlToLeft).Column)).HorizontalAlignment =
xlCenterAcrossSelection
Next
End Sub
'--------------------

--
Salutations
JJ


"Microsoft"
Bonjour et meilleurs voux à tous

en ligne 3 j'ai des dates de lundi de "B3" à "CG3" et peut être +
exemple B3 = 05/01/09 C3/01/09 (formule "LC(-1)+7") D3/01/09
(format "jj")

sur la ligne 2, je souhaiterai mettre le mois et l'année (format "mmmm
aa"),
mais 1 seule fois pour les 4 ou 5 colonnes qui se suivent
et dont les lundis (ligne3) font partie du même mois

centré sur plusieurs colonnes (4 ou 5 suivant le nbre de lundi du mois)
et bien sur automatiquement

merci d'avance pour votre aide et vos conseils

ThierryK


XP PRO SP3 Office 2003 SP3





michdenis
Le #18420521
Correction d'une coquille, en outre cette ligne de code
où j'ai oublié d'inclure les paramètres de Resize

With Rg.Resize(, X) dans la proposition initiale.

'------------------------------
Sub test()
Dim Rg As Range, X As Integer
Dim A As Integer, NbColonne As Integer
'Premiêre cellule de ta ligne contenant une date

With Worksheets("Feuil1")
'Détermine le nombre de colonnes dans la ligne
NbColonne = .Range("B3:CG3").Columns.Count
'Affecte à la variable objet Range la
'première cellule contenant la date du
'premier mois à évaluer
Set Rg = .Range("B3")

'Boucle
For A = 1 To NbColonne
'évaluation du nombre de lundi pour ce mois
X = Evaluate("INT((DAY(DATE(YEAR(" & Rg.Address & "),MONTH(" & _
Rg.Address & ")+1,0))-WEEKDAY(DATE(YEAR(" & Rg.Address & _
"),MONTH(" & Rg.Address & ")+2,1))+7)/7)")

'Redimensionne la plage (nombre de colonnes)
'pour appliquer le formatage
With Rg.Resize(, X)
'Applique le format désiré
.HorizontalAlignment = xlCenterAcrossSelection
'Détermine la cellule suivante qui doit être
'une date du mois suivant
Set Rg = .Offset(, X)(1, 2)
End With
'Incrémente A pour limiter le nombre de boucles
A = A = X + 1
Next
End With
End Sub
'------------------------------
michdenis
Le #18420961
Correction de coquilles ;-)


Sub test()
Dim Rg As Range, X As Integer
Dim A As Integer, NbColonne As Integer
'Premiêre cellule de ta ligne contenant une date

With Worksheets("Feuil1")
'Détermine le nombre de colonnes dans la ligne
NbColonne = .Range("B3:CG3").Columns.Count
'Affecte à la variable objet Range la
'première cellule contenant la date du
'premier mois à évaluer
Set Rg = .Range("B2")

'Boucle
For A = 1 To NbColonne
'évaluation du nombre de lundi pour ce mois
X = Evaluate("INT((DAY(DATE(YEAR(" & Rg.Address & "),MONTH(" & _
Rg.Address & ")+1,0))-WEEKDAY(DATE(YEAR(" & Rg.Address & _
"),MONTH(" & Rg.Address & ")+2,1))+7)/7)")

'Redimensionne la plage (nombre de colonnes)
'pour appliquer le formatage
With Rg.Offset(-1)
.Value = Format(Month(Rg), "mmmm")
With .Resize(, X)
.HorizontalAlignment = xlCenterAcrossSelection
.NumberFormat = "MMMM"
'Détermine la cellule suivante qui doit être
' une date du mois suivant
Set Rg = .Item(1, X)(1, 2)
End With
End With
'Incrémente A pour limiter le nombre de boucles
A = A = X + 1
Next
End With
End Sub





"michdenis"
Une réponse partielle que tu utilisera pour te créer
une petite macro :

Pour obtenir dans une cellule le nombre de lundi dans un mois :
Formule publiée ici par l'excellent Daniel Maher

Date en B1
=ENT((JOUR(DATE(ANNEE($B$1);MOIS($B$1)+1;0))-JOURSEM(DATE(ANNEE($B$1);MOIS($B$1)+1;1))+7)/7)

à titre d'exemple, ta procédure pourrait ressembler
à ceci : (pas tester -> pas l'environnement pour le faire)
Tu dois adapter le nom de la feuille.

'------------------------------
Sub test()
Dim Rg As Range, X As Integer
Dim A As Integer, NbColonne As Integer
'Premiêre cellule de ta ligne contenant une date

With Worksheets("Feuil1") ' à adapter
'Détermine le nombre de colonnes dans la ligne
NbColonne = .Range("B3:CG3").Columns.Count
'Affecte à la variable objet Range la
'première cellule contenant la date du
'premier mois à évaluer
Set Rg = .Range("B3")

'Boucle
For A = 1 To NbColonne
'évaluation du nombre de lundi pour ce mois
X = Evaluate("INT((DAY(DATE(YEAR(" & Rg.Address & "),MONTH(" & _
Rg.Address & ")+1,0))-WEEKDAY(DATE(YEAR(" & Rg.Address & _
"),MONTH(" & Rg.Address & ")+2,1))+7)/7)")

'Redimensionne la plage (nombre de colonnes)
'pour appliquer le formatage
With Rg.Resize
'Applique le format désiré
.HorizontalAlignment = xlCenterAcrossSelection
'Détermine la cellule suivante qui doit être
'une date du mois suivant
Set Rg = .Offset(, X)
End With
'Incrémente A pour limiter le nombre de boucles
A = A = X + 1
Next
End Sub
'------------------------------


"Microsoft" discussion :
Bonjour et meilleurs voux à tous

en ligne 3 j'ai des dates de lundi de "B3" à "CG3" et peut être +
exemple B3 = 05/01/09 C3/01/09 (formule "LC(-1)+7") D3/01/09
(format "jj")

sur la ligne 2, je souhaiterai mettre le mois et l'année (format "mmmm aa"),
mais 1 seule fois pour les 4 ou 5 colonnes qui se suivent
et dont les lundis (ligne3) font partie du même mois

centré sur plusieurs colonnes (4 ou 5 suivant le nbre de lundi du mois)
et bien sur automatiquement

merci d'avance pour votre aide et vos conseils

ThierryK


XP PRO SP3 Office 2003 SP3
ThierryK
Le #18421551
Merci pour ton aide
j'ai un message d'erreur sur la ligne
X = Evaluate("INT((DAY(DATE(YEAR(" & Rg.Address & "),MONTH(" &
Rg.Address & ")+1,0))- WEEkday(DATE(YEAR(" & Rg.Address & "),MONTH(" &
Rg.Address & ")+2,1))+7)/7)")
"erreur d'execution 13 incompatibilité de type"

mais la macro de Jacky marche tres bien

encore merci
cordialement
@+
ThierryK


"michdenis"
Correction d'une coquille, en outre cette ligne de code
où j'ai oublié d'inclure les paramètres de Resize

With Rg.Resize(, X) dans la proposition initiale.

'------------------------------
Sub test()
Dim Rg As Range, X As Integer
Dim A As Integer, NbColonne As Integer
'Premiêre cellule de ta ligne contenant une date

With Worksheets("Feuil1")
'Détermine le nombre de colonnes dans la ligne
NbColonne = .Range("B3:CG3").Columns.Count
'Affecte à la variable objet Range la
'première cellule contenant la date du
'premier mois à évaluer
Set Rg = .Range("B3")

'Boucle
For A = 1 To NbColonne
'évaluation du nombre de lundi pour ce mois
X = Evaluate("INT((DAY(DATE(YEAR(" & Rg.Address & "),MONTH(" & _
Rg.Address & ")+1,0))-WEEKDAY(DATE(YEAR(" & Rg.Address & _
"),MONTH(" & Rg.Address & ")+2,1))+7)/7)")

'Redimensionne la plage (nombre de colonnes)
'pour appliquer le formatage
With Rg.Resize(, X)
'Applique le format désiré
.HorizontalAlignment = xlCenterAcrossSelection
'Détermine la cellule suivante qui doit être
'une date du mois suivant
Set Rg = .Offset(, X)(1, 2)
End With
'Incrémente A pour limiter le nombre de boucles
A = A = X + 1
Next
End With
End Sub
'------------------------------







ThierryK
Le #18421541
Merci pour ton aide
ça marche super

cordialement
@+
ThierryK
Jacky
Le #18421971
Re....
La dernière instruction figure inutilement dans la boucle.
Quelques modif
'----------------
Sub jj()
Dim debut As Long, fin As Long
Application.ScreenUpdating = False
Range("b2:iv2").Clear
Set plage = Range("c3", Cells(3, Range("IV3").End(xlToLeft).Column))
[B2] = Application.Proper(Format([b3], "mmmm"))
debut = 2
For Each c In plage
If Month(c) <> Month(c.Offset(0, -1)) Then
c.Offset(-1, 0) = Application.Proper(Format(c, "mmmm"))
fin = c.Offset(-1, -1).Column
Range(Cells(2, debut), Cells(2, fin)).HorizontalAlignment =
xlCenterAcrossSelection
debut = c.Offset(-1, 0).Column
End If
Next
Range(Cells(2, debut), Cells(2,
Range("IV3").End(xlToLeft).Column)).HorizontalAlignment =
xlCenterAcrossSelection
End Sub
'-------------------

--
Salutations
JJ


"ThierryK" 49738670$0$21383$
Merci pour ton aide
ça marche super

cordialement
@+
ThierryK



michdenis
Le #18423161
J'ai publié une nouvelle version de la procédure...
mon intention du début n'était pas de pondre toute
la procédure... mais simplement te donner quelques
lignes de code pour t'aider à créer ta propre procédure !

Concernant l'erreur d'incompatibilité de type
que tu rencontres, j'en suis surpris si le
contenu de la cellule est une date !

Ceci étant, tu sembles avoir trouvé la solution
à ta problématique, tant mieux.



"ThierryK" 49738635$0$3520$
Merci pour ton aide
j'ai un message d'erreur sur la ligne
X = Evaluate("INT((DAY(DATE(YEAR(" & Rg.Address & "),MONTH(" &
Rg.Address & ")+1,0))- WEEkday(DATE(YEAR(" & Rg.Address & "),MONTH(" &
Rg.Address & ")+2,1))+7)/7)")
"erreur d'execution 13 incompatibilité de type"

mais la macro de Jacky marche tres bien

encore merci
cordialement
@+
ThierryK


"michdenis"
Correction d'une coquille, en outre cette ligne de code
où j'ai oublié d'inclure les paramètres de Resize

With Rg.Resize(, X) dans la proposition initiale.

'------------------------------
Sub test()
Dim Rg As Range, X As Integer
Dim A As Integer, NbColonne As Integer
'Premiêre cellule de ta ligne contenant une date

With Worksheets("Feuil1")
'Détermine le nombre de colonnes dans la ligne
NbColonne = .Range("B3:CG3").Columns.Count
'Affecte à la variable objet Range la
'première cellule contenant la date du
'premier mois à évaluer
Set Rg = .Range("B3")

'Boucle
For A = 1 To NbColonne
'évaluation du nombre de lundi pour ce mois
X = Evaluate("INT((DAY(DATE(YEAR(" & Rg.Address & "),MONTH(" & _
Rg.Address & ")+1,0))-WEEKDAY(DATE(YEAR(" & Rg.Address & _
"),MONTH(" & Rg.Address & ")+2,1))+7)/7)")

'Redimensionne la plage (nombre de colonnes)
'pour appliquer le formatage
With Rg.Resize(, X)
'Applique le format désiré
.HorizontalAlignment = xlCenterAcrossSelection
'Détermine la cellule suivante qui doit être
'une date du mois suivant
Set Rg = .Offset(, X)(1, 2)
End With
'Incrémente A pour limiter le nombre de boucles
A = A = X + 1
Next
End With
End Sub
'------------------------------







Publicité
Poster une réponse
Anonyme