Comment articuler "si" "then" "else"?

S

sophie

Guest
Bonjour à tous,

Je planche depuis hier sur un petit problème qui commence à me rendre maboule! SVP de l'aide!

Voilà, je développe un programme de gestion commerciale pour ma boite. J'ai un unique formulaire de saisie de facture qui remplit 2 fonctions:
1)Soit création d'une nouvelle facture (Dans TXTFACT un nouveau numéro de fact s'incrémente puis l'utilisateur saisie ses articles, ses qtés et ses tarifs dans divers TXT)
2)Soit rappel d'une facture déjà créée et modif des lignes désignation etc...

Je souhaiterais que quand on click sur le bouton VALID:
1) Il regarde sur 'feuil1' dans la colonne A:1 à A:6000 si le numéro inscrit dans TXTFACT est déjà présent et si oui, il se met sur la même ligne et envoi les nouvelles infos (TXT1...)sur cette ligne. (C'est pour le cas d'une facture existante que l'on a rappelée et modifiée).
2)S'il ne trouve pas le numéro dans la colonne A1:A6000, donc il s'agit d'une nouvelle facture et il va à la dernière ligne non vide et envoie les infos des TXT...

J'arrive à faire les 2 procédures séparées mais quand je veux les relier avec IF THEN ELSE, je n'ai pas le résultat escompté.
Ci-dessous mon code actuel qui me créée une nouvelle ligne même si le numéro de fact est déjà dans A1:A6000.

Merci pour votre aide.
Sophie

Private sub CMDVALIDER _Click()
For each c in range ('A1:A6000')
If c.value=txtfact then
range ('b'& c).value=TXT1
Exit for
else
num2=sheets('feuil1').range ('a65536').end(xlup).row+1
sheets('feuil1').range('a'& num2).value=TXTFACT
sheets('feuil1').range('b'& num2).value=TXT1
exit for
end if
next c
end sub
 
V

visiteur

Guest
bonjour sophie, le forum
ceci peut-il t'aider ?

Information sur le 'IfEndIf' ...

Option Explicit
Sub IfEndIf()
Dim Texte As String
Texte = 'Si J'avais su je ne serais pas venu'
If Left(Texte, 2) = 'Si' Then MsgBox 'Bingo'
If Len(Texte) = 35 Then
MsgBox 'Glop Glop'
Else
MsgBox 'Pas Glop'
End If
If Mid(Texte, 4, 1) = 'J' Then MsgBox 'Good' Else MsgBox 'Pas Good'
End Sub
Les trois méthodes sont possibles. En fait tout dépend du nombre d'actions que tu dois déclencher, le multilignes en indentation étant plus lisible pour beaucoup d'actions.

en te présentant tous mes voeux au seuil de cette nouvelle année, pour toi et les tiens
 
V

visiteur

Guest
un complément à ma réponse précédente

If condition logique Then 'Instructions exécutées si la condition est Vraie

Else 'nstructions exécutées si la condition est Fausse

End If
Exemple :

Sub TextCondition()
Dim varnum As Byte
varnum = InputBox('Entrez un nombre entier entre 0 et 255')
If varnum Mod 2 = 0 Then
MsgBox ('Ce nombre est pair')
Else
MsgBox ('Ce nombre est impair')
End If
End Sub
 
S

sophie

Guest
Bonjour et joyeux noël,

Merci pour ta réponse qui est fort explicite. Par contre, je comprend bien la logique maintenant du IF THEN ELSE mais visiblement je n'arrive pas à l'adapter à mon code. Est ce que je peux cumuler For each...avec des IF? c'est peut-être là mon probleme?

Sophie
 
B

bebere

Guest
bonjour Sophie,Visiteur

Joyeux Noël

je pense que cela ira mieux avec ce code

Private sub CMDVALIDER _Click()
dim c as range
with sheets('feuil1')
For each c in .range ('A1:A6000')
If c.value=txtfact then
'ajouter.row index ligne
.range ('b'& c.row).value=TXT1
Exit for
else
num2=.range ('a65536').end(xlup).row+1
.range('a'& num2).value=TXTFACT
.range('b'& num2).value=TXT1
exit for
end if
next c
end with
end sub

à bientôt ;)
 

_Thierry

XLDnaute Barbatruc
Repose en paix
Bonjour Sophie, Bébère, Visiteur, le Forum

Tiens IfAnfIf or IfEndIf.... ça me rapelle quelque chose pour ceux et celles qui étaient à Lyon....

Sinon vite fait car je suis sur un gros truc tout rouge en cadeau de Noël pour nos amis Sapeurs Pompiers, estimated time delivery +/- 1H30 (tests etc) je me fais une 'récréation' dans le Forum...

Bébère et Sophie, vous avez tous deux une grosse erreur de concept de programmation... :whistle:

Je propose ceci en restant dans la même conception d'origine et en restant sur une seule boucle :

Private Sub CMDVALIDER_Click()
Dim Plage As Range
Dim c As Range
Dim i As Long
Dim Num2 As Long


   
With Sheets('Feuil1')
       
Set Plage = .Range(.Range('A1'), .Range('A65536').End(xlUp))
           
For Each c In Plage
               
If c.Value = TXTFACT Then
                    .Range('b' & c.Row).Value = TXT1
                   
Exit For
               
Else
                    i = i + 1
               
End If
           
Next c
       
           
If i = Plage.Rows.Count Then
                  Num2 = .Range('a65536').End(xlUp).Row + 1
                .Range('a' & Num2).Value = TXTFACT
                .Range('b' & Num2).Value = TXT1
           
End If
   
End With
End Sub

Bonne Fêtes de Noël à vous tous
[ol]@+Thierry[/ol]
 

Discussions similaires

Réponses
21
Affichages
1 K
Réponses
2
Affichages
136
Réponses
3
Affichages
600

Membres actuellement en ligne

Aucun membre en ligne actuellement.

Statistiques des forums

Discussions
312 413
Messages
2 088 199
Membres
103 763
dernier inscrit
p.michaux