Excel 2010 : Macro auto pour mise en forme

Fermé
Hervé - 1 sept. 2011 à 00:37
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 - 2 sept. 2011 à 10:38
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é
A voir également:

1 réponse

ccm81 Messages postés 10905 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 27 décembre 2024 2 429
1 sept. 2011 à 09:48
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
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
chossette9 Messages postés 4239 Date d'inscription lundi 20 avril 2009 Statut Contributeur Dernière intervention 12 septembre 2014 1 308
2 sept. 2011 à 10:38
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