• Initiateur de la discussion Initiateur de la discussion VIARD
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

VIARD

XLDnaute Impliqué
Bonjour à toutes et tous

Pb : MFC
Ci-joint 2 fichiers.
1° ‘MFCGauche.xlsm
En réalisant une MFC Gauche pas de souci pour mettre une bordure sur une ligne de 4 colonnes.
Dans un deuxième temps, j’ai réalisé programme VBA de cette MFC (via l’enregistreur).
Le progr. Fonctionne correctement.
Maintenant je veux piloter la macro en affectant une autre sélection par ‘InputBox’.
Et là cela ne marche pas.

2° ‘MFC_Manip(1).xlsm
Ici, c’est un peu plus compliqué.
J’ai un calendrier sur un mois, toutes les MFC fonctionnent, sauf la MFC de bordure du dimanche sur 2 colonnes. (je ne sais pas pourquoi) et pourtant elle a fonctionné une fois.
Donc j’ai fait par VBA une petite macro (pas de MFC) là c’est bon.
Mais ce que je désire c’est une macro MFC.
‘PAF’ que je remercie vivement m’a déjà aidé sur MFC.

Nota : sur les MFC je connais très peu de chose, c’est un peu ma bête noire.

En vous remerciant tous par avance.
Jean-Paul
 

Pièces jointes

Re : Mfc

Pour ce qui concerne : 2° ‘MFC_Manip(1).xlsm

Bonjour,

Votre problème est dû au chevauchement des MFCs sur la même plage OU sur une section de plage qui leur est commune. C'est très laborieux à débrouiller.

Je vous conseille d'oublier les MFCs et d'utiliser la programmation événementielle.
Si vous êtes intéressé, je peux construire un exemple.

Bon courage.
 
Re : Mfc

Bonjour PM02 et à tous

Merci de vous intéressez à ce problème particulier.
Effectivement, j'ai bien pensé à jouer sur les priorités pour le chevauchement, mais rien ni fait.
D'autre part, modifier une formule MFC à l'aide d'une variable ne fonctionne pas (il semble que ce soit quelque chose que l'on ne peut pas faire).

Bon, je veux bien un exemple événementiel, après je me débrouillerai.

Merci pour le coup de main.

Jean-Paul
 
Re : Mfc

Bonjour,

Voici un exemple de mise en forme de cellules sans passer par une MFC et sans écraser (par chevauchement) une MFC existante.
On passe par l'événement Worksheet_Change de la feuille concernée.

Code à copier dans la fenêtre de code de la feuille concernée
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Plage As Range
Dim C As Range
Dim R As Range
'---
'##############################
'### Première mise en forme ###
'### D Interior.ColorIndex  ###
'##############################
'--- On détermine la plage où s'opère l'action (à adapter)---
Set Plage = Range("c5:c" & Range("c5").End(xlDown).Row & "")
'--- Balayage de chaque cellule de la plage ---
For Each C In Plage
  '--- La condition  ET l'action ---
  If C = "D" Then
    C.Interior.ColorIndex = 40
  Else
    C.Interior.ColorIndex = xlNone
  End If
Next C

'#########################################
'###      Deuxième mise en forme       ###
'### D Border et 1ère cellule à gauche ###
'#########################################
'--- On détermine la plage où s'opère l'action (à adapter) ---
Set Plage = Range("c5:c" & Range("c5").End(xlDown).Row & "")
'--- Balayage de chaque cellule de la plage ---
For Each C In Plage
  '--- L'union de D Border et 1ère cellule à gauche ---
  Set R = Application.Union(C, C.Offset(0, -1))
  '--- La condition  ET l'action ---
  With R.Borders(xlEdgeBottom)
    If C = "D" Then
      .LineStyle = xlContinuous
      .Weight = xlThin
      '.... autres propriétés éventuellement
      .Color = vbBlue
    Else
      .LineStyle = xlNone
    End If
  End With
Next C

'... autres actions ...
'...
'...
End Sub

La plage concernée est à adapter avec l'instruction
Code:
'--- On détermine la plage où s'opère l'action (à adapter)---
Set Plage = Range("c5:c" & Range("c5").End(xlDown).Row & "")

*********************
Toutefois et après maintes recherches, j'ai découvert qu'il était possible de passer outre les chevauchements en utilisant une MFC faisant appel à une fonction personnalisée.
C'est bien plus abstrait et bien moins intuitif que la méthode passant par un événement mais, si cela vous intéresse, je peux construire un exemple.

Bon courage et à plus.
 

