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
h2so4 a écrit le 26/02/2011 à 23h20 :
bonsoir,

j'ai rajouté un indicateur de nouvelle ligne
chaque fois que tu vois '---------, c'est le signe d'une nouvelle ligne


Sub moiscentré()
'-----------
f1 = "Feuil1": ' à modifier
'-----------
ligne = 7: ' à modifier ligne contenant la date, le mois sera
affiché
sur la ligne précédente (ligne-1)
'-----------
limite = 31: 'à modifier nombre de colonnes sur une ligne
'-----------
For i = 1 To limit
'-----------
If Day(Worksheets(f1).Cells(ligne, i)) = 1 Then
'-----------
Worksheets(f1).Cells(ligne - 1, i).FormulaR1C1 = "=R" & ligne
& "C" &
i
'-----------
Else
'-----------
Worksheets(f1).Cells(ligne - 1, i) = ""
'-----------
End If
'-----------
Next i
'-----------
End Sub



bonjour, merci pour la macro, mais je n'ai aucune connaissance dans les
macros. J'ai recopié la macro en mettant les retours à la ligne
au feeling
;-). Par contre il m'indique une erreur : Erreur de compilation Else sans If.
Merci pour ton aide.




--
h2so4
ca PAN
pique DORA
.


Plus de plantage de la macro mais rien ne s'affiche ... je ne comprend pas :-(
Va falloir que je me mette sérieusement aux macros !!!
Si jamais tu peux encore m'aider ... je ne voudrai pas abuser. Sinon pour comprendre ta macro , ( si je réussi à la faire fonctionner ), quelle est la fonction qui fait centrer le nom des mois au dessus de la ligne des jours ? Merci encore.
( nota : pour info j'utilise excel 2007 si jamais il peut y avoir des différences de fonctionnement suivant les versions ).
Avatar
h2so4
criocri was thinking very hard :

le principe :
la macro met une formule uniquement dans la case au-dessus d'une date
qui correspond au premier du mois, mais garde ta mise en page.

As-tu vérifié si tu ne devais pas modifier les 3 valeurs suivantes ?


f1 = "Feuil1": ' à modifier

ligne = 7: ' à modifier ligne contenant la date, le mois sera affiché
sur la ligne précédente (ligne-1)

limite = 31: 'à modifier nombre de colonnes sur une ligne




Plus de plantage de la macro mais rien ne s'affiche ... je ne comprend pas
:-(

Va falloir que je me mette sérieusement aux macros !!!
Si jamais tu peux encore m'aider ... je ne voudrai pas abuser. Sinon pour
comprendre ta macro , ( si je réussi à la faire fonctionner ), quelle est la
fonction qui fait centrer le nom des mois au dessus de la ligne des jours ?
Merci encore.
( nota : pour info j'utilise excel 2007 si jamais il peut y avoir des
différences de fonctionnement suivant les versions ).



--
h2so4
ca PAN
pique DORA
.
Avatar
isabelle
bonjour criocri,

http://cjoint.com/?0cBdh8mUCkq

c'est une macro événementielle, elle s'exécute des qu'il y a un
changement sur la feuil1
pour voir le code fait un clic droit sur l'onglet et selectionne
"visualiser le code"
j'ai mit des explications dans la macro
tu peut ajouter des dates en fin de ligne ou effacer des date en fin de
ligne.

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
For i = 2 To Range("A65536").End(xlUp).Row
On Error GoTo fin
If Day(Range("A" & i)) = 1 Then
x = Range("IV" & i).End(xlToLeft).Column
Rows(i - 1).Clear
Range("A" & i - 1) = "'" & Format(Range("A" & i), "mmmm")
Range(Cells(i - 1, 1), Cells(i - 1, x)).HorizontalAlignment =
xlHAlignCenterAcrossSelection
Rows(i).HorizontalAlignment = xlHAlignCenter
End If
fin:
Err.Clear
Next
Application.EnableEvents = True
End Sub

isabelle

Le 2011-02-26 18:23, criocri a écrit :
Va falloir que je me mette sérieusement aux macros !!!
Si jamais tu peux encore m'aider ... je ne voudrai pas abuser. Sinon pour
comprendre ta macro , ( si je réussi à la faire fonctionner ), quelle est la
fonction qui fait centrer le nom des mois au dessus de la ligne des jours ?
Merci encore.
( nota : pour info j'utilise excel 2007 si jamais il peut y avoir des
différences de fonctionnement suivant les versions ).

Avatar
criocri
h2so4 a écrit le 27/02/2011 à 01h31 :
criocri was thinking very hard :

le principe :
la macro met une formule uniquement dans la case au-dessus d'une date
qui correspond au premier du mois, mais garde ta mise en page.

As-tu vérifié si tu ne devais pas modifier les 3 valeurs
suivantes ?


f1 = "Feuil1": ' à modifier

ligne = 7: ' à modifier ligne contenant la date, le mois sera
affiché
sur la ligne précédente (ligne-1)

limite = 31: 'à modifier nombre de colonnes sur une ligne




Plus de plantage de la macro mais rien ne s'affiche ... je ne comprend pas
:-(

Va falloir que je me mette sérieusement aux macros !!!
Si jamais tu peux encore m'aider ... je ne voudrai pas abuser. Sinon pour
comprendre ta macro , ( si je réussi à la faire fonctionner ),
quelle est la
fonction qui fait centrer le nom des mois au dessus de la ligne des jours ?
Merci encore.
( nota : pour info j'utilise excel 2007 si jamais il peut y avoir des
différences de fonctionnement suivant les versions ).




--
h2so4
ca PAN
pique DORA
.


bonjour, après vérification, j'ai bien modifié les 3 premières lignes suivant mon tableau, mais toujours rien ...
Avatar
criocri
isabelle a écrit le 27/02/2011 à 03h08 :
bonjour criocri,

http://cjoint.com/?0cBdh8mUCkq

c'est une macro événementielle, elle s'exécute des qu'il y
a un
changement sur la feuil1
pour voir le code fait un clic droit sur l'onglet et selectionne
"visualiser le code"
j'ai mit des explications dans la macro
tu peut ajouter des dates en fin de ligne ou effacer des date en fin de
ligne.

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
For i = 2 To Range("A65536").End(xlUp).Row
On Error GoTo fin
If Day(Range("A" & i)) = 1 Then
x = Range("IV" & i).End(xlToLeft).Column
Rows(i - 1).Clear
Range("A" & i - 1) = "'" &
Format(Range("A" & i), "mmmm")
Range(Cells(i - 1, 1), Cells(i - 1, x)).HorizontalAlignment =
xlHAlignCenterAcrossSelection
Rows(i).HorizontalAlignment = xlHAlignCenter
End If
fin:
Err.Clear
Next
Application.EnableEvents = True
End Sub

isabelle

Le 2011-02-26 18:23, criocri a écrit :
Va falloir que je me mette sérieusement aux macros !!!
Si jamais tu peux encore m'aider ... je ne voudrai pas abuser. Sinon pour
comprendre ta macro , ( si je réussi à la faire fonctionner ),
quelle est la
fonction qui fait centrer le nom des mois au dessus de la ligne des jours ?
Merci encore.
( nota : pour info j'utilise excel 2007 si jamais il peut y avoir des
différences de fonctionnement suivant les versions ).




bonjour Isabelle, merci pour ton envoi, je crois que je n'ai jamais été aussi prêt de la solution :-) j'ai même réussi à changer le format de l'affichage du mois en rajoutant l'année. Par contre encore juste un souci, j'ai dupliqué la ligne 2 pour faire l'essai sur plusieurs mois mais cela ne fonctionne pas. Ca affiche uniquement le premier mois en centrant sur l'ensemble des jours. Comme pour mois le code macro est pour moi du chinois, impossible de modifier ton code. Si jamais tu as un livre à me conseiller pour me familiariser avec la programmation sur excel, je veux bien. Merci encore.
Avatar
isabelle
peut tu mettre ton fichier modifié sur

http://www.cjoint.com
ou ici,
http://www.cijoint.fr/

et reviens ici, donner le lien de téléchargement que le site va générer.

isabelle



Le 2011-02-27 07:53, criocri a écrit :
isabelle a écrit le 27/02/2011 à 03h08 :

bonjour criocri,

http://cjoint.com/?0cBdh8mUCkq

c'est une macro événementielle, elle s'exécute des qu'il y
a un
changement sur la feuil1
pour voir le code fait un clic droit sur l'onglet et selectionne
"visualiser le code"
j'ai mit des explications dans la macro
tu peut ajouter des dates en fin de ligne ou effacer des date en fin de
ligne.

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
For i = 2 To Range("A65536").End(xlUp).Row
On Error GoTo fin
If Day(Range("A"& i)) = 1 Then
x = Range("IV"& i).End(xlToLeft).Column
Rows(i - 1).Clear
Range("A"& i - 1) = "'"&
Format(Range("A"& i), "mmmm")
Range(Cells(i - 1, 1), Cells(i - 1, x)).HorizontalAlignment >> xlHAlignCenterAcrossSelection
Rows(i).HorizontalAlignment = xlHAlignCenter
End If
fin:
Err.Clear
Next
Application.EnableEvents = True
End Sub

isabelle

Le 2011-02-26 18:23, criocri a écrit :

Va falloir que je me mette sérieusement aux macros !!!
Si jamais tu peux encore m'aider ... je ne voudrai pas abuser. Sinon pour
comprendre ta macro , ( si je réussi à la faire fonctionner ),
quelle est la
fonction qui fait centrer le nom des mois au dessus de la ligne des jours ?
Merci encore.
( nota : pour info j'utilise excel 2007 si jamais il peut y avoir des
différences de fonctionnement suivant les versions ).





bonjour Isabelle, merci pour ton envoi, je crois que je n'ai jamais été aussi
prêt de la solution :-) j'ai même réussi à changer le format de l'affichage du
mois en rajoutant l'année. Par contre encore juste un souci, j'ai dupliqué la
ligne 2 pour faire l'essai sur plusieurs mois mais cela ne fonctionne pas. Ca
affiche uniquement le premier mois en centrant sur l'ensemble des jours. Comme
pour mois le code macro est pour moi du chinois, impossible de modifier ton
code. Si jamais tu as un livre à me conseiller pour me familiariser avec la
programmation sur excel, je veux bien. Merci encore.

Avatar
criocri
isabelle a écrit le 27/02/2011 à 15h42 :
peut tu mettre ton fichier modifié sur

http://www.cjoint.com
ou ici,
http://www.cijoint.fr/

et reviens ici, donner le lien de téléchargement que le site va
générer.

isabelle



Le 2011-02-27 07:53, criocri a écrit :
isabelle a écrit le 27/02/2011 à 03h08 :

bonjour criocri,

http://cjoint.com/?0cBdh8mUCkq

c'est une macro événementielle, elle s'exécute des qu'il
y
a un
changement sur la feuil1
pour voir le code fait un clic droit sur l'onglet et selectionne
"visualiser le code"
j'ai mit des explications dans la macro
tu peut ajouter des dates en fin de ligne ou effacer des date en fin de
ligne.

Private Sub Worksheet_Change(ByVal Target As Range)
Application.EnableEvents = False
For i = 2 To Range("A65536").End(xlUp).Row
On Error GoTo fin
If Day(Range("A"& i)) = 1 Then
x = Range("IV"& i).End(xlToLeft).Column
Rows(i - 1).Clear
Range("A"& i - 1) = "'"&
Format(Range("A"& i), "mmmm")
Range(Cells(i - 1, 1), Cells(i - 1, x)).HorizontalAlignment >>
xlHAlignCenterAcrossSelection
Rows(i).HorizontalAlignment = xlHAlignCenter
End If
fin:
Err.Clear
Next
Application.EnableEvents = True
End Sub

isabelle

Le 2011-02-26 18:23, criocri a écrit :

Va falloir que je me mette sérieusement aux macros !!!
Si jamais tu peux encore m'aider ... je ne voudrai pas abuser. Sinon pour
comprendre ta macro , ( si je réussi à la faire fonctionner ),
quelle est la
fonction qui fait centrer le nom des mois au dessus de la ligne des jours ?
Merci encore.
( nota : pour info j'utilise excel 2007 si jamais il peut y avoir des
différences de fonctionnement suivant les versions ).







bonjour Isabelle, merci pour ton envoi, je crois que je n'ai jamais
été aussi
prêt de la solution :-) j'ai même réussi à changer
le format de l'affichage du
mois en rajoutant l'année. Par contre encore juste un souci, j'ai
dupliqué la
ligne 2 pour faire l'essai sur plusieurs mois mais cela ne fonctionne pas. Ca
affiche uniquement le premier mois en centrant sur l'ensemble des jours. Comme
pour mois le code macro est pour moi du chinois, impossible de modifier ton
code. Si jamais tu as un livre à me conseiller pour me familiariser
avec la
programmation sur excel, je veux bien. Merci encore.




Voici le lien :


http://www.cijoint.fr/cjlink.php?file=cj201102/cijUakstw6.xls

Comme tu peux voir, la macro ne prend pas en compte les mois suivants. Si jamais ça ne te prend pas trop de temps, j'ai également un souhait ( j'ai l'impression que j'abuse ... :-) ), c'est possible de faire en sorte que ça marche même si mon planning commence un autre jour que le 1er du mois ?
Merci pour ton aide précieuse.
Avatar
isabelle
bonjour criocri,

