Formule matricielle, insertion colonne et MFC

DoubleZero

XLDnaute Barbatruc
Bonjour à toutes et à tous,

Pour créer un calendrier annuel, j'ai réussi à reproduire une formule matricielle.

Actuellement, mes petits soucis sont les suivants :

1 - est-il obligatoire de copier-coller le résultat obtenu (de l'onglet « choix année » vers l'onglet « année mise en forme ») ? Ceci, afin de pouvoir insérer une colonne entre chaque mois et compte tenu de l’impossibilité de « modifier une partie de matrice » ?

2 - je ne parviens pas à appliquer une mise en forme conditionnelle sur les jours fériés (onglet « année mise en forme », à cause des liens déjà présents dans l'ensemble des colonnes.

J’espère m’être exprimée aussi clairement que possible et vous remercie pour votre aide.

Cordialement,

00 / :):)
 

Fichiers joints

CISCO

XLDnaute Barbatruc
Re : Formule matricielle, insertion colonne et MFC

Bonjour

La même chose, sans la MFC ni les bordures, en beaucoup plus simple. A toi d'étendre la formule sur la plage adéquate.

@ plus
 

Fichiers joints

PMO2

XLDnaute Accro
Re : Formule matricielle, insertion colonne et MFC

Bonjour,

J'ai une piste en VBA qui, j'espère, ne constitue pas un obstacle.

J'ai conservé votre feuille "CHOIX ANNEE" avec ses formules matricielles et sa MFC car il n'y a rien à redire.
En revanche j'ai supprimé l'autre feuille.

1) copiez le code suivant dans un module standard

Code:
Const SOURCE As String = "CHOIX ANNEE"

Sub CalendrierAnnee()
Dim S1 As Worksheet
Dim S2 As Worksheet
Dim R As Range
Dim C As Range
Dim Annee As Long
Dim i&
Dim A$
Dim var
Dim mois
mois = Array("Janvier", "Février", "Mars", "Avril", "Mai", "Juin", "Juillet", "Août", "Septembre", "Octobre", "Novembre", "Décembre")
Set S1 = Sheets(SOURCE)
Annee = S1.[a1]
For i& = 1 To ActiveWorkbook.Sheets.Count
  If ActiveWorkbook.Sheets(i&).Name = Annee Then
    MsgBox "La feuille ''" & Annee & "'' existe déjà"
    Exit Sub
  End If
Next i&
S1.Copy After:=Sheets(Sheets.Count)
Set S2 = ActiveSheet
S2.Name = Annee
S2.Cells.Copy
With S2.[a1]
  .PasteSpecial Paste:=xlPasteValues
  With .Validation
    .Delete
    .Add Type:=xlValidateInputOnly, AlertStyle:=xlValidAlertStop, Operator:=xlBetween
  End With
  .Select
  .Value = Chr(160) & Annee
End With
On Error Resume Next
S2.Shapes("CommandButton1").Cut
On Error GoTo 0
With S2.Cells
  .FormatConditions.Delete
  .NumberFormat = "ddd dd"
  .Interior.ColorIndex = xlNone
End With
S2.Rows(2).Insert
S2.Range("a2:l2") = mois
Set R = S2.[a1].CurrentRegion
For i& = R.Columns.Count To 2 Step -1
  S2.Columns(i&).Insert Shift:=xlToRight
Next i&
With S2.Range("a1:x1")
  .HorizontalAlignment = xlCenter
  .MergeCells = True
  .Font.Size = 20
End With
Set R = S2.Range("a2:b2")
For i& = 1 To 12
  With R
    .HorizontalAlignment = xlCenter
    .MergeCells = True
    .Interior.ColorIndex = 36 - (i& Mod 2)
    With .Font
      .Size = 10
      .Bold = True
    End With
  End With
  Set R = R.Offset(0, 1).Resize(1, 2)
Next i&
With S2.Columns
  .ColumnWidth = 11
  .AutoFit
