Probleme de comparaison
Bonjours à tous,
J'ai actuellement un programme qui compare 2 valeurs ( une tirer d'un document extérieur qui a été taper à la main et l'autre directement taper à la main) dans des cases afin d'associer une ligne d'un document à une autre ligne d'un autre document,le problème étant que ma comparaison m'indique toujours vrai... même en passant sur la bonne ligne.
j'ai donc fait afficher via une msgbox les deux valeur lu par excel mais (de ce que je vois) ce sont les mêmes
j'ai aussi vu que le problème pouvait venir d'une comparaison non précise, càd que les chiffres pouvait être différent mais sur le bit le plus faible et non afficher, cependant les valeur ne sont pas issues de calculs donc je ne pense pas que ce pourrait être la cause de mon problème.
dans mon cas la premiere valeur comparé vient de cette formule :
=SI(A3="";"";INDEX('O:\Fichiers\Suivi cde\2018\[Suivi cde 2018.xlsm]cde en cours'!D:D;EQUIV(A3;'O:\Fichiers\Suivi cde\2018\[Suivi cde 2018.xlsm]cde en cours'!W:W;0)))et me donne 32, cette valeur est stocké dans la case K3 (cells3,11)
ma deuxieme valeur est directement 32 stocké dans la case A23 (cells23,1)
or avec la comparaison suivant cela ne fonctionne pas :
While Workbooks(client).Sheets("C").Cells(ligne_conf, 1).Value <> Workbooks("Facturation.xlsm").Sheets("Facturation").Cells(i, 11).Value
ligne_conf = ligne_conf + 1
Wend"client" correspond au fichier client qui vient d’être ouvrir précédemment par la même macro
"ligne_conf" est la ligne que l'on cherche
"i" est la ligne actuelle de l'autre fichier.
Toute solution est bonne à prendre donc n'hésité pas à proposer les vôtres.
Cordialement
Arthur
Bonjour,
Peux-tu joindre tes 2 fichiers?
cela permettra au forum de t'apporter une aide adaptée.
Cdlt.
bonjour,
comme mon document contient des données confidentielles j'ai essayer de reproduire le même cas avec des fichiers tests, malheureusement je n'ai pas réussi à retrouver ce problème.
Je ne peux donc que te donné des descriptions de mes fichiers.
Si tu as des question sur ce qui concerne mes fichiers n'hésite pas
Bien cordialement.
Arthur
Re,
Pas de bras pas de chocolat.
Cdlt.
Re,
dans le doute je te joint ça
(le programme principal n'est pas encore fini)
Public Sub MAJ_flag()
MsgBox "Cette opération peut prendre un certain temps." & vbLf & "Veuillez patienter", vbInformation
Application.ScreenUpdating = False
' Application.DisplayAlerts = False
Application.EnableEvents = False
Windows("Facturation.xlsm").Activate
Workbooks("Facturation.xlsm").Sheets("Facturation").Select
Workbooks("Facturation.xlsm").Sheets("Facturation").Copy Before:=Sheets(1)
CHEMIN = "F:\Fichiers\Arthur\2018\"
no_der_ligne_prec = 1
Do
no_der_ligne_prec = no_der_ligne_prec + 1
Loop While (Workbooks("Facturation.xlsm").Sheets("Facturation (2)").Cells(no_der_ligne_prec, 13).Value <> "")
no_der_ligne = Workbooks("Facturation.xlsm").Sheets("Facturation (2)").Range("A" & Rows.Count).End(xlUp).Row
verr1 = 0
For i = no_der_ligne_prec To no_der_ligne
If Workbooks("Facturation.xlsm").Sheets("Facturation (2)").Cells(i, 13) <> "x" Then
If Left(Workbooks("Facturation.xlsm").Sheets("Facturation (2)").Cells(i, 1).Value, 3) = "CPC" Then
If Workbooks("Facturation.xlsm").Sheets("Facturation (2)").Cells(i, 3).Value <> "#N/A" Then
' On Error GoTo erreur
If verr1 = 0 Then
tableau
verr1 = 1
End If
client = Workbooks("Facturation.xlsm").Sheets("Facturation (2)").Cells(i, 10).Value & ".xls"
If Workbooks("Facturation.xlsm").Sheets("Facturation (2)").Cells(i, 3).Value <> Workbooks("Facturation.xlsm").Sheets("Facturation (2)").Cells(i - 1, 3).Value Or i = no_der_ligne_prec Then
Workbooks.Open (CHEMIN & client)
End If
ligne_conf = 20
While Workbooks(client).Sheets("C").Cells(ligne_conf, 1).Value <> Workbooks("Facturation.xlsm").Sheets("Facturation").Cells(i, 11).Value ' ERREUR ICI
ligne_conf = ligne_conf + 1
Wend
Range("A" & ligne_conf & ":C" & ligne_conf).Copy
Range("E" & ligne_conf & ":G" & ligne_conf).PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
Application.CutCopyMode = False
Range("A" & ligne_conf & ":C" & ligne_conf).ClearContents
Workbooks(client).Sheets("C").Cells(ligne_conf, 6).Value = Workbooks("Facturation.xlsm").Sheets("Facturation").Cells(i, 6).Value
Workbooks(client).Save
If Workbooks("Facturation.xlsm").Sheets("Facturation (2)").Cells(i + 1, 3).Value <> Workbooks("Facturation.xlsm").Sheets("Facturation (2)").Cells(i, 3).Value Then 'si la prochaine ligne ne traite pas le meme client alors on ferme le fichier du client
Workbooks(client).Close
End If
j = 1
While (Workbooks("Facturation.xlsm").Sheets("Facturation (2)").Cells(i, 1).Value <> Workbooks("Facturation.xlsm").Sheets("Facturation").Cells(j, 1).Value)
j = j + 1
Wend
Workbooks("Facturation.xlsm").Sheets("Facturation").Cells(j, 13).Value = "x"
End If
End If
Workbooks.Open (CHEMIN & "Suivi cde 2018_arthur.xlsm")
ligne_cde = 20
While Workbooks("Suivi cde 2018_arthur.xlsm").Sheets("cde en cours").Cells(ligne_cde, 23).Value <> Workbooks("Facturation.xlsm").Sheets("Facturation").Cells(i, 1).Value
ligne_cde = ligne_cde + 1
Wend
Workbooks("Suivi cde 2018_arthur.xlsm").Sheets("cde en cours").Cells(ligne_cde, 49).Value = "x"
Workbooks("Suivi cde 2018_arthur.xlsm").Sheets("cde en cours").Cells(ligne_cde, 50).Value = Workbooks("Facturation.xlsm").Sheets("Facturation").Cells(i, 2).Value
erreur:
On Error GoTo -1
End If
Next
Workbooks("Facturation.xlsm").Sheets("Facturation (2)").Delete
Application.ScreenUpdating = True
Application.DisplayAlerts = True
Application.EnableEvents = True
End Sub
MsgBox Workbooks("Facturation.xlsm").Sheets("Facturation (2)").Cells(no_der_ligne_prec, 11).Value
ligne_conf = 23
MsgBox Workbooks(client).Sheets("C").Cells(ligne_conf, 1).Value
MsgBox Workbooks(client).Sheets("C").Cells(ligne_conf, 1).Value <> Workbooks("Facturation.xlsm").Sheets("Facturation").Cells(i, 11).Value
MsgBox 32 <> Workbooks("Facturation.xlsm").Sheets("Facturation").Cells(i, 11).Value
MsgBox 32 <> Workbooks(client).Sheets("C").Cells(ligne_conf, 1).ValueSub tableau()
der_ligne = Workbooks("Facturation.xlsm").Worksheets("Facturation (2)").Range("A" & Rows.Count).End(xlUp).Row
Workbooks("Facturation.xlsm").Worksheets("Facturation (2)").ListObjects.Add(xlSrcRange, Workbooks("Facturation.xlsm").Worksheets("Facturation (2)").Range("$A$1:$M" & der_ligne), , xlYes).Name = "tableau"
For i = 2 To der_ligne
If Cells(i, 13) <> "" Then
Workbooks("Facturation.xlsm").Worksheets("Facturation (2)").ListObjects("tableau").Range.AutoFilter Field:=13, Criteria1:="="
Exit For
End If
Next
ActiveWorkbook.Worksheets("Facturation (2)").ListObjects("tableau").Sort. _
SortFields.Clear
ActiveWorkbook.Worksheets("Facturation (2)").ListObjects("tableau").Sort. _
SortFields.Add Key:=Range("tableau[[#All],[Nom client]]"), SortOn:= _
xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
With ActiveWorkbook.Worksheets("Facturation (2)").ListObjects("tableau").Sort
.Header = xlYes
.MatchCase = False
.Orientation = xlTopToBottom
.SortMethod = xlPinYin
.Apply
End With
End SubRe,
C'est une question à poser à Merlin.
Tu souhaites une aide du forum, mais tu ne fournis pas les éléments utiles pour que nous puissions de répondre favorablement.
Alors, que fait-on?
Cdlt.
Re,
merci de t'investir dans ma galère,pour l'instant je regarde pour censurer les 3 documents nécessaires, et modifier les formules afin qu'elle corresponde au changements effectués.
Dès que ces changements seront fait je t'envoie les fichiers.
Je te tiens au courant si tu veux.
Cordialement
Arthur
Re,
Je rectifie un point : Tu envoies tes fichiers au forum.
Le forum se fera alors une joie de répondre à tes besoins (moi ou un autre intervenant).
Cdlt.
Re,
oui bien sur, scuse faute de langage
Re,
Après quelques modifications voici un zip contenant 3 fichiers qui sont relier par des liens, dans le code du fichier facturation la variable CHEMIN doit être changé avec le bon chemin du fichier.
le lien :
Cordialement.
Arthur.
Bonjour à tous,
J'ai trouver la solution à mon problème, le format de l'une des cellule était en texte ce qui faisait qu'elle n'était pas égal car selon moi(à débattre ou approuvé) une chaîne de texte (en C et je pense ici aussi) se fini par un "\0" afin de marquer la fin de la chaine, ainsi "32" <> "32\0" d'ou l’inégalité sortie par excel.
Je tien tout de même à remercier Jean-Eric pour sa tentative sont aide
Cordialement.
Arthur.