MFC adaptées pour fichier partagé
Bonjour Horusbk,
Tu peux déplacer le mini tableau de style dans des colonnes plus loin dans la feuille principale.
Ce qui est le plus adéquat.
Ou créer une feuille nommée TabStyle par exemple et l'y incorporer.
Par contre dans les 2 cas il faudra changer dans le code la partie droite de l'égalité ou de la copie:
Cas même feuille:
' ---- Copie
Range("O1").copy .... ' ou O est la colonne actuelle par celle du déplacement souhaitée.
....... =Range("N" & Chx).interior.Color ' Ou N représente la colonne actuelle par la colonne souhaitée
' idem pour les deux suivantsCas autre feuille en gardant les mêmes colonnes:
' ---- Copie
Range("TabStyle!O1").copy ....
....... =Range("TabStyle!N" & Chx).interior.Color
' idem pour les deux suivantsEnsuite je n'ai pas ton souci d'effacement. Lorsque j'efface l'ensemble de la colonne B, celle contenant les dates. La colonne D n'a plus de couleur. Idem si j'efface l'ensemble des lignes de la colonne D. Cela effacera en plus toute la colonne B.
Seul un effacement d'une ligne de la colonne D modifiera la couleur sans effacer la cellule de la même ligne sur colonne B.
Maintenant je peux modifier le code pour que si tu si effaces entièrement une colonne (B ou autre). Cela provoque le RAZ de toutes les cellules de ton tableau Colonne A à E.
A suivre...
Bonsoir,
J'ai pris la seconde solution, en recopiant le tableau dans une nouvelle feuille nommée "TabStyle" et en modifiant le code :
Private Sub Worksheet_Change(ByVal Target As Range)
Nb = Target.Count
If Nb > 1 And (Target.Column = 2 Or Target.Column = 4) Then
Application.EnableEvents = False
Range("O1").Copy Range(Cells(Target.Row, 4), Cells(Target.Row + Nb - 1, 4))
Range(Cells(Target.Row, 2), Cells(Target.Row + Nb - 1, 2)).ClearContents
[C1].Select: Application.EnableEvents = True: Exit Sub
End If
If Target.Column = 2 Or Target.Column = 4 Then Cells(Target.Row, 10) = Cells(Target.Row, 9)
If Target.Column <> 10 Then Exit Sub
If Target.Value = "" Then Range("TabStyle!O1").Copy Target.Offset(, -6): [C1].Select: Exit Sub
Lig = Range("J" & Rows.Count).End(xlUp).Row
If Not Intersect(Target, Range("J2:J" & Lig)) Is Nothing Then
Chx = Target.Value + 1
Target.Offset(, -6).Interior.Color = Range("TabStyle!N" & Chx).Interior.Color
Target.Offset(, -6).Font.Color = Range("TabStyle!O" & Chx).Font.Color
Target.Offset(, -6).Font.FontStyle = Range("TabStyle!P" & Chx).Font.FontStyle
End If
End SubLorsque je remplis la colonne B une erreur se produit (La Méthode Range de l'objet _Worksheet a échoué) en pointant sur cette ligne :
Target.Offset(, -6).Interior.Color = Range("TabStyle!N" & Chx).Interior.ColorVoici le nouveau fichier avec le nouveau code.
Maintenant je peux modifier le code pour que si tu si effaces entièrement une colonne (B ou autre). Cela provoque le RAZ de toutes les cellules de ton tableau Colonne A à E.
Je suis preneur !
Encore merci !
Horusbk
A nouveau,
Par contre le copy en haut de la macro, tu l'as oublié.
Application.EnableEvents = False
Range("O1").Copy Range(Cells(.... etc...Mais comme tu est preneur de ma proposition d'effacement total du tableau. Jusqu'à la ligne 10. Ou plus, change alors ce nombre.
Pour cela tu sélectionne toutes les dates en colonne B puis touche Suppr.
Je te renvoie le fichier avec le mini-tableau style sur une autre feuille.
Bons tests, bonne continuation.
Bonjour XCellus,
Merci pour cet update.
Mais comme tu est preneur de ma proposition d'effacement total du tableau. Jusqu'à la ligne 10. Ou plus, change alors ce nombre.
Je suppose qu'il s'agit de ces lignes ?
Range(Cells(2, 1), Cells(10, 5)).ClearContentsIf Target.Column = 2 Or Target.Column = 4 Then Cells(Target.Row, 10) = Cells(Target.Row, 9)De plus, à quoi correspond [C1].Select: dans ce code ?
If Target.Value = "" Then Sheets("TabStyle").Range("O1").Copy Target.Offset(, -5): [C1].Select: Exit SubHorusbk
Bonsoir Horusbk,
En fait il s'agit de lignes. Donc cela concerne uniquement:
Range(Cells(2, 1), Cells(10, 5)).ClearContents
Pour le [C1].select (raccourci de Range("C1").select). Le but est d'opérer un décalage pour ne pas rester sur la colonne D afin de ne pas être encore sur la procédure évènementielle agissant sur la colonne D. En fait j'aurais pu passer par la désactiver avant la copie puis la réactiver une fois la copie faite. Mais [C1].select est plus court et a le même effet que Application.EnableEvents= False (Désactivation) et Application.EnableEvents=True (Activation).
Enfin j'ai dernièrement ajouté la possibilité de supprimer seulement une date dans la colonne B. Afin d'effacer la pseudo MFC de la même ligne, donc la rendre blanche. L'effacement de 2 ou plus de dates faisant toujours un RAZ du tableau entier.
Bons tests, bonne continuation.
Bonjour X Cellus,
Je suis ravi ! Tout fonctionne parfaitement et je n'ai eu aucun mal à transposer la programmation du fichier test vers le fichier de mon entreprise en adaptant le codage à la structure de ce dernier.
J'aurais une dernière question concernant la mise en forme : les bordures sont-elles gérées et si oui, faut-il que les rajoutent dans ColFond, ColPolice ou Fonte dans le tableau TabStyle ?
Encore merci de ton aide.
Horusbk
Bonjour Horusbk,
Content que cela plaise. Pour ta dernière question, il faut savoir que la cellule O1 comporte les bordures.
En effet celle-ci, en effaçant la pseudo MFC par blanchiment de toute cellule en colonne D, supprimerait les bordures si O1 n'en comportait pas.
Pour les autres du mini-tableau de style, pas besoin de bordures dans le cas ou dans le tableau colonne A à E il existe des bordures.
Les autres pseudo MFC ne font que s'intégrer dans la cellule en colonne D qu'il y ait dans la cellule réceptrice, une bordure ou non.
Elles n'effaceront jamais une bordure.
N'oublie pas de cliquer pour clore ce sujet si c'est Ok pour toi. Merci.
Bonjour X Cellus,
Merci pour ces explications, et encore merci pour ton travail !
Je passe le sujet en résolu.
Horusbk