End With
Set R = S2.[a1].CurrentRegion
For Each C In R
  If C.Address <> "$A$1" Then
    A$ = Format(C, "ddd")
    If A$ = "sam." Or A$ = "dim." Then
      C.Interior.ColorIndex = 6
    End If
  End If
Next C
'--- Traitement des jours fériés ---
var = JoursFeries(Annee)
For Each C In R
  For i& = 1 To UBound(var, 1)
    If C = var(i&, 2) Then
      If C.Interior.ColorIndex = xlNone Then C.Interior.ColorIndex = 45
      With C.Offset(0, 1)
        .Interior.ColorIndex = 45
        .Value = var(i&, 1)
      End With
      Exit For
    End If
  Next i&
Next C
Application.CutCopyMode = False
End Sub

Public Function JoursFeries(ByVal Annee As Integer) As Variant
Dim T(1 To 12, 1 To 2)
T(1, 1) = "Jour de l'An"
T(1, 2) = CDate("1/1/" & Annee)
'--- Algorithme jour de Pâques ---
Dim nE As Integer
Dim nH As Integer
Dim nK As Integer
Dim nP As Integer
Dim nQ As Integer
Dim nI As Integer
Dim nJ As Integer
Dim nGolden As Integer
Dim nCentury As Integer
Dim nCenturyQ As Integer
Dim Paques As Date
   nGolden = Annee Mod 19
   nCentury = Annee \ 100
   nCenturyQ = nCentury \ 4
   nE = (8 * nCentury + 13) \ 25
   nH = (19 * nGolden + nCentury - nCenturyQ - nE + 15) Mod 30
   nK = nH \ 28
   nP = 29 \ (nH + 1)
   nQ = (21 - nGolden) \ 11
   nI = (nK * nP * nQ - 1) * nK + nH
   nJ = ((Annee \ 4 + Annee) + nI + 2 + nCenturyQ - nCentury) Mod 7
   nJ = 28 + nI - nJ
   If nJ <= 31 Then
       Paques = DateSerial(Annee, 3, nJ)
   Else
       Paques = DateSerial(Annee, 4, nJ - 31)
   End If
'-----------------
T(2, 1) = "Pâques"
T(2, 2) = CDate(Paques)
T(3, 1) = "L.Pâques"
T(3, 2) = CDate(Paques) + 1
T(4, 1) = "Fête Travail"
T(4, 2) = CDate("1/5/" & Annee)
T(5, 1) = "Victoire 1945"
T(5, 2) = CDate("8/5/" & Annee)
T(6, 1) = "Ascension"
T(6, 2) = CDate(Paques) + 39
T(7, 1) = "L.Pentecôte"
T(7, 2) = CDate(Paques) + 50
T(8, 1) = "Fête Nationale"
T(8, 2) = CDate("14/7/" & Annee)
T(9, 1) = "Assomption"
T(9, 2) = CDate("15/08/" & Annee)
T(10, 1) = "Toussaint"
T(10, 2) = CDate("1/11/" & Annee)
T(11, 1) = "Armistice"
T(11, 2) = CDate("11/11/" & Annee)
T(12, 1) = "Noël"
T(12, 2) = CDate("25/12/" & Annee)
JoursFeries = T
End Function

2) à partir de la feuille CHOIX ANNEE choisissez une année puis lancer la macro CalendrierAnnee

A NOTER la fonction personnalisée "JoursFeries" est une fonction matricielle et peut être utiliser au niveau utilisateur.
Il faut, au préalable, sélectionnez une plage de 12 lignes sur 2 colonnes et la rentrer avec les touches Ctrl et Majuscule maintenues.
Voir le résultat dans la feuille "Test de la fonction JoursFeries". Après son utilisation, il est nécessaire de mettre la 2ème colonne au format Date.

Malheureusement, je suis sous Excel 2003 mais en principe (???) l'ascendance est assurée dans Excel 2007/2010.

Cordialement.

PMO
Patrick Morange
 

Monique

