OVH Cloud OVH Cloud

Centrer sur plusieurs colonnes

36 réponses
Avatar
criocri
Bonjour,
j'essaye de créer un planning modulable automatiquement sur excel, tout est ok sauf une chose, voila je vous explique mon problème.
Une colonne affiche les jours au format date, et je veux que la colonne du dessus affiche le mois correspondant uniquement si le jour est le 1er du mois. J'ai mis la condition suivante : =SI(JOUR(A7)=1;A7;"") Cela fonctionne sauf qu'en appliquant la mise en forme centrée sur plusieurs colonne, j'ai l'impression que la formule empêche le centrage même si j'ai appliqué la valeur "" c'est à dire valeur vide. Du coup impossible de lire le nom du mois. Je ne sais pas si je suis assez clair, si quelqu'un a compris mon problème, merci pour votre aide.

10 réponses

1 2 3 4
Avatar
criocri
isabelle a écrit le 28/02/2011 à 03h34 :
bonjour criocri,

voilà,
http://cjoint.com/?1cCdHscuG5p

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As Integer, i As Integer, y As Integer, deb As Integer
'déclaration des variables
Application.EnableEvents = False 'désactiver les
événements
For i = 2 To Range("A65536").End(xlUp).Row 'de 1 à la derniere
ligne
renseignée de la colonne A
On Error GoTo fin ' s'il y a un erreur passe à fin
If IsDate(Range("A" & i)) Then 'si c'est une date
x = Range("IV" & i).End(xlToLeft).Column ' détermine la
derniere
cellule renseigné de la ligne i
Rows(i - 1).Clear 'efface les données au dessus de la ligne i
deb = 1
For y = 2 To x + 1
If Month(Cells(i, deb)) <> Month(Cells(i, y)) Then
Cells(i - 1, deb) = "'" & Format(Cells(i, deb), "mmmm")
'met le
mois au dessus de la ligne i
Range(Cells(i - 1, deb), Cells(i - 1, y - 1)).HorizontalAlignment
= xlHAlignCenterAcrossSelection ' alligne le mois sur x cellule
Rows(i).HorizontalAlignment = xlHAlignCenter ' alligne la ligne
de date au centre
deb = y
End If
Next
End If 'fin de la condition si
fin:
Err.Clear 'efface l'erreur
Next 'passe à la cellule suivante
Application.EnableEvents = True ' réactiver les événements
End Sub

isabelle


Le 2011-02-27 15:11, criocri a écrit :
Merci pour ton aide précieuse.




on y est presque, sur l'exemple de la ligne 2, ça indique la
période Février
2011 alors que le planning sur déroule sur 3 mois. Est il possible que
ça prenne
en compte chaque mois centré sur les jours correspondants ( sur
l'exemple
février, mars et avril ) ? Merci.




bonsoir Isabelle, super ça marche même si je ne comprends rien à ton code ! ;-)
Une question, si je veux limiter la vérification sur une plage précise ( dans mon cas la ligne 2 à partir de la colonne U1 jusque la colonne à l'extrême gauche de mon tableau ), quelle modification dois-je effectuer ? Et la dernière ( si si ), comment ajouter un cadre autour de chaque plage " mois" que la macro à créer. Merci et promis je ne te demande plus rien. Bonne soirée.
Avatar
isabelle
bonjour criocri,

"la colonne à l'extrême gauche de mon tableau"
est-ce que c'est la colonne A ?

isabelle


Le 2011-02-28 15:43, criocri a écrit :
bonsoir Isabelle, super ça marche même si je ne comprends rien à ton code !
;-)
Une question, si je veux limiter la vérification sur une plage précise ( dans
mon cas la ligne 2 à partir de la colonne U1 jusque la colonne à l'extrême
gauche de mon tableau ), quelle modification dois-je effectuer ? Et la dernière
( si si ), comment ajouter un cadre autour de chaque plage " mois" que la macro
à créer. Merci et promis je ne te demande plus rien. Bonne soirée.

Avatar
criocri
isabelle a écrit le 28/02/2011 à 21h57 :
bonjour criocri,

"la colonne à l'extrême gauche de mon tableau"
est-ce que c'est la colonne A ?

isabelle