j'ai modifié la condition pour que le code s'exécute si la cellule de la
colonne A est une date,
j'ai également modifier le texte du mois pour que excel ne le considère
pas comme étant une date

http://cjoint.com/?1cBuQRRzs6J

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As Integer, i As Integer 'déclaration des variables
Application.EnableEvents = False 'désactiver les événements
For i = 2 To Range("A65536").End(xlUp).Row 'de la ligne 2 à 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
Range("A" & i - 1) = "'Période du : " & Format(Range("A" & i),
"mmmm yyyy") 'met le mois au dessus de la ligne i
Range(Cells(i - 1, 1), Cells(i - 1, x)).HorizontalAlignment =
xlHAlignCenterAcrossSelection ' alligne le mois sur x cellule
Rows(i).HorizontalAlignment = xlHAlignCenter ' alligne la ligne de
date au centre
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 12:03, criocri a écrit :
Voici le lien :
http://www.cijoint.fr/cjlink.php?file=cj201102/cijUakstw6.xls

Comme tu peux voir, la macro ne prend pas en compte les mois suivants. Si
jamais ça ne te prend pas trop de temps, j'ai également un souhait ( j'ai
l'impression que j'abuse ... :-) ), c'est possible de faire en sorte que ça
marche même si mon planning commence un autre jour que le 1er du mois ?
Merci pour ton aide précieuse.

