Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

mise en forme sur plusieurs colonnes fusionnées

8 réponses
Avatar
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=12/01/09 (formule "LC(-1)+7") D3=19/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

8 réponses

Avatar
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" a écrit dans le message de groupe de
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
Avatar
Jacky
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" a écrit dans le message de news:

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





Avatar
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
'------------------------------
Avatar
michdenis
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" a écrit dans le message de groupe de discussion :

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" a écrit dans le message de groupe de
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
Avatar
ThierryK
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" a écrit dans le message de news:

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
'------------------------------







Avatar
ThierryK
Merci pour ton aide
ça marche super

cordialement
@+
ThierryK
Avatar
Jacky
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" a écrit dans le message de news:
49738670$0$21383$
Merci pour ton aide
ça marche super

cordialement
@+
ThierryK



Avatar
michdenis
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" a écrit dans le message de groupe de discussion :
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" a écrit dans le message de news:

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
'------------------------------