Page 1 sur 1

[R] Contenu cellule Excel récupéré : impossible à comparer ?!  

Posté : dim. 29 mai 2016 19:48
par jcbx
Bonjour à tous,

je bloque aujourd'hui bêtement sur quelque chose d'étrange ?!
Le code est ci-dessous, je vous explique auparavant ce que je veux faire.
De même, vous trouverez un fichier Excel joint.
(Je précise que le script Autoit sera lancé depuis un raccourci clavier directement sur la page Excel déjà ouverte).

Je veux lire chaque ligne de la première colonne de mon fichier Excel.
Pour chacune des lignes, je récupère la valeur de la cellule.
Donc je récupère A1, A2, A3, A4...
Pour chacune des valeurs, je planifie dans un Select case quelles colonnes de la ligne je dois cocher.
Pour certaines lignes, 0, pour d'autres, au maximum 3.
Pour cela, je compare chaque cellule avec mon Case.
Or, c'est comme si je pissais dans un violon.
Quand j'affiche le contenu de la cellule (ma variable donc) avec un msgbox, tout va bien,
mais AI ne semble pas comparer du tout ?!
J'ai tenté avec un StringStripCR, au cas où Excel rajouterait des choses que je ne vois pas ?!

Le problème selon moi se situe dans la fonction ListeValeursCellule($sCellule)

Merci d'avance pour votre aide, je me sens idiot comme pas permis ?!
Par contre, je ne souhaite pas utiliser l'UDF Excel, si vous pensiez m'orienter dessus :)

Code : Tout sélectionner

#include <MsgBoxConstants.au3>
#include <AutoItConstants.au3>
#include <StringConstants.au3>
#include <Clipboard.au3>

Func LireContenuCellule()
Sleep(1000)
Send("^c")
Sleep(1000)
Dim $sCellule = ClipGet()
return $sCellule
EndFunc


Func ListeValeursCellule($sCellule)
msgbox (0,"Entrée dans fct ListevaleursCellule",$sCellule)
   Select
   Case stringcompare($sCellule,"Catégorie")
	  msgbox (0,"0Function Listevaleurs",$sCellule)
	  msgbox (0, "Stringcompare", "marche pour Catégorie")
   Case stringcompare($sCellule,"Assurance Hab")
	  msgbox (0,"1Function Listevaleurs",$sCellule)
	  msgbox (0, "Stringcompare", "marche pour Assurance Hab")
	  ;Cocher colonnes 9 & 12
   EndSelect
EndFunc


Func AllerPremiereColonne()

EndFunc

Func CocherColonne ($nNumColonne1, $nNumColonne2, $nNumColonne3)
Sleep(800)
For $nNumColonne = 1 to $nNumColonne1
Send ("{RIGHT}")
Next
Send("X")
Sleep(500)
For $nNumColonne = $nNumColonne to $nNumColonne2
Send ("{RIGHT}")
Next
Send("X")
Sleep(500)
If $nNumColonne3 <> 0 Then
For $nNumColonne = $nNumColonne to $nNumColonne3
Send ("{RIGHT}")
Next
Send("X")
Sleep(500)
EndIf
EndFunc

;epargne	virement interne	ponctuel	recurrent	non rep	exc sur rec	incompressible

Func DescendreLigneSuivante ()
Send("{DOWN}")
EndFunc

Func Main()
Sleep(1500)
_ClipBoard_Empty()
Dim $sCellule = LireContenuCellule()
for $i = 0 to 2 Step 1
Sleep(1500)
;msgbox (0, "Fct Main",$sCellule)
Sleep(1500)
ListeValeursCellule($sCellule)
Sleep(1500)
DescendreLigneSuivante()
;debugging msgbox (0, $sCellule,$sCellule)
$sCellule = LireContenuCellule()
;a changer en boucle do while qd prob regle : Until StringCompare ($sCellule, "Total")
;debugging msgbox (0, "cellule enregistree dans fonction Main", $sCellule)
Next
EndFunc

Main()

Re: Contenu cellule Excel récupéré : impossible à comparer ?!

Posté : dim. 29 mai 2016 20:21
par jchd
Par contre, je ne souhaite pas utiliser l'UDF Excel, si vous pensiez m'orienter dessus
Pourtant ça serait 100 fois plus fiable.
Pourquoi faire du solide quand on peut vivre dangereusement ?

Sinon, relire dans l'aide la valeur renvoyée par StringCompare :

Code : Tout sélectionner

   Case stringcompare($sCellule,"Catégorie") = 0

Re: Contenu cellule Excel récupéré : impossible à comparer ?!

Posté : dim. 29 mai 2016 20:41
par orax
Mon Excel ajoute un @CRLF à la fin de la chaîne, donc j'utilise StringStripWS pour le retirer.

Il faudrait faire comme vient de le dire jchd.

Code : Tout sélectionner

	Select
		Case StringCompare($sCellule, "Catégorie") = 0
		...
		Case StringCompare($sCellule, "Assurance Hab") = 0
		...
Il serait aussi possible d'utiliser Switch à la place du Select.
Func LireContenuCellule()
   Sleep(1000)
   Send("^c")
   Sleep(1000)
   Dim $sCellule = StringStripWS(ClipGet(), $STR_STRIPTRAILING)
   ConsoleWrite($sCellule & @CRLF)
   Return $sCellule
EndFunc   ;==>LireContenuCellule


Func ListeValeursCellule($sCellule)
   MsgBox(0, "Entrée dans fct ListevaleursCellule", $sCellule)
   Switch $sCellule
      Case "Catégorie"
         MsgBox(0, "0Function Listevaleurs", $sCellule)
         MsgBox(0, "", "marche pour Catégorie")
      Case "Assurance Hab"
         MsgBox(0, "1Function Listevaleurs", $sCellule)
         MsgBox(0, "", "marche pour Assurance Hab")
         ;Cocher colonnes 9 & 12
   EndSwitch
EndFunc   ;==>ListeValeursCellule

Re: Contenu cellule Excel récupéré : impossible à comparer ?!

Posté : dim. 29 mai 2016 20:55
par jcbx
Merci à vous deux !
Je suis effectivement passé à côté du fait que StringCompare renvoyait un résultat...
Je vais également regarder le StringStripWS si d'aventure le stringcompare ne suffit pas.

Une dernière question toutefois : un bête "If $sCellule = "Catégorie" ou "If $sCellule == "Catégorie" aurait marché, ou pas ?
Je clos juste après :)

Re: Contenu cellule Excel récupéré : impossible à comparer ?!

Posté : dim. 29 mai 2016 21:00
par orax
Oui, avec un If ça marche aussi, mais s'il y a beaucoup de comparaisons, un Select ou Switch est plus adapté.
== fait une comparaison sensible à la casse.

Code : Tout sélectionner

$sCellule = "catégorie" ; "c" en minuscule
If $sCellule = "Catégorie" Then ConsoleWrite("=" & @CRLF)
If $sCellule == "Catégorie" Then ConsoleWrite("==" & @CRLF) ; ne trouve pas Catégorie

Re: Contenu cellule Excel récupéré : impossible à comparer ?!

Posté : mar. 31 mai 2016 19:45
par jcbx
Merci encore.
La version fonctionnelle est la suivante :
Case StringCompare(StringStripWS($sCellule,2),"Catégorie",0)=0