_Excel_RangeRead ne fonctionne pas

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Marc
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 22 févr. 2017 00:57
Status : Hors ligne

_Excel_RangeRead ne fonctionne pas

#1

Message par Marc »

Bonjour à tous,

J'ai un problème avec _Excel_RangeRead. Je dois lire une cellule avec un index que j'incrémente à l'aide d'une boucle. Pour chaque cellule lue, je le compare avec une valeur ($iCas). Cette valeur est un nombre et représente une clef. Lorsque cette clef est trouvée, le traitement sort de la boucle. Mon problème est que lorsque que la boucle débute, _Excel_RangeRead est capable de lire la première valeur qui se trouve dans la cellule A4. Mais avec les cellules suivantes, A5, A6, A7, etc. @error = 3 dont le @extended = -2147352567. J'ai essayé des valeurs différentes pour $iReturn mais rien n'y fait. Je me suis aussi assuré que les valeurs de la colonne A du fichier Excel sont bien des nombres. J'ai googlé l'erreur mais je ne trouve rien qui se rapporte à mon problème. Est-ce qu'il y a quelqu'un parmi vous qui avez eu ce problème? Si oui, comment l'avez-vous réglé. J'ai déjà plusieurs heures de passées à comprendre ce que se passe sans rien trouvé :cry:. Merci pour votre aide.

$iLigne = 4
$sCellule = "A" & $iLigne & ""

While 1
   If _Excel_RangeRead($oClasseur, Default, $sCellule, 3) <> $iCas Then
      If $iLigne > 100 Then
         MsgBox(48,"Erreur","Erreur recherche cas :" & $iCas & " non trouvé dans la liste")
         Return
      EndIf
      $iLigne += 1
      $sCellule = "'A" & $iLigne & "'"
   Else
      ExitLoop
   EndIf
WEnd
Marc
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 22 févr. 2017 00:57
Status : Hors ligne

Re: _Excel_RangeRead ne fonctionne pas  

#2

Message par Marc »

J'ai enfin trouvé à force d'essayer n'importe quoi. Il n'y a pas de différence majeur entre les deux codes. Je n'arrive pas à expliquer pourquoi le premier ne fonctionne pas alors que le deuxième si. Si quelqu'un peut me l'expliquer s.v.p. :?
$iLigne = 4

While 1
   $sCellule = "A" & $iLigne & ""
   Local $sCasEnCours = _Excel_RangeRead($oClasseur, Default, $sCellule, 1)
   If $sCasEnCours <> $sCas Then
      If $iLigne > 100 Then
         MsgBox(48,"Erreur","Erreur recherche cas :" & Trim($sCas) & " non trouvé dans la liste")
         Return
      EndIf
      $iLigne += 1
   Else
      ExitLoop
   EndIf
WEnd
marcgforce
Niveau 3
Niveau 3
Messages : 47
Enregistré le : lun. 07 mars 2016 07:20
Status : Hors ligne

Re: _Excel_RangeRead ne fonctionne pas

#3

Message par marcgforce »

du code que je vois, pour moi il manque une boucle for pour que la lecture telle que tu la décris se fasse, en plus tu as un return dans le while 1, je suis pas sur qu'il aprecie vraiment.

Voilà ce que j'aurait fait :
  #include <Excel.au3>
   Local $oAppl = _Excel_Open()
   If @error Then Exit MsgBox(16, "Excel UDF: _Excel_BookOpen Example", "Error creating the Excel application object." & @CRLF & "@error = " & @error & ", @extended = " & @extended)
   Local $sClasseur = "C:\temp\testrand.xls" ; le fichier excel comporte une formule alea.entre.bornes(1;10)
   Local $oClasseur = _Excel_BookOpen($oAppl, $sClasseur, Default, Default, True)
   If @error Then MsgBox($MB_SYSTEMMODAL, "Excel UDF: _Excel_BookOpen Example 1", "Error opening '" & $sClasseur & "'." & @CRLF & "@error = " & @error & ", @extended = " & @extended)

   $iCas=5 ; la valeur $i cas que tu n'as pas donné dans ton pb

    $iLigne = 1


    While 1
            for $i = $iligne to 1000 ; il faut bien entendu trouver la valeur max de tes données (dernière cellule)
            $iligne = $i ; la ligne
            $sCellule = "A" & $iLigne ; la cellule
            If _Excel_RangeRead($oClasseur, Default, $sCellule, 3) = $iCas Then MsgBox(0,"","Valeur trouvée en cellule " & $sCellule, 1)

         Next
    WEnd
Après ça reste à adapter à ce que tu veux faire
Marc
Niveau 1
Niveau 1
Messages : 4
Enregistré le : mer. 22 févr. 2017 00:57
Status : Hors ligne

Re: _Excel_RangeRead ne fonctionne pas

#4

Message par Marc »

Merci marcgforce pour ta réponse. Ta solution est très simple et facile à comprendre. Je vais fortement m'en inspirer ;-)

Merci
Répondre