Macro pour colorer une forme libre

Résolu/Fermé
Limon - 1 avril 2014 à 12:45
 Limon - 7 juil. 2014 à 09:30
Bonjour,
Je suis débutant en VBA. Je désire à l'aide d'une mise en forme conditionnelle colorer une forme libre.
Le message d'erreur suivant apparait "Erreur de compilation End Sub attendu
Ci dessous ma macro. sur Excel 2010 MAC
Merci pour votre aide
Sub Test1()

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Range("B1").Value = 20000 Then
ActiveSheet.Shapes("Forme libre 2").Fill.ForeColor.SchemeColor = 11

End If
End Sub

A voir également:

56 réponses

Mike-31 Messages postés 18341 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 14 octobre 2024 5 101
Modifié par Mike-31 le 1/04/2014 à 12:52
Bonjour,

Tu as lancé deux procédures,
ou tu supprimes Sub Test1() si la procédure doit se lancer automatiquement lorsque tu te déplaces de cellule en cellule et que le code est dans les propriétés de ta feuille

ou tu supprimes

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
si la procédure est dans un module avec déclenchement par bouton par exemple.
dans tous les cas il faut supprimer une de ces deux lignes

essaye comme cela

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("B1").Value = 20000 Then ActiveSheet.Shapes("Forme libre 2").Fill.ForeColor.SchemeColor = 11
End Sub

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
Merci bcp.
ça marche. Mais j'aurai certainement encore besoin de tes conseils
Merci encore
0
Mike-31 Messages postés 18341 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 14 octobre 2024 5 101
Modifié par Mike-31 le 1/04/2014 à 13:09
Re,

pour éviter que la procédure se lance chaque fois que tu te déplaces sur la feuille il est possible de limiter ce lancement au changement d'une cellule ou d'une plage, mais là il faudra nous en dire plus sur la structure du fichier ou comment change la valeur de la cellule B1 ou quelles sont les cellules qui conditionnent ce changement
A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
Autre petite question qui vous paraitra certainement très simple.
Comment peut on changer le nom d'une forme libre. Je dispose en effet d'une carte de l'Europe ou chaque pays est nommer par une forme libre.
Exemple la France: Freeform 230.
Je souhaiterais remplacer cette denomination par les trois premières lettres du pays (France : FRA)
Comment puis je faire?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Autre question.
Dans la macro précédente la couleur de la forme libre dépendait de la valeur d'une cellule. Comment puis je rédiger ma macro affin que la couleur dépende d'un intervalle de valeurs?
Ci dessous ma macro qui ne prend pas en compte ces intervalles.
If Range("B1").Value = 0 Then
ActiveSheet.Shapes("Forme libre 2").Fill.ForeColor.SchemeColor = 0
'noir'
End If
If Range("B1").Value > 0 Then
ActiveSheet.Shapes("Forme libre 2").Fill.ForeColor.SchemeColor = 2
End If
If Range("B1").Value < 5000 Then
ActiveSheet.Shapes("Forme libre 2").Fill.ForeColor.SchemeColor = 2
End If
If Range("B1").Value = 5000 Then
ActiveSheet.Shapes("Forme libre 2").Fill.ForeColor.SchemeColor = 2
End If
If Range("B1").Value = 10000 Then
ActiveSheet.Shapes("Forme libre 2").Fill.ForeColor.SchemeColor = 25
End If
If Range("B1").Value > 5000 Then
ActiveSheet.Shapes("Forme libre 2").Fill.ForeColor.SchemeColor = 25
End If
If Range("B1").Value < 10000 Then
ActiveSheet.Shapes("Forme libre 2").Fill.ForeColor.SchemeColor = 25
End If
End Sub

Merci une fois encore de votre aide.
0
Mike-31 Messages postés 18341 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 14 octobre 2024 5 101
Modifié par Mike-31 le 1/04/2014 à 18:55
Re,

Pour répondre rapidement à ta première question,

lorsque tu actives ta forme (clic sur la forme), dans la barre d'adresse qui se trouve juste au dessus de l'entête de colonne A et B tu remarqueras le nom de ta forme exemple Forme libre 2, il suffit de faire un simple clic gauche sur ce nom ce qui va l'activer et le mettre en surbrillance, saisir simplement le nom que l'on souhaite donner à la forme et valider avec Entrée

pour l'histoire des couleurs, il faut changer le code, je te prépare ça dans la soirée, je dois sortir et je suis en retard

quelle couleur veux tu faire correspondre à 0, 2 et 25

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
Mike-31 Messages postés 18341 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 14 octobre 2024 5 101
1 avril 2014 à 21:48
Bon pas de réponse, alors regarde ce code

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If [B1].Value = 0 Then ActiveSheet.Shapes("Forme libre 2").Fill.ForeColor.RGB = RGB(0, 0, 0)
If [B1].Value > 0 And [B1].Value <= 5000 Then ActiveSheet.Shapes("Forme libre 2").Fill.ForeColor.RGB = RGB(0, 255, 0)
If [B1].Value > 5000 And [B1].Value <= 10000 Then ActiveSheet.Shapes("Forme libre 2").Fill.ForeColor.RGB = RGB(255, 0, 0)
End Sub

