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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
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