Le 2011-02-28 15:43, criocri a écrit :
bonsoir Isabelle, super ça marche même si je ne comprends rien
à ton code !
;-)
Une question, si je veux limiter la vérification sur une plage
précise ( dans
mon cas la ligne 2 à partir de la colonne U1 jusque la colonne à
l'extrême
gauche de mon tableau ), quelle modification dois-je effectuer ? Et la
dernière
( si si ), comment ajouter un cadre autour de chaque plage " mois"
que la macro
à créer. Merci et promis je ne te demande plus rien. Bonne
soirée.




oups je crois que je suis un peu fatigué ce soir, je voulais dire extrême droite, les jours sur mon planning sont indiqué sur la ligne 2, colonne V à ZZ.
Avatar
criocri
isabelle a écrit le 28/02/2011 à 21h57 :
bonjour criocri,

"la colonne à l'extrême gauche de mon tableau"
est-ce que c'est la colonne A ?

isabelle


Le 2011-02-28 15:43, criocri a écrit :
bonsoir Isabelle, super ça marche même si je ne comprends rien
à ton code !
;-)
Une question, si je veux limiter la vérification sur une plage
précise ( dans
mon cas la ligne 2 à partir de la colonne U1 jusque la colonne à
l'extrême
gauche de mon tableau ), quelle modification dois-je effectuer ? Et la
dernière
( si si ), comment ajouter un cadre autour de chaque plage " mois"
que la macro
à créer. Merci et promis je ne te demande plus rien. Bonne
soirée.




une autre question, quand j'essaye de copier ta macro ( dans un classeur excel prenant en charge les macros ), je n'arrive pas à la nommer comme dans ton fichier "Feuil1.EventOn". Il la nomme "EventOn" automatiquement. Du coup j'ai l'impression que je m'y prend mal car même en modifiant mon planning en le faisant commencer en première colonne A ligne 2, rien ne se passe. J'espère ne pas abuser de ta patience ...
Avatar
isabelle
voilà,

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As Integer, i As Integer, y As Integer, w As Integer, deb As
Integer 'déclaration des variables
Application.EnableEvents = False 'désactiver les événements
Application.ScreenUpdating = False
For i = 2 To Range("V65536").End(xlUp).Row 'de 1 à la derniere ligne
renseignée de la colonne V
On Error GoTo fin ' s'il y a un erreur passe à fin
If IsDate(Range("V" & i)) Then 'si c'est une date
x = Range("IV" & i).End(xlToLeft).Column ' détermine la derniere
cellule renseigné de la ligne i
Rows(i - 1).Clear 'efface les données au dessus de la ligne i
deb = 22
For y = 23 To x + 1
If Month(Cells(i, deb)) <> Month(Cells(i, y)) Then
Cells(i - 1, deb) = "'" & Format(Cells(i, deb), "mmmm") 'met le
mois au dessus de la ligne i
With Range(Cells(i - 1, deb), Cells(i - 1, y - 1))
.HorizontalAlignment = xlHAlignCenterAcrossSelection ' alligne le
mois sur x cellule
For w = 1 To .Borders.Count - 2
With .Borders(w)
.LineStyle = xlContinuous
.Weight = xlMedium
.ColorIndex = xlAutomatic
End With
Next
.Borders(xlInsideVertical).LineStyle = xlNone
End With
Rows(i).HorizontalAlignment = xlHAlignCenter ' alligne la ligne
de date au centre
deb = y
End If
Next
End If 'fin de la condition si
fin:
Err.Clear 'efface l'erreur
Next 'passe à la cellule suivante
Application.ScreenUpdating = True
Application.EnableEvents = True ' réactiver les événements
End Sub


isabelle

Le 2011-02-28 16:21, criocri a écrit :
oups je crois que je suis un peu fatigué ce soir, je voulais dire extrême
droite, les jours sur mon planning sont indiqué sur la ligne 2, colonne V à ZZ.

Avatar
isabelle
bonjour criocri,

tu as peut être désactivé les événements sans le vouloir, execute la
macro EventOn une fois et refait un essaie.
voici un nouveau fichier avec la plage V:IV et la mise en forme encadré,
http://cjoint.com/?1dbfla6CvmK

isabelle

