Page 1 sur 3

Condition sur le IF

MessagePublié: 20 Nov 2010 à 13:05
par Mick
Bonjour

J'ai besoin de vos lumières car les miennes sont faiblardes ...

Voilà où ça coince :

Dim PlateTraite() As String
Dim JourTraite () As String
Dim TourneTraite () As String
Dim tournee As String
Dim jour As String
IF Not platetraite(i_p) = Trim(doccli.CliTriCo7(0)) And jourtraite(i_p) = jour And tournetraite(i_p)= tournee Then
traitement
ELSE
traitement


Aucune erreur lors du déroulement de programme.
J'arrive dans un cas de IF NOT mais le programme passe directement au ELSE.
J'ai fait un debug et j'ai comparé les variables.
Elles sont toutes de type STRING.

Une idée pour moi ... :?:


Merci à vous,
:wink:

MessagePublié: 21 Nov 2010 à 13:45
par Michael DELIQUE
salut

si ta condition passe toujours au else, c'est qu'elle n'est jamais vraie.
il n'y aucun "bug" sur le if.

pour voir ce qui ne va pas :

- utiliser le débuggeur
- essais ça (tu devrais voir ou ça coince)
Code : Tout sélectionner
IF Not platetraite(i_p) = Trim(doccli.CliTriCo7(0)) then
msgbox "1"
if jourtraite(i_p) = jour then
msgbox "3"
if tournetraite(i_p)= tournee then
msgbox "5"
else
msgbox "6"
end if
else
msgbox "4"
end if
else
msgbox "2"
end if

MessagePublié: 21 Nov 2010 à 20:58
par Mick
Merci pour la réponse

le problème se trouve donc ici :
IF Not platetraite(i_p) = Trim(doccli.CliTriCo7(0))


J'ai essayé d'un côte ou l'autre, des deux côtes : du TRIM, du STR, du UCASE$ ...

Je ne vois pas ce que je peux faire ... ?*


Merci,

MessagePublié: 21 Nov 2010 à 22:49
par Michael DELIQUE
re

montre moi tout ton code, là comme ça je peut rien dire

MessagePublié: 22 Nov 2010 à 00:45
par roubech
tu peux essayer d'afficher les 2 valeurs que tu compares pour vérifier :
[syntax="LotusScript"]Dim tmp1 as String, tmp2 as String
tmp1 = platetraite(i_p)
print "tmp1= '" & tmp1 & "'"
tmp2 = doccli.CliTriCo7(0)
print "tmp2= '" & tmp2 & "'"
if tmp1 = tmp2 then
print "tmp1 = tmp2"
elseif ucase(trim(tmp1)) = ucase(trim(tmp2)) then
print "tmp1 like tmp2)
else
print "tmps1 not like tmp2"
end if[/syntax]

MessagePublié: 22 Nov 2010 à 12:09
par LSong
il faudrait voir les valeurs

MessagePublié: 22 Nov 2010 à 14:32
par Mick
Voilà le message que j'obtiens ...
Not =079=079 lue
C'est pourtant bien égal ... :cry:

Ci-dessous le code complet :

[syntax="lotusscript"]Sub Initialize
Dim s As New NotesSession
Dim dbCur As NotesDatabase
Dim vpal As NotesView
Dim vCliPlat As NotesView
Dim arg(0 To 2) As String
Dim doc As NotesDocument
Dim doccli As NotesDocument

Dim fileRead As Integer
Dim fileWrite As Integer
Dim Chemin As String
Dim PlateTraite() As String
Dim JourTraite () As String
Dim TourneTraite () As String
Dim t_pltfDejaMax As Integer
Dim tournee As String
Dim jour As String
Dim Filw As String
Dim OkModif As Integer, OkNouveau As Integer
Dim FileTaille As Long, FilePos As Long

Set dbCur = s.currentDatabase
Set vpal = dbcur.getView("Vpaljouract")
Set vCliPlat = dbcur.getView("Vcliplat")
t_pltfDejaMax = -1
i_p = 0

RepStr = "C:\"

Print "Intégration fichier acteos"

fileRead = Freefile()
chemin = repStr+"logivif.txt"
Open chemin For Input As fileRead

fileWrite = Freefile()
filw = "C:\logMPO.txt"
Open filw For Output As fileWrite

Do Until Eof(fileRead)

Line Input #fileRead, ligStr
codeE = Mid(ligStr,1,1)

If codeE = "E" Then
codeexpe = Mid(ligStr,2,12)
'blanc = Mid(ligStr,14,1)
tournee = Mid(ligStr,14,5)
NumCom = Mid(ligStr,19,17)
TiersFact = Mid(ligStr,36,12)
jour = Mid(ligStr,48,8)
HeureDep = Mid(ligStr,56,4)
DateLiv = Mid(ligStr,60,8)
Transp = Mid(ligStr,68,12)
CodeSite = Mid(ligStr,80,8)
client = Mid(ligStr,88,17)
LibCli = Mid(ligStr,105,30)
ClientFac = Mid(ligStr,135,17)
CatCli = Mid(ligStr,152,2)
Enseigne = Mid(ligStr,154,10)
PaysDest = Mid(ligStr,164,3)
DepDest = Mid(ligStr,167,3)
CPDest = Mid(ligStr,170,6)
LibCommune = Mid(ligStr,176,30)
TypeMouv = Mid(ligStr,206,2)
Incoterm = Mid(ligStr,208,3)
Blanc2 = Mid(ligStr,211,1)
NatProd = Mid(ligStr,211,4)
Poids = Mid(ligStr,216,10)
Qt4 = Mid(ligStr,226,10)
NbPalette = Mid(ligStr,236,10)
Fin = Right(ligStr,129)