XLDnaute Barbatruc
Re : Formule matricielle, insertion colonne et MFC

Bonjour,

La formule matricielle étendue sur 12 mois de 2 colonnes chacun.
La même MEFC pour tout le tableau. (Sam, dim et fériés)
Mais est-ce ça vaut le coup ?

Edit
Je retire ce que j'ai dit,
je retire le fichier,
j'en mets un autre :
pas besoin de validation matricielle
 

Fichiers joints

Dernière édition:

DoubleZero

XLDnaute Barbatruc
Re : Formule matricielle, insertion colonne et MFC

Bonsoir à toutes et à tous,

Je vous remercie, Monique, CISCO, PMO2, pour le temps que vous avez passé afin de m’offrir, chacun, votre bijou qui fonctionne à merveille !

Sachant à peine que deux et deux font quatre, et encore… j’en doute parfois, j’avoue ne pas tout saisir.

CISCO, je découvre la fonction MOD, associée, qui plus est, à ENT et SI. Lorsque je consulte sa définition, je ne suis pas plus avancée : « Renvoie le reste de la division de l'argument nombre par l'argument diviseur. Le résultat est du même signe que diviseur. » Je vais devoir travailler pour assimiler tout cela ! J’espère y parvenir…

PMO2, moi qui ne sais me servir que de l’enregistreur de macro, je suis ébahie du résultat obtenu grâce à tout ce « charabia » dont je ne comprends mot !

Monique, outre l’imbrication de formules à la fois multiples et fort complexes, je fais connaissance de la barre de défilement !

J’ai du pain sur la planche pour assimiler le plus possible.

Encore merci à vous trois et bonne fin de soirée.

Cordialement,

00 / :):)
 

CISCO

XLDnaute Barbatruc
Re : Formule matricielle, insertion colonne et MFC

Bonsoir à tous

Doublezéro, la fonction ENT n'est pas nécessaire dans ma proposition (J'avais fait l'essai d'une autre formule sur ce fichier, et j'ai oublié de l'effacer). Donc tu peux enlever ENT( et un peu plus loin une ).


Pour ce qui est de MOD, des exemples valent parfois mieux qu'une longue explication :
MOD(3;2) = 1
MOD(25;4)=1
MOD(100;98)=2
MOD(10;2)=0
MOD(10;4)=2

MOD donne le reste de la division du premier nombre par le second.

@ plus
 
Dernière édition:

DoubleZero

XLDnaute Barbatruc
Re : Formule matricielle, insertion colonne et MFC

Pour ce qui est de MOD, des exemples valent parfois mieux qu'une longue explication :
MOD(3;2) = 1
MOD(25;4)=1
MOD(100;98)=2
MOD(10;2)=0
MOD(10;4)=2

MOD donne le reste de la division du premier nombre par le second.

@ plus
Encore MERCI, CISCO, et à bientôt.

Cordialement,

:):)
 

Brigitte

XLDnaute Barbatruc
Re : Formule matricielle, insertion colonne et MFC

Bonjour,

Quels prodiges, vos calendriers !

Pour dire de partager, j'ai sur mon pc un fichier "calendrier" qui fait plein de choses aussi, pris sur xld en 2008, mais quand et qui l'avait fait, je ne sais plus... Le résumé dit TIBO (ce qui ne m'étonnerait pas, mais il est peut être parti de l'oeuvre de qqun au départ).

Et à voir les couleurs des jours fériés, à mon avis, Monique avait déjà sévi ;-)

Je vous le livre.
 

Fichiers joints

DoubleZero

XLDnaute Barbatruc
Re : Formule matricielle, insertion colonne et MFC

Bonjour,

Quels prodiges, vos calendriers !
Bonjour Brigitte, le forum,

Merci pour les éloges, Brigitte, mais je ne les mérite pas car je n’ai rien inventé. En réalité, je n’ai fait que repérer une formule ici, une autre là et malgré ce, en très mauvaise autodidacte, j’avoue avoir bien « souffert »…