Avatar
criocri
isabelle a écrit le 27/02/2011 à 20h44 :
bonjour criocri,

j'ai modifié la condition pour que le code s'exécute si la
cellule de la
colonne A est une date,
j'ai également modifier le texte du mois pour que excel ne le
considère
pas comme étant une date

http://cjoint.com/?1cBuQRRzs6J

Private Sub Worksheet_Change(ByVal Target As Range)
Dim x As Integer, i As Integer 'déclaration des variables
Application.EnableEvents = False 'désactiver les
événements
For i = 2 To Range("A65536").End(xlUp).Row 'de la ligne 2 à 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
Range("A" & i - 1) = "'Période du : " &
Format(Range("A" & i),
"mmmm yyyy") 'met le mois au dessus de la ligne i
Range(Cells(i - 1, 1), Cells(i - 1, x)).HorizontalAlignment =
xlHAlignCenterAcrossSelection ' alligne le mois sur x cellule
Rows(i).HorizontalAlignment = xlHAlignCenter ' alligne la ligne de
date au centre
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 12:03, criocri a écrit :
Voici le lien :
http://www.cijoint.fr/cjlink.php?file=cj201102/cijUakstw6.xls

Comme tu peux voir, la macro ne prend pas en compte les mois suivants. Si
jamais ça ne te prend pas trop de temps, j'ai également un
souhait ( j'ai
l'impression que j'abuse ... :-) ), c'est possible de faire en sorte que
ça
marche même si mon planning commence un autre jour que le 1er du mois ?
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.
Avatar
isabelle
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.

1 2 3 4