Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
Vieux 01/07/2009, 18h44   #1
Membre du Club
 
Inscription : novembre 2008
Messages : 273
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 273
Points : 61
Points : 61
Par défaut Doc sur if then else imbriquée

Bonsoir a toutes et tous, forum bonsoir,


Voila je suis a la recherche SVP de quelques exemples de programmation en vba excel 2007 sur les if then else imbriquée

je n'ai rien trouver d'exploitable ou de compréhensible pour mon faible niveau

Merci a vous et de votre temps, bonne soirée bonnes vacances aux juilletistes

Raymond
eliot.raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 19h25   #2
Membre Expert
 
Avatar de laetitia
 
Inscription : décembre 2002
Messages : 1 281
Détails du profil
Informations personnelles :
Âge : 21

Informations forums :
Inscription : décembre 2002
Messages : 1 281
Points : 1 363
Points : 1 363
salut raymond le forum regarde dans les archives du forum pas mal d'exemples
if else then tu as aussi ElseIf plusieurs conditions. aussi regarde du côte de select case eventuellement IIf

autrement dit nous ce que tu veus faire!!! cela sera plus simple.
__________________
SALUTATIONS
laetitia est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2009, 19h48   #3
Membre du Club
 
Inscription : novembre 2008
Messages : 273
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 273
Points : 61
Points : 61
Bonsoir Laetitia, forum

Merci pour la réponse j'ai regarder la ou tu me conseilles pour un test ca va mais apres ca se complique.

je voulais rajouter des messages au code que tu m'a fait hier, j'ai chercher d'abord comment faire et j'ai modifier mais ca ne va pas comme je veux.

j'apprends aussi par la meme occasion

merci a toi tres bonne soirée

voici un bout de code qui marche pas du feu de zeus
les messages restent afficher ou s'efface trop vite

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
With Target
Dim Lig: Lig = .Row
 
If .Column = 5 And Cells(Lig, 1) = "" And Cells(Lig, 2) = "" And Cells(Lig, 3) = "" And _
    Cells(Lig, 4) = "" Then [F28] = "Autorisé" Else [F28] = "interdit": [F28] = ""
 
 
If Not Application.Intersect(Target, [H2:H27]) Is Nothing Then
If .Offset(0, -1) <> "" Then [H28] = "Interdit": Sleep 1000: .Offset(0, -1).Activate _
    Else [H28] = "Autorisé": [H28] = ""
End If
 
End With
Raymond

Dernière modification par eliot.raymond ; 01/07/2009 à 20h03.
eliot.raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 11h32   #4
Membre Expert
 
Avatar de Krovax
 
Inscription : juillet 2008
Messages : 1 889
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juillet 2008
Messages : 1 889
Points : 1 937
Points : 1 937
Bonjour,
Ton code me fait penser a ceux de laetitia qui sont toujours très dense. IDéale quand ton maitrise bien. Pas évident quand on débute. Essaye de l'ecrir sur plusieurs ligne, ca te permettra également d'utilisé le mode pas a pas plus facilement

Pour la première boucle
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Lig as long 'c'est bien de préciser le type ca évite de n'avoir que des variant
 
With Target
 
 Lig = .Row
 
If .Column = 5 And Cells(Lig, 1) = "" And Cells(Lig, 2) = "" And Cells(Lig, 3) = "" And  Cells(Lig, 4) = "" Then 
   [F28] = "Autorisé" 
Else 
   [F28] = "interdit"
 
[F28] = "" 'la tu efface directement ce que tu viend d'ecrir c'est toi qui voit
'mais a mon avis ton souci viens de la ;)
end if
Tu as l'équivalent dans la deuxième boucle
Krovax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 14h12   #5
Membre du Club
 
Inscription : novembre 2008
Messages : 273
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 273
Points : 61
Points : 61
Bonjour Krovax bonjour forum

Merci beaucoup pour les conseils, j'ai essayer en faisant comme ci dessous, ca marche
SAUF que "Interdit" ne s'efface pas lorsque je ne suis plus dans les conditions.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Lig As Long
With Target
Lig = .Row
If .Column = 5 And Cells(Lig, 1) = "" And Cells(Lig, 2) = "" And Cells(Lig, 3) = "" And _
                  Cells(Lig, 4) = "" Then
    [F28] = "Retrait autorisé"
Else
    [F28] = "Interdit"
End If
 
End With
End Sub

Bonne après midi a toi et merci

Raymond
eliot.raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 14h20   #6
Membre Expert
 
Avatar de Krovax
 