Pièces jointes

Re : Mfc

Bonjour PM02, Pascal et à tous

Pascal, tu as tout à fait raison, c'est déjà fait.
PMO2, félicitation, je te tire mon chapeau, faire tout ça avec si peu de code.
toutefois il y a une chose que je ne vois pas c'est la coloration du samedi dans le code.
et l'arrêt de la plage (.Row & "") je ne connaissais pas.
De plus je pense que le code peut être étendu facilement. (voir un calendrier complet)

Mais par curiosité, sans vouloir obliger un coup d’œil avec MFC mérite un détour.
En tout cas je vous remercie pour le travail accompli.

Amicalement à tous

Jean-Paul
 
Re : Miise en forme avec pseudo MFC personnalisée sans incidence sur MFC existante

Bonjour,

toutefois il y a une chose que je ne vois pas c'est la coloration du samedi dans le code.

J'ai fait exprès de laisser une MFC qui met en forme la présence de "S" afin de tester que la macro n'interfère pas sur elle (voir le gestionnaire des règles de mise en forme).

*********
Mais par curiosité, sans vouloir obliger un coup d’œil avec MFC mérite un détour.

Voici un exemple de mise en forme avec pseudo MFC personnalisée sans incidence sur MFC existante

1) Copiez le code suivant dans la fenêtre de code de la feuille concernée
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call MFCpmo1
End Sub

2) Copiez le code suivant dans un module Standard
Code:
Dim T() As Variant  'Tableau à 2 dimensions
                    'Dimension 1 => booléenne qui indique si la condition est vérifiée OU non
                    'Dimension 2 => string : l'adresse de la cellule
Dim Tcompteur&  'Compteur de tableau

Sub SetMFC_pmo(Optional dummy As Byte)
Dim C As Range
'---
Set C = Application.Caller
'--- Tableau de l'adresse des cellules ---
Tcompteur& = Tcompteur& + 1
ReDim Preserve T(1 To 2, 1 To Tcompteur&)
T(1, Tcompteur&) = False
T(2, Tcompteur&) = C.Address

'### La condition est-elle vérifiée ###
If C = "D" Then T(1, Tcompteur&) = True

End Sub

Sub MFCpmo1(Optional dummy As Byte)
Dim R As Range
Dim R2 As Range
Dim i&
'---
For i& = 1 To Tcompteur&
  Set R = Range(T(2, i&))
  '---
  Set R2 = Application.Union(R, R.Offset(0, -1))
  '---
  If T(1, i&) = True Then
  
'### Application de la mise en forme ###
    '--- Couleur du fond ---
    R.Interior.Color = vbYellow
    '--- La police ---
    With R.Font
      .Bold = True
      .Italic = True
    End With
    '--- Bordure inférieure ---
    R2.Borders(xlEdgeBottom).LineStyle = xlContinuous
    R2.Borders(xlEdgeBottom).Weight = xlThin
    R2.Borders(xlEdgeBottom).Color = vbBlack
  Else
    R.Interior.Pattern = xlNone
    '---
    With R.Font
      .Bold = False
      .Italic = False
    End With
    '---
    R2.Borders(xlEdgeBottom).LineStyle = xlNone
'#######################################
    
  End If
Next i&
'--- Réinitialisation du tableau ---
Erase T
Tcompteur& = 0
End Sub

3) Créer les MFCs suivantes
Sans titre1.JPG
 

Pièces jointes

Re : Miise en forme avec pseudo MFC personnalisée sans incidence sur MFC existante

Bonjour PMO2 et à tous

J’ai continué des manips, voici le résultat en fichier joint.
Après avoir repris le code pour supporter quelques améliorations.
Avec MFC, je sais faire, mais pour corser j’ai voulu le faire par VBA.
Le résultat est plus ou moins heureux, dont voici le résultat.
D’une part, j’ai prolongé le trait du dimanche sur 2 colonnes, et
Là je ne maîtrise pas la boucle For Each avec UNION, donc pour moi c’est améliorable.
De même la longueur du cadre en fonction du mois.
Ça marche, mais l’on peut simplifier.

Pour la nouvelle version MFC avec appel de Sub, les soulignements restent au changement de mois.
Merci pour ton aide précieuse.

Amicalement
Jean-Paul
 

Pièces jointes

- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
7
Affichages
567
Réponses
3
Affichages
700
Réponses
0
Affichages
538
Réponses
0
Affichages
408
Réponses
13
Affichages
1 K
Réponses
15
Affichages
1 K
Retour