Hiérarchie des "If" dans code VBA

Christophe

XLDnaute Occasionnel
Bonsoir le Forum,

Suite à mon précédent post sur le code VBA qui ne s'arrête pas (boucle sans fin), j'ai passé mon AM à trouver une alternative avec les conseils des uns et des autres.
Je dois rendre mon travail demain matin et la nuit s'annonce longue ...

J'ai en fait 4 données dans 4 cellules différentes :
1 Cible
1 Mini1
1 Mini2
1 Alerte

Les hypothèses :

Cible = ''
si alerte = 0, cible = ''
si alerte = 1, cible = Mini2

Alerte = 0
Si Cible < Mini1, Cible = Mini1

Alerte = 1
Cible = Mini2

Je me suis arraché les cheveux à essayer de transcrire cela dans un code. En vain. Ca ne marche pas. Je pense que ma hiérarchie dans les 'If' n'est pas correcte.

Ci-joint un fichier.

Merci par avance de tout coup de mains.

Bonne soirée. [file name=Saga_des_If.zip size=7509]http://www.excel-downloads.com/components/com_simpleboard/uploaded/files/Saga_des_If.zip[/file]
 

Pièces jointes

  • Saga_des_If.zip
    7.3 KB · Affichages: 15

Dan

XLDnaute Barbatruc
Re:Hiérarchie des \"If\" dans code VBA

Bonsoir,

Un truc bizarre dans tes explications...

cible = '' puis 'si alerte = 0, cible = ''' avec une autre condition pour cible > mini1... :sick: ai-je bien compris ?

Peut être suis je à coté mais essaie tout de même ce code :

Code:
Private Sub WorkSheet_Change(ByVal Target As Range)
Select Case Range('Alerte')
Case Is = 0
If Range('Cible').Value < Range('Mini1').Value Then Range('Cible') = Range('Mini1').Value _
Else: Range('Cible').Value = 0
Case Is = 1
Range('Cible').Value = Range('Mini2').Value
End Select
End Sub

;)

Message édité par: Dan, à: 09/04/2006 23:17
 

ya_v_ka

XLDnaute Impliqué
Salut

J'ai essayer de remettre de l'ordre dans le code... pour ce que j'y ai compris

Ya'v

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

Pièces jointes

  • Saga.zip
    7.5 KB · Affichages: 17

Gorfael

XLDnaute Barbatruc
Re:Hiérarchie des \"If\" dans code VBA

Salut
Selon moi, t'es pas sorti de l'auberge :
tu mélange les deux formats de IF ce qui te rends ton code illisible. Utilise la forme avec retour à la ligne et End if systèmatiquement : de cette manière, tu verras tes imbrications plus facilement. Quand ça marche, tu peux épurer ton code et le rendre plus compact.
si Cible = '' alors
__ si alerte = 1 alors
__ __ Cible = Mini1
__ Sinon
__ __ Cible = '' 'Sert à quoi ?
__ Fin Si
__ Si Cible inf. mini2 alors
__ __ Si alerte = 1 alors
__ __ __ Cible = mini1
Mais on viens de le faire, ou alors cible est vide et si le test marche, on met Cible = Mini1

Ton code se mord la queue.
Tes hypothéses de départs sont bancales
Cible = ''
si alerte = 0, cible = ''
si alerte = 1, cible = Mini2

Alerte = 0
Si Cible < Mini1, Cible = Mini1

Alerte = 1
Cible = Mini2
C'est pas Cible le déterminant, C'est Alerte
Si Alerte=0 alors
__ Si Cible < Mini1 alors
__ __ Cible=Mini1
__ End If
Endif
Si Alerte=1 alors
__ Cible = Mini2
Endif
Une fois que ta macro tourne, et seulement dans ce cas, tu peux te préoccuper du déclenchemnt.
Mais si tu utilises Worksheet_Change, tu ne peux pas écrire sur la feuille sans déclencher ta macro, puisque la feuille change.Ou il faut que tu bloques tout traitement supplémentaire de cette macro, tant que tu n'as pas fini ton traitement en cours.
Pour ça, j'utilise une variable booléenne globale que je testes en première instruction
Si elle est vrai, je sors. Si elle est faux, je la mets à vrai, je fais mon traitement, et juste avant de sortir, je la remet à faux

A+

Message édité par: gorfael, à: 10/04/2006 00:20
 

Gibson94

Nous a quitté
Repose en paix
Bonsoir le fil,

Voici mon code

Code:
Private Sub WorkSheet_Change(ByVal Target As Range)

If Range('Cible').Value = '' Then
    If Range('Alerte').Value = 1 Then
        Range('Cible').Value = Range('Mini2').Value
    End If
    If Range('Alerte').Value = 0 Then
        Range('Cible').Value = ''
    End If
Else
    If Range('Cible').Value < Range('Mini1') Then
        If Range('Alerte').Value = 0 Then
            Range('Cible').Value = Range('Mini1').Value
        End If
    End If
    If Range('Alerte').Value = 1 Then
        Range('Cible').Value = Range('Mini2').Value
    End If
End If

End Sub

Ps: Salut Dan, pas encore couché ? ... lol...
 

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Bonjour

ma foi, voila le mien, une fois enlevé tout ce qui est inutile ou alors j'ai pas tout compris.

