MFC adaptées pour fichier partagé

Bonjour,

Je travaille actuellement sur un fichier pour mon travail. Nous utilisons la fonction de partage (native jusqu'à excel 2010) qui permet de travailler à plusieurs sur un même fichier Excel. Le fichier se trouve sur un serveur local commun et non sur sharepoint, onedrive ou excel online !

Vu que la fonction des mises en forme conditionnelles bug pas mal en mode partagé j'aimerais créer une alternative grâce à la fonction Worksheet_Change de ma feuille de calcul. J'aimerais mettre en évidence l'état de mes commandes par un code couleur : orange (en attente), vert (validée) et rouge (problème sur la commande).

Pour ce faire, j'ai une colonne qui vérifie certaines conditions et qui renvoie une valeur si la condition recherchée est remplie :

orange = 1

vert = 2

rouge = 3

En fonction de ce chiffre j'aimerais colorer de la couleur correspondante l'intérieur des cellules de la colonne "confirmation".

Je vous joins un fichier test :

5faussesmfc.xlsm (10.19 Ko)

Je reste disponible pour toutes questions.

Merci d'avance pour votre aide !

Horusbk

Bonsoir Horusbk,

Ci-joint ton fichier en retour modifié pour ton besoin. Je me suis basé sur la colonne I et D tel que présenté dans l'exemple.

Si autres colonnes me faire un retour.

Bons tests, bonne continuation.

5faussesmfc.xlsm (15.74 Ko)

Bonjour X Cellus

Merci pour ce premier retour.

C'est bien la mécanique que je recherche. Toutefois, j'ai un bug lorsque toutes les informations de la colonne "TEST" sont enlevés : les mises en formes restent et j'ai une erreur incompatibilité de type (erreur d'exécution 13) qui pointe sur cette ligne :

Chx = Target.Value + 1: Target.Offset(, -5).Interior.ColorIndex = Choose(Chx, 0, 44, 35, 22)

Voici le fichier après l'erreur :

Bonjour Horusbk,

En effet je me suis rendu compte après avoir posté le fichier que des cellules vides posaient souci.

En fait j'avais mis 0 car je pensais que soit tu allais de 1 à 3. Soit tu laissais un 0 pour ne pas valider un choix.

Des cellules de cette colonne pourront être nulles ou pas?

De toute façon je renvoie un fichier fixant la correction.

A suivre...

Suite,

En retour ton fichier modifié.

Bons tests, bonne continuation.

5faussesmfcbis.xlsm (17.37 Ko)

Re X Cellus,

Merci pour cette correction ! Effectivement des cellules de cette colonnes peuvent être nulles. En effet, chaque jour on archive les données de la veille et on réinitialise le fichier. Du coup, je remarque un autre bug, cette fois-ci sur la colonne "confirmation" lorsqu'on efface toutes les données.

Erreur d'exécution '1004' : "Erreur définie par l'application ou par l'objet", qui pointe sur cette ligne :

If Target.Count > 1 Then Target.Offset(, -5).Interior.ColorIndex = 2: Exit Sub

Je te joins le fichier:

Encore merci

Horusbk

Bonjour Horusbk,

La macro ne portait que sur le changement en colonne I. Soit par chiffre, soit par effacement d'une cellule ou d'un groupe de cellules.

Donc je vais la modifier pour tenir compte de la colonne D.

A suivre...

A nouveau,

Renvoi de ton fichier avec les modifications pour ton besoin.

Bons tests, bonne continuation.

Merci beaucoup X Cellus

J'ai mis en place ma formule qui de vérifier les conditions et d'indiquer le chiffre correspondant à ma mise en forme conditionnelle.

Toutefois, je ne comprend pas pourquoi la couleur n'est pas mise dans la cellule concernée ?

Peut-être que la méthode d'ajout de la MFC en Worksheet_change n'est pas compatible avec une formule ?

Voici le fichier complété :

Horusbk

A nouveau,

Si le chiffre n'est pas inscrit par un utilisateur mais découle d'une formule. L'évènement WS_change ne sera pas fonctionnel car il n'intervient pas dans ce cas.

Il est possible de contourner cela. Je posterais un exemple, sans doute ce soir. Pour l'instant je télécharges ton dernier fichier.

À suivre..

Suite,

En retour ton fichier modifié. En fait c'est moins la colonne I qu'il faut surveiller mais les colonnes B et D puisque la colonne I n'est que la résultante de ces deux colonnes. D'après les formules que tu as placées en colonne K puis I.

Voir Notes en rouge. C'est le changement en B et/ou D qui donnera par ricochet la MFC.

Bons tests, bonne continuation.

7faussesmfcter.xlsm (18.40 Ko)

Bonjour X Celllus,

Merci pour ces changements.

Lorsque j'efface le contenues de toutes les colonnes du tableau (hors formules) les mises en formes conditionnelles restent en place dans la colonne D. Or, dans une précédente version tu avais réussi à les enlever.

C'est toujours possible avec ces changements ?

Horusbk

Bonjour Horusbk,

Oui, c'est possible puisque je l'ai testé et que cela a bien fonctionné sur ton récent fichier.

Par contre lorsque j'ai fait la copie de ce fichier et renommé le fichier en ter. J'ai bien changé un extrait de l'avant dernière ligne de code. Celle qui inclut Target.Offset(,-6).Interior.ColorIndex = ...etc...

