[VBA] Centrage sur plus. colonnes selon NO Semaine (12 feuilles)

Staple1600

XLDnaute Barbatruc
Bonsoir le forum


Je bute sur un petit souci de mise en forme par VBA
(Centrage sur plusieurs colonnes)

Dans le classeur joint , après l'éxécution de la macro creation
(au passage je suis preneur de tout conseil d'amélioration de cette macro)

je voudrais centrer les numéros de semaine sur plusieurs colonnes
(du Lundi au Dimanche) et ce sur sur les 12 feuilles.

En sachant que pour la première semaine du mois
parfois le centrage doit se faire sur moins de 7 colonnes
(ex février 2008 Semaine 6).

Merci à tous ceux qui voudront s'intéresser à ce petit problème
(que jusqu'à maintenant je résouds manuellement sous VBA)


edit:
Sub Macro1()
'testé sur le mois de février
For Each cell In Range("C19:AE19")
If Not IsEmpty(cell) Then
Range(cell, cell.Offset(0, 7)).HorizontalAlignment = xlCenterAcrossSelection
Range(cell, cell.Offset(0, 7)).VerticalAlignment = xlCenter
End If
Next cell
End Sub

Avec la macro ci-dessus j'ai des soucis pour la dernière semaine du mois de février
(anneé testée 2008)



Bonne soirée

Staple
 
Dernière édition:

Cousinhub

XLDnaute Barbatruc
Re : [VBA] Centrage sur plus. colonnes selon NO Semaine (12 feuilles)

le code ci-joint :

With Sheets(Z)
For Each cel In .Range("C19:AF19").SpecialCells(xlCellTypeConstants, 23)
If cel.Column <= 9 And cel.Column <> 3 Then .Range(.Cells(19, 3), .Cells(19, cel.Column - 1)).Merge
If cel.Offset(1, 6).Value <> "" Then
cel.Resize(1, 7).Merge: cel.HorizontalAlignment = xlCenter
Else
cel.Resize(1, .[IV20].End(xlToLeft).Column - cel.Column + 1).Merge: cel.HorizontalAlignment = xlCenter
End If
Next cel
End With
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] Centrage sur plus. colonnes selon NO Semaine (12 feuilles)

Re


-> bhbh:Le fichier s'est décentrer en voulant se centrer (lol)


On verra demain (l'heure devenant tardive)

En tout cas merci à tous

edition
bhbh comme tu as édité bah j'édite aussi
j'ai testé ton fichier

pour 2008

Il y a quelques petits soucis
Pas de S1 pour la première semaine de janvier
et pas de première semaine pour plusieurs mois
(mais le fusionnage de cellules fonctionne)

Tu n'aimes pas le centrage sur plusieurs colonnes?
 
Dernière édition:

Luki

XLDnaute Accro
Re : [VBA] Centrage sur plus. colonnes selon NO Semaine (12 feuilles)

Re,

Argh!! :eek: pouvez répéter la question ??????

Concernant la semaine 53 en janvier, ça me paraît pas réel.. mais je n'en sais pas plus que toi!

Concernant le reste:

Si tu crées la feuille janvier en vba, tu peux aussi bien créer les autres via une boucle.
L'avantage de créer en vba, c'est que tu pars toujours sur un fichier propre, pas de manip à la mimine avec les risques de décalages d'entête etc et les bugs qui s'ensuivent. ( A moins de blinder le code à fond, mais là, c'est une ligne pour dire quoi faire et 10 lignes pour éviter les fausses manip de l'utilisateur!)

Mais si c'est un modèle complexe, ça peut demander beaucoup de code et beaucoup de débuggage.

En bref, à 00h41, je dirais : c'est comme tu le sens ! :p ... à toi de voir où tu est le plus à l'aise.

Sur ce, bonne nuit et n'hésites pas si tu as besoin de compléments.
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] Centrage sur plus. colonnes selon NO Semaine (12 feuilles)

Re

->luki

Comme je l'ai dis précédemment (dans un autre post)
Pour le fun, j'essaie de me compliquer la tâche
histoire de progresser en vba
En l'occurence ta macro Centrage fonctionne
(celle de bhbh fusionne mais ne centre pas sur plusieurs colonnes)

Donc j'essaie maintenant d'essayer en créant tout le classeur en VBA
(sans feuille modéle) sur le principe suivant
Sheets.Add Count:=11
For i = 1 To Sheets.Count
Sheets(i).Name = UCase(Format(i * 30, "mmmm"))
Next i
X = InputBox("Année?")
Un = CDate(X & "/1/" & "1")
et ensuite ca se corse

Mais bon pour le moment je vais ranger mon VBA
et sortir ma couette

Bonne nuit à tous
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] Centrage sur plus. colonnes selon NO Semaine (12 feuilles)

Bonjour à tous


Me revoici avec une version remodelée (edit deux fichiers avec une petite variante pour les numéros de semaine:
tplanv2.xls utilisation de formules dans les cellules
tplanv3.xls calcul du numéro de semaine en VBA)

(en créant les feuilles en VBA sans feuille modèle au départ comme précédemment)