Cordialement, A+
Code:
Private Sub WorkSheet_Change(ByVal Target As Range)
    Select Case Range('Alerte').Value
    Case 0
        If Range('Cible').Value < Range('Mini1').Value Then Range('Cible').Value = Range('Mini1').Value
    Case 1
        Range('Cible').Value = Range('Mini2').Value
    Case Else
    End Select
End Sub
 

Christophe

XLDnaute Occasionnel
Le sommeil a finalement été plus fort que VBA (je ne pensais dormir qu'une heure ou 2) ...
Je vais donc devoir mettre les bouchées doubles !!!

Merci en tout cas à vous tous. Je file au bureau mettre tout cela en oeuvre (Pb Internet Explorer au bureau plante avec XLD !!!).

Bonne journée et bonne semaine.

Christophe
 

Gibson94

Nous a quitté
Repose en paix
Bonjour le fil,

J'ai vérifié pour la curiosité les procédures de chacun, car j'ai passé pas mal de temps à chercher la solution, et je trouvais que les 'select case' n'apportaient pas toutes les conditions.

Eh oui, Dan, Ya_v_ka, Yeahou... Chacun d'entre vous a au moins une condition qui ne fonctionne pas.

Regardez et dites-moi si je me trompe ...lol.
 

Dan

XLDnaute Barbatruc
Re,

Gibson94, d'abord bien le bonjour à toi. J'espère que tu vas bien surtout !

C'est possible car je ne suis pas sûr, comme je l'ai précisé d'ailleurs, d'avoir bien compris les conditions demandées par Christophe.

Comme le dit Gorfael, c'est pas clair.

Christophe tu peux réexpliquer ta demande si on est pas juste ?

:)
 

Gibson94

Nous a quitté
Repose en paix
Salut Dan, le fil,

Je pense qu'il manque juste une ligne de précision dans les hypothèses de Christophe

Les hypothèses :

Lorsque Cible = ''
si alerte = 0, cible = ''
si alerte = 1, cible = Mini2

La ligne manquante est: Cible est différent de ''

Lorsque Cible est différent de ''
et lorsque Alerte = 0
Si Cible est inférieur à Mini1, Cible = Mini1

et lorsque Alerte = 1
Cible = Mini2


Christophe, il faudrait que tu nous précises tout çà pour éviter les confusions.

Dan, question santé, j'ai jusqu'au 19 Avril sans traitement de choc, ce qui me permet de me détendre et de profiter un peu.
 

Christophe

XLDnaute Occasionnel
:Hiérarchie des "If" dans code VBA

Merci à tous de l'intérêt que vous portez à ce sujet et de votre aide précieuse.
Désolé de ne répondre que maintenant mais comme je l'ai dit, pour une raison que j'ignore, au bureau, Internet Explorer plante quand j'arrive sur XLD.

Gibson94 (à qui je souhaite un prompt rétablissement) a parfaitement reformuler les hypothèses dans le précédent Post.

A vous lire. Bonne soirée.

Christophe
 

ya_v_ka

XLDnaute Impliqué
Re::Hiérarchie des "If" dans code VBA

Salut tout le monde

Bin quant à moi c'est tout a fait possible que les conditions soient fausses, je ne les ai même pas examinées... j'ai jusze essayer de remettre les ifs dans leurs pots, avec une belle sortie en endive oups endif à chacun et hierarcheribiser le tout, cest tout

Y'av
 

Christophe

XLDnaute Occasionnel
Re::Hiérarchie des "If" dans code VBA

Bonjour le Forum,

J'ai finalement solutionné le pb en procédant en 2 temps avec l'affichage d'une boîte de dialogue où l'utilisateur déclenche le 2ème temps en cliquant sur 'ok'.
Ca marche et les utilisateurs semblent satisfaits de la solution.

Bonne journée.

Christophe
 

Gibson94

Nous a quitté
Repose en paix
Re::Hiérarchie des "If" dans code VBA

Bonjour Christophe, le forum,

Dans mon message (au dessus du 10/04/2006 00:06), je t'apportais la solution sans aucune erreur, c'est pour cette raison d'ailleurs que je signalais que les autres codes étaient faux partiellement. Il est dommage de poser des questions et de ne pas tenir compte des réponses que les passionnés d'Excel apportent. Vu ton dernier post, il est clair que tu n'as testé aucun des codes proposés. Désolé, Christophe, mais j'avais besoin de te le signaler.

Bonne journée...
 

Gibson94

Nous a quitté
Repose en paix
Re::Hiérarchie des "If" dans code VBA

Bonjour Christophe, le forum,

Dans mon message (au dessus du 10/04/2006 00:06), je t'apportais la solution sans aucune erreur, c'est pour cette raison d'ailleurs que je signalais que les autres codes étaient faux partiellement. Il est dommage de poser des questions et de ne pas tenir compte des réponses que les passionnés d'Excel apportent. Vu ton dernier post, il est clair que tu n'as testé aucun des codes proposés. Désolé, Christophe, mais j'avais besoin de te le signaler.

Bonne journée...
 

Discussions similaires

Réponses
22
Affichages
818

Statistiques des forums

Discussions
312 370
Messages
2 087 693
Membres
103 641
dernier inscrit
anouarkecita2