Mais j'ai omis de changer sur la 3ième et la 4 ième ligne de code. Tu as (,-5) pour ces deux lignes. Or il faut (,-6). En effet précédemment on se référait à la valeur en colonne I pour changer la couleur 5 colonnes avant. Or maintenant la référence se fait sur la valeur en colonne J. Donc une colonne plus à droite et en gardant (,5) c'est la couleur en colonne E qui est modifiée.

Et vu qu'elle ne subit pas de coloration pseudo MFC tu ne vois rien. Une fois que tu auras modifié 5 par 6. Cela rentrera dans l'ordre. Et tu pourras le voir en colonne D.

Désolé pour le contre-temps.

Bons tests, bonne continuation.

Bonjour X Cellus,

Merci pour cette modification, effectivement on arrive au fonctionnement que je souhaitais !

Une dernière chose concernant les couleurs (orange / vert / rouge), je suppose qu'elles sont gérées par ce code (ci-dessous). Toutefois, comment cela fonctionne pour choisir la bonne couleur en fonction du cas ?

.Interior.ColorIndex = Choose(Chx, 2, 44, 35, 22)

J’aimerais également avoir le texte en gras ainsi que le texte d'une certaine couleur en fonction des cas.

Et-ce possible de décomposer le code pour gérer séparément (fond / texte / gras) les trois cas et modifier facilement les couleurs dans le code ?

Par exemple :

Fond rouge / Texte Gras / Texte rouge foncé (pour le faire resortir) et idem pour le vert et le orange.

Horusbk

Bonjour Horusbk,

Ravi que cela soit rétablit.

Le Chx aura pour valeurs de 1 à 4. Selon que la formule Test MFC ressortira respectivement des valeurs de 0 (vide) à 3.

Donc, selon la colométrie ColorIndex le Chx pointera respectivement sur 2 (blanc), 44 (orange), 35 (vert), 22 (rouge).

Pour le fond cela est fait. Pour la couleur du texte et sa fonte tu peux te servir de la variable Chx mais ce n'est plus la propriété Interior utilisée dans le code mais il faut ajouter une ligne de code avec la propriété Font. Selon le même schéma. Essaie de le faire.

Et si besoin reviens sur le forum.

Bonne continuation.

Bonjour X Cellus,

J'ai modifié ainsi ton code :

Private Sub Worksheet_Change(ByVal Target As Range)
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.Count > 1 Then Target.Offset(, -6).Interior.ColorIndex = 2: Exit Sub
If Target.Value = "" Then Target.Offset(, -6).Interior.ColorIndex = 2: 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.ColorIndex = Choose(Chx, 2, 44, 35, 22)
Chx = Target.Value + 1: Target.Offset(, -6).Font.ColorIndex = Choose(Chx, 2, 22, 44, 35)
Chx = Target.Value + 1: Target.Offset(, -6).Font.Bold = Chx
End If
End Sub

Par contre, en modifiant ainsi ce code, j'ai de nouveau le fond de cellule qui reste colorié lorsque j'efface les données :/

EDIT: J'ai essayé de reproduire ce schéma pour le Font et le Bold mais ça ne fonctionne pas.

If Target.Count > 1 Then Target.Offset(, -6).Interior.ColorIndex = 2: Exit Sub
If Target.Value = "" Then Target.Offset(, -6).Interior.ColorIndex = 2: Exit Sub

'

    If Target.Count > 1 Then Target.Offset(, -6).Interior.ColorIndex = 2: Exit Sub
    If Target.Value = "" Then Target.Offset(, -6).Interior.ColorIndex = 2: Exit Sub
    If Target.Count > 1 Then Target.Offset(, -6).Font.ColorIndex = 2: Exit Sub
    If Target.Value = "" Then Target.Offset(, -6).Font.ColorIndex = 2: Exit Sub
    If Target.Count > 1 Then Target.Offset(, -6).Font.Bold = 2: Exit Sub
    If Target.Value = "" Then Target.Offset(, -6).Font.Bold = 2: Exit Sub

Est-il possible de choisir des couleurs en RGB pour Choose(Chx, 2, 44, 35, 22) et Choose(Chx, 2, 22, 44, 35) plutôt que le code "colorindex" ?

Par exemple, je souhaiterais un rouge plus clair en fond correspondant à : rgb(255, 148, 120)

Horusbk

A nouveau,

Utilisez le RGB directement dans le code actuel ne passera pas. Il faut modifier le code.

Par contre je vais tester pour la couleur police et la fonte.

Et te donnerais une réponse bientôt.

A suivre...

Merci encore X Cellus, j'attends ton retour

Bon weekend !

Horusbk

Bonsoir Horusbk,

Ci-dessous en retour le fichier pour s'adapter à des choix de style personnels.

Voir notes. J'ai préféré créer un mini tableau de style pour éviter la modification du code.

Et donc d'éventuelles erreurs qui perturberait le programme. Prévois une sauvegarde du fichier.

Bons tests, bonne continuation.

Bonjour X Cellus,

Merci de ce retour, j'aurais deux remarques :

1) Est-il possible de mettre le mini tableau dans une autre feuille que la feuille principale ?

2) J'ai toujours le problème des couleurs de fonds qui restent après effacement du contenu du tableau (colonnes sans formules).

200315013345434602

Merci pour ton aide.

Horusbk

Rechercher des sujets similaires à "mfc adaptees fichier partage"