A présent, je vais tenter de le modifier un peu et le « posterai » volontiers s’il peut servir à quelqu’un.

Merci, également, pour le superbe partage qui est déjà bien au chaud !

Au plaisir, Brigitte, et bonne continuation.

Cordialement,

:):)
 

Brigitte

XLDnaute Barbatruc
Re : Formule matricielle, insertion colonne et MFC

Bonjour,

Je voulais ouvrir, par curiosité... mais le zip contenu dans cijoint est bizarre, contient plein de répertoires... du coup j'ai refermé, tu devrais ne mettre que le .xls.

Bonne journée.
 

DoubleZero

XLDnaute Barbatruc
Re : Formule matricielle, insertion colonne et MFC

...bizarre, contient plein de répertoires... du coup j'ai refermé, tu devrais ne mettre que le .xls.
Bonne journée.
Bonjour, Brigitte, le forum,

Je ne vois pas ce qui a pu se passer !

Le .xls, ne peut s'envoler... (182 ko), le zip du .xls est également trop lourd (109 ko).

Qui plus est, l'enregistrement sous .xls affiche "perte de fonctionnalités".

Comment faire ???

Cordialement,

:):)
 

Brigitte

XLDnaute Barbatruc
Re : Formule matricielle, insertion colonne et MFC

Bonjour,

Envoie le moi par mail si tu veux, je le posterai ici pour toi.

Demande moi mon adresse par MP... je me ferai un plaisir de t'aider (je peux poster des pj jusqu'à 250 ko avec le compte supporter xld).
 

Brigitte

XLDnaute Barbatruc
Re : Formule matricielle, insertion colonne et MFC

Bonjour tout le monde,

Bonjour DoubleZero... Voici donc ton fichier posté ici... Comme cela tout le monde pourra en profiter. Je le mets dans un zip, car je n'ai pas 2007 au boulot et j'ai peur, voyant le suffixe xlsm, de perdre les macros, sinon.

C'est joli les commentaires avec les petites images... comment t'as fait ca ?

DoubleZero m'a confié attendre nos suggestions si on voit des choses à améliorer ou qui ne vont pas.

Merci à toi du partage de ton travail. C la philosophie d'xld, ca... venir chercher de l'aide, remercier, et partager le résultat. Super.

Bon we.
 

Fichiers joints

Dernière édition:

DoubleZero

XLDnaute Barbatruc
Re : Formule matricielle, insertion colonne et MFC

C'est joli les commentaires avec les petites images... comment t'as fait ca ?
Bonjour à toutes et à tous,

Merci, Brigitte, pour ton aide.

Pour modifier le fond des commentaires :

clic droit sur la cellule dans laquelle l'image doit apparaître
insérer un commentaire
sélectionner le cadre du commentaire
clic droit
format de commentaire
couleurs et traits
remplissage
couleur
motifs et textures
image
sélectionner une image (à choisir dans notre dossier "images")


Merci, également, à BOISGONTIER qui m'a appris cette astuce sur son site !

Cordialement,

:):)
 

Brigitte

XLDnaute Barbatruc
Re : Formule matricielle, insertion colonne et MFC

Bonsoir,

Oui, ca je connaissais. Mais j'ai cru que carrément c'était automatique les insertions d'images en fonction de la date, là ca aurait été fort, mais qu'est ce qui arrête les xldiens !!

Bonne soirée, DoubleZero, moi je trouve que ton pseudo est pas très évocateur de ton niveau...

Bizzz
 

DoubleZero

XLDnaute Barbatruc
Re : Formule matricielle, insertion colonne et MFC

DoubleZero, moi je trouve que ton pseudo est pas très évocateur de ton niveau...

Bizzz
Bonsoir à toutes et à tous,

Brigitte, à cause de tes louanges, mes sabots risquent d'enfler et si je ne parvenais plus à me chausser, tu en serais responsable...

Bizzz itou pour toi et cordialement au forum,

00 / :):)
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas