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

  • Initiateur de la discussion Initiateur de la discussion sophie
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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
 
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
 
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
 
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
 
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 😉
 
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]
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
4
Affichages
754
Réponses
10
Affichages
1 K
Réponses
3
Affichages
922
Réponses
4
Affichages
625
Retour