Le 2011-02-28 17:20, criocri a écrit :
une autre question, quand j'essaye de copier ta macro ( dans un classeur excel
prenant en charge les macros ), je n'arrive pas à la nommer comme dans ton
fichier "Feuil1.EventOn". Il la nomme "EventOn" automatiquement. Du coup j'ai
l'impression que je m'y prend mal car même en modifiant mon planning en le
faisant commencer en première colonne A ligne 2, rien ne se passe. J'espère ne
pas abuser de ta patience ...

Avatar
criocri
isabelle a écrit le 01/03/2011 à 05h11 :
bonjour criocri,

tu as peut être désactivé les événements sans
le vouloir, execute la
macro EventOn une fois et refait un essaie.
voici un nouveau fichier avec la plage V:IV et la mise en forme encadré,
http://cjoint.com/?1dbfla6CvmK

isabelle

Le 2011-02-28 17:20, criocri a écrit :
une autre question, quand j'essaye de copier ta macro ( dans un classeur excel
prenant en charge les macros ), je n'arrive pas à la nommer comme dans
ton
fichier "Feuil1.EventOn". Il la nomme "EventOn"
automatiquement. Du coup j'ai
l'impression que je m'y prend mal car même en modifiant mon planning en
le
faisant commencer en première colonne A ligne 2, rien ne se passe.
J'espère ne
pas abuser de ta patience ...




bonsoir Isabelle,
pour comprendre ta macro, j'aimerai savoir à quoi correspond les éléments suivants :

Le IV dans la ligne : x = Range("IV" & i).End(xlToLeft).Column
Le chiffre 22 dans : deb = 22

Merci pour tes éclaircissements.
Avatar
isabelle
bonjour criocri,

22 pour la colonne V
IV en partant de la colonne IV et remontant vers la gauche
si tu veut tu peut remonter vers la gauche en partant de la colonne ZZ

x = Range("ZZ"& i).End(xlToLeft).Column

isabelle



Le 2011-03-01 16:37, criocri a écrit :
bonsoir Isabelle,
pour comprendre ta macro, j'aimerai savoir à quoi correspond les éléments
suivants :

Le IV dans la ligne : x = Range("IV"& i).End(xlToLeft).Column
Le chiffre 22 dans : deb = 22

Merci pour tes éclaircissements.

Avatar
criocri
isabelle a écrit le 01/03/2011 à 22h58 :
bonjour criocri,

22 pour la colonne V
IV en partant de la colonne IV et remontant vers la gauche
si tu veut tu peut remonter vers la gauche en partant de la colonne ZZ

x = Range("ZZ"& i).End(xlToLeft).Column

isabelle



Le 2011-03-01 16:37, criocri a écrit :
bonsoir Isabelle,
pour comprendre ta macro, j'aimerai savoir à quoi correspond les
éléments
suivants :

Le IV dans la ligne : x = Range("IV"& i).End(xlToLeft).Column
Le chiffre 22 dans : deb = 22

Merci pour tes éclaircissements.




merci Isabelle, grâce à toi ça fonctionne, tu sais ou je peux trouver les codes concernant la mise en forme ( épaisseur des traits de cadre, choix de la police, couleurs ...
Merci encore mille fois.
Avatar
Mgr T. Plubanni
...en utilisant l'enregistreur de macros, pardi!
Mgr T. P.
PS Soeur Isabelle s'occupe des prisonniers dans la cellule IV 65536 car elle
n'a pas encore osé s'équiper de XL 2007 et me charge de répondre à sa place

"criocri" a écrit dans le message de news:

isabelle a écrit le 01/03/2011 à 22h58 :
bonjour criocri,

22 pour la colonne V
IV en partant de la colonne IV et remontant vers la gauche
si tu veut tu peut remonter vers la gauche en partant de la colonne ZZ

x = Range("ZZ"& i).End(xlToLeft).Column

isabelle



Le 2011-03-01 16:37, criocri a écrit :
bonsoir Isabelle,
pour comprendre ta macro, j'aimerai savoir à quoi correspond les
éléments
suivants :

Le IV dans la ligne : x = Range("IV"& i).End(xlToLeft).Column
Le chiffre 22 dans : deb = 22

Merci pour tes éclaircissements.




merci Isabelle, grâce à toi ça fonctionne, tu sais ou je peux trouver les
codes
concernant la mise en forme ( épaisseur des traits de cadre, choix de la
police,
couleurs ...
Merci encore mille fois.
1 2 3 4