Excel 2010 : Macro auto pour mise en forme

Hervé -  
chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   -
Bonjour à tous,

Je débute en macro (j'enregistre de petites macro, mais je n'arrive pas à les écrire...). Voici ce que j'aimerais faire dans 1 de mes fichiers :

J'ai un gros fichier excel dans lequel j'aimerais remplacer de nombreuses mises en forme conditionnelles par une macro afin de réduire la taille du fichier et d'en améliorer les performances. Par ailleurs, j'utilise ce fichier sous excel 2010, mais je le partage, et il est donc succeptible d'être utilisé sous excel 2003 qui n'autorise que 3 mise en forme conditionnelles, ce qui n'est pas assez pour ce que j'en fait.

J'aimerais donc créer une macro qui fait ceci :
- elle se lance automatiquement dès l'ouverture du classeur (dans l'onglet appelé "planning")
- lorsqu'une cellule de la plage A1:AA200 reçoit la valeur texte "libre", la macro séléctionne cette cellule ainsi que les 3 cellules à sa droite
- elle colorie ces 4 cellules en jaune
- finalement, si la cellule qui contenait "libre" devient vide, je souhaite que les 4 cellules reviennent avec un fond transparent (comme avant l'application de la mise en forme)

Cela parait simple, mais j'ai vraiment du mal.

Si quelqu'un peut m'aider, ça serait vraiment super !
J'espère avoir été assez clair (avez vous besoin du fichier ?)

Merci d'avance,

Hervé

1 réponse

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    bonjour

    Dans le module de la feuille "planing" le code suivant semble correspondre à ton problème

    Option Explicit
    
    Const PlageATester = "A1:AA200"
    
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim li As Long, co As Long
    Dim PlageAColorer As Range
    If Not Intersect(Target, Range(PlageATester)) Is Nothing Then
      li = Target.Row
      co = Target.Column
      Set PlageAColorer = Range(Cells(li, co), Cells(li, co + 3))
      If Target = "libre" Then
        PlageAColorer.Interior.ColorIndex = 6
      Else
        PlageAColorer.Interior.ColorIndex = xlNone
      End If
    End If
    End Sub

    bonne suite
    0
    1. Hervé
       
      Bonjou ccm81,

      Merci bcp pour votre réponse si rapide !
      Votre macro marche vraiment super bien. Merci bcp.

      Néanmoins, je n'avait pas précisé dans mon premier post que je travaillait sur des cellules fusionnées :
      les séries de 4 cellules qui peuvent recevoir le texte libre (toujours dans la première) sont fusionnnées comme suit (sur 1 seule ligne de hauteur, mais avec une largeur variable) :
      1ière cellule = 5 cellules fusionnées
      2ème cellule = 4 cellules fusionnées
      3ème cellule = 4 cellules fusionnées
      4ème cellule = 4 cellules fusionnées

      Votre macro fonctionne très bien pour mettre la couleur, mais par contre, lorsque je supprime "libre", le système me renvoie un message d'erreur :
      "Erreur d'éxécution '13':
      Incomptabilité de type

      Avez vous une idée pour corriger cela ?
      Merci d'avance si vous pouvez encore m'aider,

      Cdt,

      Hervé

      PS : je ne vais pas être très dispo jusqu'à lundi soir, donc je risque de ne pas répondre rapidement si vous poster quelque chose ce we.
      0
    2. chossette9 Messages postés 6855 Date d'inscription   Statut Contributeur Dernière intervention   1 313
       
      Bonjour,

      si vous travaillez avec des cellules fusionnées, alors il est certain que vous allez souvent rencontrer des problèmes avec vos macros.

      Défussionnez vos cellules, et essayez plutôt de centrer vos donnez sur les cellules.
      Sous 2007 :

      - Onglet Accueil, sous-onglet Alignement, cliquez sur la petite flèche en bas à droite.
      - Dans la boîte de dialogue qui s'ouvre, onglet Alignement, choisir l'alignement horizontal "Centré sur plusieurs colonnes".

      Cordialement.
      0