MFC sur Objet

  • Initiateur de la discussion Startus
  • Date de début
S

Startus

Guest
Bonjour à tous,

Je rentre bredouille de ma recherche sur XLD...

En fait je voudrais, savoir comment faire pour mettre une MFC sur un objet (Cadre,Rond...etc...)
A mon avis pas possible, mais je demande toujours.

En deuxième questions, toujours sur une MFC, dans un tableau (A2:F20) par exemple dans la formule est :
J'entre =MOD(LIGNE();2) comme 1er critère, qui me permet d'avoir une MFC une ligne sur 2 et en second critère:
Je Tape : =$F2=''

Je n'arrive pas à mettre dans le cadre les nombres négatifs en rouge
et la MFC ne marche pas comme je le voudrais dans mon tableau
Voir fichier Joint

Merci beaucoup de votre aide précieuse

Startus [file name=MFC_20050615200044.zip size=2806]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/MFC_20050615200044.zip[/file]
 

Pièces jointes

  • MFC_20050615200044.zip
    2.7 KB · Affichages: 17

Gael

XLDnaute Barbatruc
Bonjour startus,

Pour que la première MFC ne s'applique pas s'il y a des valeurs, tu peux modifier la formule en mettant:

=ET(MOD(LIGNE();2);$F7='')

Si F7 contient quelque chose==> pas de MFC

Pour le cadre, il n'est pas possible d'appliquer une MFC, tu peux utiliser une macro simple pour changer la couleur et l'exécuter si le solde est négatif.

J'ai fait un autoenregistrement qui donne:

Sub Macro1()
ActiveSheet.Shapes('AutoShape 2').Select
With Selection.Font
.ColorIndex = 3
End With

End Sub

En fait, il faudrait tester la valeur du dernier champ et mettre une couleur rouge ou noire selon le cas.

@+

Gael
 
S

Startus

Guest
Bonsoir Gael, le Forum

Tout d'abord je te remercie de t'être penché sur mon problème...

En ce qui concerne ta formule, je l'ai adapté et quelque peu modifié et ça marche nickel.
=ET($F1='';$A1<>'')
J'ai laissé tombé le formatage d'une ligne sur deux car cela surchargeait trop mon tableau.

Pour la macro, elle fonctionne également, mais il faudrait quelle s'éxécute automatiquement si la valeur est négatives
J'ai essayé ça:

If shapes.value<0 Then
.ColorIndex = 3
Else
.ColorIndex=1
End If

Ce code ne marche malheureusement pas
Aurait-tu une idée ? Ou quelqu'un d'audre...

Merci, Startus
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir Startus, Gael,

Tu peux peut-être essayer le code ci-dessous collé dans le module de code de la feuille :
Private Sub Worksheet_Change(ByVal Target As Range)
Dim MemCell
      If Not Application.Intersect(Target, Range('D:E')) Is Nothing Then
            Set MemCell = ActiveCell
            ActiveSheet.Shapes('AutoShape 2').Select
            Selection.Font.ColorIndex = IIf(Range('G7').Value < 0, 3, 0)
            MemCell.Select
      End If
End Sub
Cordialement,
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour DidierMDF, Startus, le Forum

J'ai eu pas mal de requêtes pour jouer avec les Shapes, et finalement on n'a pas besoin de les Sélectionner pour 'jouer' avec ! ;) Par conséquent, je vous fais profiter de mon expérience à ce niveau.

Voici comment je m'y prendrais dans ce cas de Figure :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Sh As Shape
&nbsp;
If Not Application.Intersect(Target, Range('D:E')) Is Nothing Then
&nbsp; &nbsp;
For Each Sh In Me.Shapes
&nbsp; &nbsp; &nbsp; &nbsp;
If Sh.AutoShapeType = 5 Then
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'If Right(Sh.Name, 1) = '2' Then&nbsp; '(Si il a plusieurs Rectangles à coins arrondis)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; Sh.TextFrame.Characters.Font.ColorIndex = IIf(Range('G7').Value < 0, 3, 0)
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp;
'End If
&nbsp; &nbsp; &nbsp; &nbsp;
End If
&nbsp; &nbsp;
Next
End If
End Sub


Pour Startus, tout comme la proposition de Didier, ce genre de code doit être impérativement placé dans le Private Module de ta Feuille où se trouve la Shape et les Calculs ... 5Click Droit sur l'Onglet de cette Feuille, puis 'Visualiser le Code')

