Macro pour colorer une forme libre
Résolu/Fermé
A voir également:
- Macro pour colorer une forme libre
- Mise en forme conditionnelle excel - Guide
- Libre office gratuit - Guide
- LibreOffice : l'alternative libre et gratuite à Microsoft Office - Télécharger - Suite bureautique
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Macro word - Guide
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
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.
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.
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
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.
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.
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?
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?
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.
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.
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
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.
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.
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
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
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
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
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
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
Merci encore
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
3 avril 2014 à 10:13
Re,
Un petit montage pour nommer les formes
https://www.cjoint.com/c/DDdknRoroNh
Un petit montage pour nommer les formes
https://www.cjoint.com/c/DDdknRoroNh
Désolé.
Je suis cette procédure mais aucun changement. Le nom initial revient dès que je tape enter.
Je suis cette procédure mais aucun changement. Le nom initial revient dès que je tape enter.
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
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.
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.
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
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
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
7 avril 2014 à 12:51
Re,
Oh oui, Excel doit pouvoir le faire, je regarde un code dans la soirée
Oh oui, Excel doit pouvoir le faire, je regarde un code dans la soirée
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
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.
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.
Super
J'essaie cela immédiatement et je te fais parvenir mon fichier si la procédure bloque.
Merci encore
J'essaie cela immédiatement et je te fais parvenir mon fichier si la procédure bloque.
Merci encore
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.
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.
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
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.
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.