Set doccli = vCliPlat.GetDocumentByKey(Trim(client),True)
If Not doccli Is Nothing Then
If t_pltfDejaMax = -1 Then
arg(0) = Trim(tournee)
arg(1) = Trim(jour)
arg(2) = Trim(doccli.CliTriCo7(0))
Else
For i_p = 0 To t_pltfDejaMax
If Not (platetraite(i_p)) = doccli.CliTriCo7(0) Then
Msgbox "1"
If jourtraite(i_p) = jour Then
Msgbox "3"
If tournetraite(i_p)= tournee Then
Msgbox "5"
Else
Msgbox "6"
End If
Else
Msgbox "4"
End If
Else
Msgbox "not =" & platetraite(i_p) & "=" & doccli.CliTriCo7(0)&" lue"
End If
'If Not platetraite(i_p) = Trim(doccli.CliTriCo7(0)) And jourtraite(i_p) = jour And tournetraite(i_p)= tournee Then
' arg(0) = Trim(tournee)
' arg(1) = Trim(jour)
' arg(2) = Trim(doccli.CliTriCo7(0))
'Else
Erase arg
' End If
' End If
Next
End If
Else
arg(0) = Trim(tournee)
arg(1) = Trim(jour)
arg(2) = Trim(client)
End If

Set doc = vpal.GetDocumentByKey(arg, True)
If Not doc Is Nothing Then
nbpal = codeE & codeexpe & blanc & tournee & numcom & tiersfact & jour & heuredep & dateliv & _
transp & codesite & client & libcli & clientfac & catcli & enseigne & paysdest & depdest & _
cpdest & libcommune & typemouv & incoterm & blanc2 & natprod & poids & qt4 & _
Right("0000000000" & doc.palnombre(0), 10) & fin
'po = Left(ligStr,236) & "452" & Right(ligStr,Len(ligStr)-236)
Print #filewrite,nbpal

t_pltfDejaMax = t_pltfDejaMax + 1
Redim Preserve platetraite(t_pltfDejaMax)
Redim Preserve jourtraite(t_pltfDejaMax)
Redim Preserve tournetraite(t_pltfDejaMax)
platetraite(t_pltfDejaMax) = Trim(doccli.CliTriCo7(0))
jourtraite(t_pltfDejaMax) = Trim(jour)
tournetraite(t_pltfDejaMax)= Trim(tournee)

Else
Print #filewrite,ligstr
End If
Else
Print #filewrite, ligStr
End If
Loop
Close fileread
Close filewrite

Print "Importation acteos terminée."

Exit Sub
GestErreur :
Print "Error" & Str(Err) & ": " & Error$
Exit Sub
End Sub[/syntax]


Une piste ?

Encore merci

MessagePublié: 22 Nov 2010 à 14:34
par Michael DELIQUE
plus tot qu'un "not"

essais un

if platetraite(i_p) <> doccli.CliTriCo7(0) then

et tu peut blinder par un

if trim(cstr(platetraite(i_p))) <> trim(cstr(doccli.CliTriCo7(0))) then

MessagePublié: 22 Nov 2010 à 14:53
par Mick
Merci pour le tuyau ... mais malheureusement ça ne change rien à mon pb.

Pourtant les deux valeurs sont bien identiques et de même type ...


Comment puis je m'en sortir ?

MessagePublié: 22 Nov 2010 à 15:00
par Michael DELIQUE
ya un pb quelque part sur ton code

soit d'algo soit de variable.

le "IF" en lui même ne bug pas.

MessagePublié: 22 Nov 2010 à 15:03
par Mick
Le IF ne bug pas

Mais pourquoi quand j'affiche les valeurs, le IF trouve une différence entre 079 et 079 ?

C'est quand bien égal ça.

Vous vous en sortiriez comment de cette impasse ?

MessagePublié: 22 Nov 2010 à 15:12
par Michael DELIQUE
déjà prendre un peu de recule sur le pb.

ensuite via le débugger (en pas à pas), analyse ligne par ligne du code et du contenu des variables.

ya pas de raison que ça marche pas. donc c'est qu'il ya un truc qui coince quelque part.

tu as mis un "option declare" ?

MessagePublié: 22 Nov 2010 à 15:24
par Mick
non je vais essayer de le rajouter et de prendre du "recul" ...

Mais il faudrait que je livre ce prog mercredi matin ...


Merci,

MessagePublié: 22 Nov 2010 à 15:27
par Michael DELIQUE
Toujours déclarer ses variables : TOUJOURS

MessagePublié: 22 Nov 2010 à 15:31
par Wildcat
Les deux 079 sont bien de même type ?

J'ai déjà eu des égalités apparemment vraies qui retournaient faux. notamment des ''='' en SQL Oracle mais ça ne semble pas être ton cas.

La première chose que je fais quand j'ai un comportement bizarre sur une appli : je supprime le cache du client local. Essaie, on sait jamais.