Pour Didier, il me semble que MemCell devrait pouvoir être déclaré Range directement sans rester Variant.

Bonne Journée
@+Thierry

Message édité par: _Thierry, à: 16/06/2005 08:47
 
S

Startus

Guest
Bonjour à tous,

Thierry, merci pour ton code, j'ai essayé ce dernier mais sans succès

Il est vrai que je débute en VBA, et je pense que je dois mal m'y prendre...
Pourrait-tu le mettre dans le fichier que je joint avec STP Merci

Didier, ton code au début ne marchait pas, et subitement il a marché, je ne sais pourquoi...?
En essayant de l'adapter il ne fonctionne à nouveau plus???
Que veut dire D:E dans
If Not Application.Intersect(Target, Range('D:E')) Is Nothing Then

Il faut que 'shape' en question soit situé entre la colonne D et E ?

Merci, de votre aide, car là franchement je rame sur le sable...

PS: J'ai plusieurs comptes et donc un objet(Un Cadre) sur chaque compte est présent dans l'accueil de mon classeur
Une seule macro, ou une pour chaque feuille ?

Startus :unsure: [file name=MFC_20050616235428.zip size=11197]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/MFC_20050616235428.zip[/file]
 

Pièces jointes

  • MFC_20050616235428.zip
    10.9 KB · Affichages: 20

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonsoir Startus, Didier


Ton problème est simple (par rapport à ma proposition)......... Pas la peine d'essayer de placer des 'événementielles' bout à bout.......


Private Sub Worksheet_Change

ça ...... une seule fois

Donc tu peux simplement adapter ce que l'on t'as conseillé à l'intérieures de cette Private Sub.....

Bon allez zou dodo
@+Thierry
 

Startus

XLDnaute Occasionnel
Thiérry, Didier, le Forum Bonjour,

Apparement pas possible de mettre 2 macros événementielle dans une feuille : Je ne savais pas !! Merci

J'ai beau désactiver la macro et ajouter la Tienne Thiérry ou celle de Didier. Aucune de 2 ne veulent marcher ???

Je vous remercie de vos tuyau, qui vont certainement me mettre sur la piste, mais en ce moment rien n'y fait... Je rame, je rame

Si vous pouver me mettre ce code dans le module et faire en sorte que ce marche ce serai SUPER Cool

Je travaille sous XP avec Excel 2003

Merci,
Startus de Lyon
 

Startus

XLDnaute Occasionnel
Bonsoir,

Après Quelques Essais Ta Macro Didier Marche NickelJ'ai seulement modifié :
Private Sub Worksheet_Change(ByVal Target As Range)
Par :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)

En revanche, je voudrais mettre la forme automatique(AutoShape 2) dans une autre feuille('Accueil')
J'ai bien tenté de modifié la macro, mais on va dire que j'ai beaucoup de progrès à faire en VBA

Désolé Thiérry ton code ne marche pas chez moi ???

Un dernier petit coup de pouce
Merci
Startus
 

myDearFriend!

XLDnaute Barbatruc
Bonsoir Startus, Gael, _Thierry, le Forum.

Tout d'abord, MERCI _Thierry pour l'info sur la façon de modifier le Shape sans avoir à le sélectionner. Jusqu'à ce jour, j'ai toujours échoué dans mes tentatives et j'ai fini par penser (à tort !) que c'était impossible...Sincèrement, merci pour ce tuyau. Et en ce qui concerne la déclaration de MemCell, je suis bien évidemment d'accord à 10000% avec ta remarque aussi judicieuse que mon oubli est impardonnable (si, si... j'ai pour habitude d'être aussi pointilleux que toi pour ne pas dire ch...t sur ce sujet !)

