Convertir des formules de MFC en VBA

Bonjour à tous.

J'aimerai transformer mes formules basiques de MFC qui fonctionnent plutôt bien, en code VBA.

Pourquoi ? pour figer la MFC afin qu'elle ne parte pas en live à chaque insertion de ligne ou modif' multi-utilisateurs.

Avec mon humble niveau de débutant j'ai calqué quelques bouts de code.

Mais j'aurais besoin d'aide pour que ça fonctionne ...

(notamment le fait d'enlever le format de cellule quand on supprime le contenu de celle-ci).

Par avance, merci.

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo fin

 If Target.Column = 9 Then
   Cells(Target.Row, 1).Resize(, 9).Interior.ColorIndex = 43
   Cells(Target.Row, 18).Resize(, 4).Interior.ColorIndex = 43
  Else
   Cells(Target.Row, 1).Resize(, 9).Interior.ColorIndex = -43
   Cells(Target.Row, 18).Resize(, 4).Interior.ColorIndex = -43
 End If

 If Target.Column = 15 Then
   Cells(Target.Row, 11).Resize(, 5).Interior.ColorIndex = 10
  Else
   Cells(Target.Row, 11).Resize(, 5).Interior.ColorIndex = -10
 End If

For chiffre = 323 To 999
For lettre = 1 To 30

If Cells(chiffre, lettre).Value Like "*faire *" Then
            ActiveCell.Interior.Color = 0
            ActiveCell.Font.ColorIndex = 3
        End If

If Cells(chiffre, lettre).Value Like "*urgent *" Then
            ActiveCell.Interior.Color = 43
            ActiveCell.Font.ColorIndex = 3
        End If

fin:
End Sub

Question : est-ce que ça n'est pas un exemple typique de code VBA contre-productif ?

  • d'abord, les MFC tiennent mieux la route sur les insertions de lignes que tu le dis, pour peu que la définition des plages concernées soit correcte
  • ensuite parce qu'à chaque événement Change, tu fais faire à Excel plus de 2000 calculs, qui devraient pomper un tant soit peu sur les ressources de la bécane, sans parler des formules du classeur...
  • enfin par ce que les utilisateurs peuvent être éduqués, ou bien si c'est désespéré, les contenus peuvent être protégés (gestion avec des UserForms)

Espérant avoir aidé,

A+ Daniel

Merci pour ta réponse.

Alors, non, on éduque pas si facilement les autres utilisateurs.

Et quand bien même, pour moi c'est une carence d'Excel, pas un souci d'édition.

J'ai besoin de 6 formules (toutes simples) de mise en forme.

Là je viens de compter ... j'en ai 68.

Il manque à Excel l'option " ne pas ajouter automatiquement de règles de MFC "

Concrètement, je mets en évidence certaines plages de lignes en fonction du contenu à partir de la ligne 323

Exemple de plage effective : =$R$323:$U$999;$A$323:$J$999

Là j'en suis à la ligne 595. Et bien si par malheur j'ajoute une ligne entre la 591 et la 592

J'ai une nouvelle règle : =$R$362:$U$592;$A$362:$J$592

PS : Pourquoi 362, j'en ai aucune idée

Bref, je suis d'accord avec toi sur le principe, c'est ce que je voulais au départ.

Mais je suis dépité de devoir "nettoyer" 60 formules inutiles assez régulièrement.

Et si possible, j'aimerai ne pas être obligé d'avoir un fichier source gabarit avec les bonnes règles, dans lequel je ne recopierai que le contenu mis à jour du document partagé, pour ensuite sauvegarder / remplacer ce document ( = préserver les lignes ajoutées mais supprimer les règles + rapidement)

D'accord sur (presque) tout !

Curieux pour l'insertion de MFC !

Mais qu'est-ce qui ne marche pas dans ton code ?

Et une suggestion :

- si les mentions "à faire" et "urgent" sont le résultat d'un calcul, ou bien une liste de choix limités dans une colonne, pourquoi ne pas se contenter d'un format de nombre ? Bien sûr, c'est moins visible que du remplissage, mais ça marche avec les filtres, ça peut dépanner... et tu n'auras plus le problème des insertions intempestives de MFC...

A+ Daniel

Le code ne fonctionne pas correctement.

Le test dans la colonne 15 (lettre O) applique un remplissage sur 2 lignes : la bonne et celle 4 lignes au dessus !?

De plus, lorsqu'on va dans n'importe quelle case, et que l'on fait supprime, celle-ci devient noire.

Et le plus gênant, c'est que si le remplissage s'effectue, la suppression dans la colonne "O" (d'une date par exemple) ne remet pas toute la ligne en blanc.

Voilà le (dernier) code utilisé :

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo fin

 If Target.Column = 9 Then
   Cells(Target.Row, 1).Resize(, 10).Interior.Color = RGB(200, 255, 150)
   Cells(Target.Row, 18).Resize(, 4).Interior.Color = RGB(200, 255, 150)
  Else
   Cells(Target.Row, 1).Resize(, 10).Interior.Color = RGB(255, 255, 255)
   Cells(Target.Row, 18).Resize(, 4).Interior.Color = RGB(255, 255, 255)
 End If

 If Target.Column = 15 Then
   Cells(Target.Row, 11).Resize(, 5).Interior.ColorIndex = 43
  Else
   Cells(Target.Row, 11).Resize(, 5).Interior.ColorIndex = -43
 End If

fin:
End Sub

Mais après réflexion, je peux essayer de contourner le problème.

Je peux n'appliquer que 2 règles de MFC (et je nettoierai la cinquantaine de règles parasites chaque semaine ...)

Par contre, j'aurai aimé réussir à mettre en forme certaines cellules contenant un texte spécifique.

Mon bout de code ne fonctionne pas. Et surtout j'aimerai y ajouter une réversibilité (= police de base sans fond si la cellule est effacée)

Private Sub Worksheet_Change(ByVal Target As Range)
On Error GoTo fin

Dim chiffre As Long
Dim lettre As Long

For chiffre = 323 To 999
For lettre = 1 To 30

If Cells(chiffre, lettre).Value Like "*faire*" Then
            ActiveCell.Interior.Color = 0
            ActiveCell.Font.ColorIndex = 3
        End If

If Cells(chiffre, lettre).Value Like "*urgent*" Then
            ActiveCell.Interior.Color = 43
            ActiveCell.Font.ColorIndex = 3
        End If

Next lettre
Next chiffre

fin:
End Sub
 
Rechercher des sujets similaires à "convertir formules mfc vba"