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

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
jcbx
Niveau 1
Niveau 1
Messages : 8
Enregistré le : mar. 02 août 2011 19:09
Status : Hors ligne

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

#1

Message 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()
Fichiers joints
Classeur1.xlsx
(9.6 Kio) Téléchargé 58 fois
Modifié en dernier par jcbx le mar. 31 mai 2016 19:45, modifié 3 fois.
Avatar du membre
jchd
AutoIt MVPs (MVP)
AutoIt MVPs (MVP)
Messages : 2273
Enregistré le : lun. 30 mars 2009 22:57
Localisation : Sud-Ouest de la France (43.622788,-1.260864)
Status : Hors ligne

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

#2

Message 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
La cryptographie d'aujourd'hui c'est le taquin plus l'électricité.
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

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

#3

Message 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
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
jcbx
Niveau 1
Niveau 1
Messages : 8
Enregistré le : mar. 02 août 2011 19:09
Status : Hors ligne

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

#4

Message 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 :)
Avatar du membre
orax
Modérateur
Modérateur
Messages : 1479
Enregistré le : lun. 23 mars 2009 04:50
Localisation : ::1
Status : Hors ligne

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

#5

Message 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
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
jcbx
Niveau 1
Niveau 1
Messages : 8
Enregistré le : mar. 02 août 2011 19:09
Status : Hors ligne

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

#6

Message par jcbx »

Merci encore.
La version fonctionnelle est la suivante :
Case StringCompare(StringStripWS($sCellule,2),"Catégorie",0)=0
Répondre