Startus, tu trouveras ci-joint le dernier fichier que tu as posté le 16/06/2005 23:54, modifié pour tenter de répondre à ta demande (j'espère)...

Concernant tes questions :
Après Quelques Essais Ta Macro Didier Marche NickelJ'ai seulement modifié :
Private Sub Worksheet_Change(ByVal Target As Range)
Par :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Pour ma part, je maintiens l'utilisation de l'évènement Change() en lieu et place de SelectionChange(). L'évènement Change() se déclenche seulement lorsque des cellules sont modifiées tandis que l'évènement SelectionChange() intervient à chaque déplacement de la sélection dans la feuille...

Que veut dire D:E dans
If Not Application.Intersect(Target, Range('D:E')) Is Nothing Then
Il faut que 'shape' en question soit situé entre la colonne D et E ?
Non.
Cette ligne de code est située dans l'évènement Change() de la feuille, cela signifie que si une valeur est modifiée dans cette feuille et que cette valeur est située en colonne D ou en colonne E, alors il faut procéder au traitement qui suit (lignes de code entre Then et End If)

Didier, ton code au début ne marchait pas, et subitement il a marché, je ne sais pourquoi...?
En essayant de l'adapter il ne fonctionne à nouveau plus???
Une des explications possibles, c'est tout simplement que l'exemple que tu as joint initialement (15/06/2005 20:00) est différent de l'exemple que tu joins maintenant (16/06/2005 23:54)... En effet, dans le premier exemple les montants Débit-Crédit sont situés en colonne D et E alors que dans le deuxième fichier ils sont situés cette fois en colonne E et F !!!

Ensuite, si l'objet Shape représentant le solde n'est plus situé sur la feuille de compte mais sur une autre feuille ('Accueil') cette fois, la macro demande effectivement une adaptation...

Par ailleurs, j'ai cru comprendre que tu avais d'autres Comptes (et donc d'autres feuilles et objets Shapes) a gérer de la sorte. J'ai donc essayé d'adapter ton exemple avec cette fois 2 comptes. Pour plus de clarté, j'ai renommé les 2 Shapes 'Solde1' et 'Solde2' et je te conseille vivement de faire de même pour les autres comptes éventuels...

Dans le module de code de chaque feuille de Compte, le code ci-dessous est utilisé :
'Gère la couleur du solde (rouge pour négatif) dans la feuille 'Accueil'
Private Sub Worksheet_Change(ByVal Target As Range)
      If Not Application.Intersect(Target, Range('E:F')) Is Nothing Then
            Sheets('Accueil').Shapes('Solde1').TextFrame.Characters.Font.ColorIndex = IIf(Range('E1').Value < 0, 3, 0)
      End If
End Sub


'Pointe les opérations validés
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
      If Not Application.Intersect(Target, Range('G4:G21')) Is Nothing Then
            Target.Value = IIf(Target.Value = 'a', '', 'a')
      End If
End Sub
Il convient bien sûr d'utiliser 'Solde2' (et non 'Solde1') pour le Compte N°2.

Une seule macro, ou une pour chaque feuille ?
Dans l'exemple joint, par simplification et pour t'aider à comprendre, j'ai préféré laisser une macro par feuille... Cela dit, l'ensemble est facilement adaptable pour ne laisser qu'une seule macro gérant le tout (en utilisant l'évènement Workbook_SheetChange() de l'objet ThisWorkbook). Si tu le souhaites vraiment, je peux te faire cette adaptation mais il conviendra de préciser le nom exacte de chaque onglet (Accueil, Comptes et autres) que tu utiliseras dans ton projet... Cette précision est indispensable et cela implique qu'une modification ultérieure de la structure de ton classeur entrainera d'office un dysfonctionnement dans ce traitement. A toi de voir...

Cordialement, [file name=MFC2.zip size=13649]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/MFC2.zip[/file]
 

Pièces jointes

  • MFC2.zip
    2.5 KB · Affichages: 25
  • MFC2.zip
    2.5 KB · Affichages: 24
  • MFC2.zip
    2.5 KB · Affichages: 27
S

Startus

Guest
Bonjour Didier, Thierry, Gael le Forum,

Je ne sais que te dire Didier, sinon UN GRAND MERCI

Pour toi, VBA à l'air tellement simple, tandis que certain... 'Moi par exemple' ont beaucoup de mal, mais j'essaie de m'accrocher...

En fait avant de recevoir ton dernier post, cela faisait environ bien deux heures que je me battais pour trouver la solution...
Sans Succès évidemment...

Le classeur que tu as posté est superbe, avec tout ça je pense que je devrait pouvoir l'adapter sur mon vrai classeur sans trop de mal...

Merci pour toutes ces explications qui t'on pris de ton temps, et qui pour moi me font énormément progresser...
Du moins je l'espère...

Encore Merci,
Startus
 

Statistiques des forums

Discussions
312 745
Messages
2 091 594
Membres
105 006
dernier inscrit
bhabali