Page 1 sur 1

_Excel_RangeRead ne fonctionne pas

Posté : lun. 13 mars 2017 17:08
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

Re: _Excel_RangeRead ne fonctionne pas  

Posté : lun. 13 mars 2017 22:03
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

Re: _Excel_RangeRead ne fonctionne pas

Posté : lun. 13 mars 2017 22:34
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

Re: _Excel_RangeRead ne fonctionne pas

Posté : mar. 14 mars 2017 15:35
par Marc
Merci marcgforce pour ta réponse. Ta solution est très simple et facile à comprendre. Je vais fortement m'en inspirer ;-)

Merci