->luki: j'ai inclu ta macro centrage
(qui me pose un léger problème car si j'utilise ma logique
pour créer les numéros de semaine, ta macro récrit par dessus)

Je suis certain d'avoir vu dans le commerce des calendriers
qui indiquait parfois semaine 53 pour la première semaine de janvier

par exemple en 2004
du lundi 27/12/04 au vendredi 31/12/04 semaine 53

donc normalement du samedi 1/01/05 au dimanche 2/01/05 on est toujours en
semaine 53

et la semaine 1 commence le lundi 3/01/05

Il me semble que la première semaine d'une année est la première semaine complète (lu cela quelquepart sur le forum et ailleurs sur le net)

Si c'est le cas je cherche comment modifier la macro centrage pour prendre en compte cela.

Si vous avez des commentaires et suggestions sur le code de la macro test2
merci de m'en faire part.
(critiques et modifications à effectuer seront les bienvenues)


Bon week-end à tous.

Staple
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : [VBA] Centrage sur plus. colonnes selon NO Semaine (12 feuilles)

ReBonjour

Pour INFO

Pour ceux que cela intèresse (à propos des numéros de semaine)

Il y a un bug avec DatePart


Solution proposée par Microsoft
Code:
Function WOY (MyDate As Date) As Integer   ' Week Of Year
  WOY = Format(MyDate, "ww", vbMonday, vbFirstFourDays)
  If WOY > 52 Then
    If Format(MyDate + 7, "ww", vbMonday, vbFirstFourDays) = 2 Then WOY = 1
  End If
End Function

Informations complètes ici:BUG: Les fonctions Format et DatePart peuvent renvoyer un numéro de semaine erroné pour le dernier lundi de l'année


A+

Staple
 

jeanpierre

Nous a quitté
Repose en paix
Re : [VBA] Centrage sur plus. colonnes selon NO Semaine (12 feuilles)

Bonsoir tous,

Il me semble que la semaine 1 commence avec celle qui contient un jeudi... (Edit : Différent aux USA)

Ainsi, si le premier janvier est un mercredi, la semaine est nommée Semaine 1
et si le premier janvier est vendredi, la semaine est nommée Semaine 53.

Donc, pas trop besoin de se prendre la tête, néanmoins, il faut en tenir compte sous VBA... (simple ou pas ?)

Bonne soirée les amis.

Jean-Pierre
 
Dernière édition:

Luki

XLDnaute Accro
Re : [VBA] Centrage sur plus. colonnes selon NO Semaine (12 feuilles)

Bonsoir à tous

Le projets avance. Staple tu dors et tu manges quand ?! :p

Pour éviter la réecriture de la macro centrage, passe la ligne en commentaire:
Code:
' .Cells(1, 1) = "Semaine " & NumSem
Je regarde le code plus en détail et je te fais part des commentaires.
J'en profiterai peut être pour nettoyer la macro "centrage" des éléments redondants avec ton code.

A+
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] Centrage sur plus. colonnes selon NO Semaine (12 feuilles)

Re à tous


->Luki: cette nuit dernier message 1h32
puis retour à 14h32
Ca m'a laissé le temps de dormir
Et là je viens de manger

Merci de t'inquiter de ma santé (lol)

edit: c'est vrai que je devrais plus dormir cela m'aurait permis de voir qu'en commentant
la ligne que tu m'indiques le léger problème disparait instantatément.



->jeanpierre: tu as raison (et c'est plus simple)
cf La norme ISO 8601, largement utilisée en Europe, stipule, entre autres : ISO 8601 Éléments de données et formats d'échange - Échange d'information - Représentation de la date et de l'heure
ISO 8601 : 1988 (E) paragraphe 3.17 :
« semaine, calendrier : période de sept jours d'une année de calendrier, commençant
un lundi et identifiée par son numéro ordinal dans l'année ;
la première semaine de calendrier d&apos;année est celle qui inclut le
premier jeudi de cette année.
Dans le calendrier grégorien, ceci équivaut
à la semaine qui inclut le 4 janvier. »

Cette norme peut être mise en oeuvre en appliquant les règles suivantes aux semaines de calendrier :
• Une année est divisée en 52 ou 53 semaines.
• Une semaine se compose de 7 jours, lundi étant le jour 1 et dimanche le jour 7.
• La première semaine d'une année est celle qui comporte au moins 4 jours.
• Si une année ne se termine pas un dimanche, soit ses derniers jours 1 à 3 appartiennent à la semaine 1 de l'année suivante, soit les premiers jours 1 à 3 de l'année suivante appartiennent à la dernière semaine de l'année en cours.
• Seule une année qui commence ou qui se termine un jeudi possède 53 semaines.

Donc en suivant ta réflexion
'pour la feuille Janvier
Select Case Weekday(Jour_Un, vbMonday)
Case 3
Range("C19")=1
Case 5
Range("C19")=53
End select

Mais comment m'en servir pour calculer le reste des numéro de semaines des autres mois?

Je retourne y réflechir

Bonne soirée à vous tous
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 668
Messages
2 090 739
Membres
104 643
dernier inscrit
adriano22