0
Désolé, je suis en déplacement et ne peux consulter mes messages qu'a certains moments de la journée.
Encore un grand merci pour toutes ces informations:
- pour ce qui est du changement du nom de la forme libre. J'exécute l'ensemble de la procédure que tu décris, mais le nouveau nom inscrit (FRA)ne semble pas s'enregistrer et la dénomination initiale (freeforme 222 par exemple) se ré-inscrit.
- pour ce qui est de l'encadrement c'est parfait. Cela fonctionne très bien.
- pour ce qui est des couleurs, je teste et je reviens vers toi si problème.

Vraiment un très très grand merci.
Bonne journée
0
Je tiens à te remercier. toutes les propositions faites fonctionnent (A l'exception des formes libres que je n'arrive tjrs pas à renommer ce qui alourdit le texte de ma macro).
Merci encore
0
Mike-31 Messages postés 18341 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 14 octobre 2024 5 101
3 avril 2014 à 10:13
Re,

Un petit montage pour nommer les formes

https://www.cjoint.com/c/DDdknRoroNh
0
Désolé.
Je suis cette procédure mais aucun changement. Le nom initial revient dès que je tape enter.
0
Mike-31 Messages postés 18341 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 14 octobre 2024 5 101
Modifié par Mike-31 le 3/04/2014 à 10:40
Bizarre, mais Entrée, c'est avec la touche du clavier, il faut cliquer sur la touche Entrée du clavier.
Si ça ne marche pas, poste le fichier ou je t'écris un code pour les nommer

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
Bonjour,
Je tiens une nouvelle fois à te remercier.
je dispose maintenant d'une carte du monde et en fonction de la valeur d'une cellule de référence, les pays prennent une couleur en fonction de la zone du monde ou ils se situent (EX: europe, Amérique du nord, Afrique du nord moyen orient etc) et tout cela grâce à tes conseils.
Une question (encore une)
Est il possible de centrer au milieu de l'écran un pays identifié par son nom (ex FreeForm 222) et de zoomer (Passer de 100% à 200%) Tout cela avec une macro qd la cellule de référence prend une certaine valeur.
Merci
0
Mike-31 Messages postés 18341 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 14 octobre 2024 5 101
7 avril 2014 à 12:51
Re,

Oh oui, Excel doit pouvoir le faire, je regarde un code dans la soirée
0
super merci
0
Mike-31 Messages postés 18341 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 14 octobre 2024 5 101
Modifié par Mike-31 le 7/04/2014 à 13:32
Re,

vite fait, le principe est de sélectionner la forme, fixer l'agrandissement proportionnel et donner une valeur à l'agrandissement et inversement pour la réduire.
pour donner l'impression de zoom il faudrait fixer la position de la forme de départ et après agrandissement mais cela en vaut il la peine, le code complexe et surtout lourd risque planter.

Sub réduit()
ActiveSheet.Shapes.Range(Array("Forme libre 2")).Select
Selection.ShapeRange.LockAspectRatio = msoTrue
Selection.ShapeRange.Height = 100
End Sub

Sub Zoom()
ActiveSheet.Shapes.Range(Array("Forme libre 2")).Select
Selection.ShapeRange.LockAspectRatio = msoTrue
Selection.ShapeRange.Height = 300
End Sub


je peux essayer un code sur ton fichier s'il t'est possible de le mettre à notre disposition avec ce lien ou en message privé

https://www.cjoint.com/
A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0
Super
J'essaie cela immédiatement et je te fais parvenir mon fichier si la procédure bloque.
Merci encore
0
Super.
cela fonctionne
Un très grand merci
0
Bonjour,
Toujours plus difficile: Deux question.
1)Comment écrire la fonction combinée SI ET en langage VBA?
Ex Si la valeur de la cellule A1 est x et si la valeur de la cellule B1 est y alors ....

2)Existe il une formulation dans une macro, pour rendre faire apparaître en blanc les contours d'une forme libre qui apparaissent par défaut en noir?
Grâce à tes conseils j'arrive à attribuer une couleur à l'interieur d'une forme libre mais je n'arrive pas à attribuer à cette forme libre un contour d'une autre couleur de le noir.

Merci pour tous tes conseils.
0
Mike-31 Messages postés 18341 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 14 octobre 2024 5 101
Modifié par Mike-31 le 8/04/2014 à 08:08
Re,

réponse première question

if range("B1")="x" or range("B1")="y" then

plus technique

if [B1]="x" or [B1]="y" then

pour la deuxième question

ActiveSheet.Shapes.Range(Array("Forme libre 2")).Select
Selection.ShapeRange.Line.ForeColor.RGB = RGB(255, 0, 0)

tu peux aligner toutes ces lignes mais il faudra certainement condenser le code pour éviter les select à répétition qui vont ralentir les exécutions

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0