Inscription : juillet 2008
Messages : 1 889
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juillet 2008
Messages : 1 889
Points : 1 937
Points : 1 937
Oui il ne va pas s'effacer tu dit a ton programme d'écrire quelque chose dans une cellule tu ne lui dit pas de l'effacer par la suite.
Mais meme si a la fin de ta boucle tu met
[F28]=""
pour effacer.
Le code va se dérouler si rapidement que tu n'auras absolument pas le temps de le lire.
Je pense que tu devrais essayer de voir pour un évènement qui va effacer la cellule. (un bouton reset, le changement de sélection/clique sur une cellule, la modification de sélection,...)

Tu pourrais mettre une temporisation pour que cela s'affiche X secondes mais c'est pas évident a mettre en place si tu veux que l'utilisateur puisse quand même avoir accès au fichier (mais c'est faisable).
Krovax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 15h10   #7
Membre du Club
 
Inscription : novembre 2008
Messages : 273
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 273
Points : 61
Points : 61
Re Krovax

j'ai bien compris, donc a la place d'une tempo un peu lourde pour si peu tout compte fait le code >>>>> Sleep 1000 : [F28]="" fera dans ce cas très bien l'affaire

le peu que j'ai pu voir sur if then else elseif me dit que c'est possible de faire une action si les deux conditions sont fausses

Te transmet ce que j'ai lu.

Dans le cas ou plusieurs conditions doivent etre testées, plutot que de recourir a de nombreux if imbriquées, il est possible d'utiliser le mot cef ElseIf

Code :
1
2
3
4
5
6
7
8
9
10
11
12
If condition 1 Then
         ' Traitement si la condition est vraie
ElseIf condition 2 Then
         ' Traitement si la condition 1 est fausse
         ' mais que la condition 2 est vraie
''''''
ElseIf condition n Then
         ' Traitement si les n-1 conditions sont fausses
         ' mais que la condition n est vraie
Else
         ' Traitement si toutes les conditions sont fausses
End if
J'ai recopier correctement il ni a pas d'erreur, voila ce que je trouve pas très clair du moins pour moi un exemple serai bien plus parlant et je ne trouve pas

merci de ta patience te dit a plus tard, bonne après midi

Raymond
eliot.raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 17h09   #8
Membre Expert
 
Avatar de Krovax
 
Inscription : juillet 2008
Messages : 1 889
Détails du profil
Informations personnelles :
Âge : 26

Informations forums :
Inscription : juillet 2008
Messages : 1 889
Points : 1 937
Points : 1 937
En francais peut être
a,b,c sont trois test ou condition qui sont soit vrai soit faux

Code :
1
2
3
4
5
6
7
8
9
Si a alors
    affiche "a est vrai b et c je ne sais pas"
Sinon si b alors
    affiche "a est faux et b est vrai C je ne sais pas"
sinon si c alors
     ffiche "a est faux et b est faux C est vrai"
else 
Affiche "Tous sont faut"
fin si
Ce que fai le programme
Il test a si a et vrai il entre dans la boucle affiche "a est vrai b et c je ne sais pas"
et va directement au end if
Si a n'est pas vrai il va au premier sinon si (else if) et fait le test ici b si b est vrai il entre dans la boucle affiche "a est faux et b est vrai C je ne sais pas" et va au fin si sans faire d'autre test
Si b c'est révélé faut (et a également sinon b n'aurai pas été testé)
il test c si c est vrai il affiche "a est faux et b est faux C est vrai"
et quitte
Enfin si c est fau (c a été testé car b est fau et b a été testé car a est faux) il affiche "Tous sont faut" et quitte la boucle

Le programme en VBA si tu veux tester

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 
sub testSI()
dim a as boolean, b as bollean, c as boolean
a=false
b=true
c=true
 
if a then
    msgbox "a est vrai b et c je ne sais pas"
elseif b then
    msgbox "a est faux et b est vrai C je ne sais pas"
else if c then
     msgbox "a est faux et b est faux C est vrai"
else 
msgbox "Tous sont faut"
end if
end sub
Pour plus d'info regarde ce site (j'ai déjà du te le conseiller ) ce n'est pas du VBA mais du pseudo code l'objectif et d'apprendre a ce servir des boucle des test et des principe de programmation sans avoir a connaitre un code. C'est la théorie

Voila j'espère que cela t'aidera a comprendre
Krovax est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/07/2009, 18h25   #9
Membre du Club
 
Inscription : novembre 2008
Messages : 273
Détails du profil
Informations forums :
Inscription : novembre 2008
Messages : 273
Points : 61
Points : 61
Bonsoir a tous, bonsoir Forum,

Bonsoir krovax

Merci pour le code, les conseils et le site très interressant du moins pour moi

je vais faire les essais du code et te dirai de quoi il retourne sans doute demain apres midi. il me faut du temps.

en attendant merci encore, passe une excellente soirée.

Raymond
eliot.raymond est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +1. Il est actuellement 13h01.


 
 
 
 
Partenaires

Hébergement Web