Page 1 sur 1
Commande(s) EXCEL
Posté : mer. 05 juil. 2017 00:04
par Yle
Bonjour,
Voici qq lignes de programme
#include-once#include <Excel.au3>#Include <String.au3>#include <Date.au3>Global $DateJour = @YEAR & @MON & @MDAY, $Jour, $Tab[100][7]$oXL = _Excel_BookOpen(@ScriptDir & "\Calendrier.xls",False,False)If @error = 2 Then MsgBox(0, "Erreur n° 3", "Le fichier \Calendrier.xls n'existe pas" ) ExitEndIf$NL=6 ; on saute les 5 premieres lignes$i=-1; $oXl.ActiveSheet.Range("A1").Value = "AAAAbbAA"Local $Cell1 = _Excel_RangeRead($oXl, Default, "A6")Local $Cell2 = _Excel_RangeRead($oXl, Default, "B6")MsgBox(0,"Verif",$Cell1 & "__" & $Cell2)While _Excel_RangeRead($oXl, Default, "A" & $NL) <> "" And _Excel_RangeRead($oXl, Default, "B" & $NL) <> "" if _Excel_RangeRead($oXl, Default, "F" & $NL) >= $DateJour then ; si date creation (col 6) sup à date jour, on remplit TABLEAU $i+=1 $Tab[$i][0] = StringStripWS($oXl.ActiveSheet.Range("A" & $NL).value,3) $Tab[$i][1] = StringStripWS($oXl.ActiveSheet.Range("B" & $NL).value,3) $Tab[$i][2] = $oXl.ActiveSheet.Range("C" & $NL).value $Tab[$i][3] = $oXl.ActiveSheet.Range("D" & $NL).value $Tab[$i][4] = $oXl.ActiveSheet.Range("E" & $NL).value $Tab[$i][5] = $oXl.ActiveSheet.Range("F" & $NL).value $Tab[$i][6] = $oXl.ActiveSheet.Range("G" & $NL).value EndIf _Excel_RangeDelete($oXL.ActiveSheet,'"' & $NL & ":" & $NL & '"', $xlShiftUp) ; on supprime la ligne $NL+=1WEnd$NbConc = $i+1redim $Tab[$NbConc][7]_ArrayDisplay($Tab,$i+1);$oXL.DisplayAlerts = False ; evite la question -fichier existe dejà ?$oXL.ActiveWorkbook.Save($oXL)_Excel_BookClose($oXL) ; Fermeture excelExit ; A la fin, je dois avoir un TAB qui contient 3 lignes et un fichier qui n'a que l'entête (5 lignes)
Je lis un fichier EXCEL (Mis en PJ)
Première erreur : je n'arrive pas à lire les cellules A6 et B6 ?
Seconde erreur : Ma boucle While ne fonctionne pas
Je pense que mon souci vient de _Excel_RangeRead mais je ne comprends pas pourquoi...
A la fin, je dois avoir un $TAB qui doit contenir 3 lignes dont la date est supérieure à celle du jour et un fichier qui ne contient que les 5 lignes d'entête.
Un coup de main, SVP...Merci
Re: Commande(s) EXCEL
Posté : mer. 05 juil. 2017 20:54
par walkson
Bonjour,
Vous devriez regarder l'aide d'Excel car vous fonctionnez comme l'ancien UDF
#include <Excel.au3>#Include <String.au3>#include <Date.au3>Global $DateJour = @YEAR & @MON & @MDAY, $Jour, $Tab[100][7]$oXL = _Excel_Open()$oBook = _Excel_BookOpen($oXL,@ScriptDir & "\Calendrier.xls")If @error = 2 Then MsgBox(0, "Erreur n° 3", "Le fichier \Calendrier.xls n'existe pas" ) ExitEndIf$NL=6 ; on saute les 5 premieres lignes$i=-1; $oXl.ActiveSheet.Range("A1").Value = "AAAAbbAA"Local $Cell1 = _Excel_RangeRead($oBook, Default, "A6")Local $Cell2 = _Excel_RangeRead($oBook, Default, "B6")MsgBox(0,"Verif",$Cell1 & "__" & $Cell2)While _Excel_RangeRead($oBook, Default, "A" & $NL) <> "" And _Excel_RangeRead($oBook, Default, "B" & $NL) <> "" if _Excel_RangeRead($oBook, Default, "F" & $NL) >= $DateJour then ; si date creation (col 6) sup à date jour, on remplit TABLEAU $i+=1 $Tab[$i][0] = StringStripWS($oXL.ActiveSheet.Range("A" & $NL).value,3) $Tab[$i][1] = StringStripWS($oXL.ActiveSheet.Range("B" & $NL).value,3) $Tab[$i][2] = $oXL.ActiveSheet.Range("C" & $NL).value $Tab[$i][3] = $oXL.ActiveSheet.Range("D" & $NL).value $Tab[$i][4] = $oXL.ActiveSheet.Range("E" & $NL).value $Tab[$i][5] = $oXL.ActiveSheet.Range("F" & $NL).value $Tab[$i][6] = $oXL.ActiveSheet.Range("G" & $NL).value EndIf _Excel_RangeDelete($oXL.ActiveSheet, "A" & $NL ,Default,1) ; on supprime la ligne $NL+=1WEnd$NbConc = $i+1redim $Tab[$NbConc][7]_ArrayDisplay($Tab,$i+1);$oXL.DisplayAlerts = False ; evite la question -fichier existe dejà ?$oXL.ActiveWorkbook.Save_Excel_Close($oXL) ; Fermeture excelExit ; A la fin, je dois avoir un TAB qui contient 3 lignes et un fichier qui n'a que l'entête (5 lignes)
J'ai réglé le problème du fonctionnement sans m'occuper de la logique (le code est lent !)
Re: Commande(s) EXCEL
Posté : mer. 05 juil. 2017 22:59
par Yle
Merci d'avoir pris en compte mon souci.
Visiblement je mélange $oXL et $oBook...
Mais quand je passe l'outil, je n'arrive pas à "OUVRIR" un fichier Calendrier qui ne contient que les 5 lignes d'entête. (Suis en Excel 2016+W10)
La commande $oXL.ActiveWorkbook.Save plante, remplacée par _Excel_BookSave ( $oBook ) mais fichier "verrouillé", je ne peux pas l'ouvrir
Si j'ajoute _Excel_BookSaveAs($oBook,@ScriptDir & "\Calendrierss.xls"), je n'arrive pas non plus à ouvrir le fichier même si je le crée en xlsx
Et effectivement le script est long. Avez vous une idée ?
Re: Commande(s) EXCEL
Posté : jeu. 06 juil. 2017 00:32
par walkson
peut être comme ça
#include <Excel.au3>#Include <String.au3>#include <Date.au3>Local $oError = ObjEvent("AutoIt.Error", "__Excel_COMErrFunc");ça calme les erreurs parfois !#forceref $oErrorGlobal $DateJour = @YEAR & @MON & @MDAY$oXL = _Excel_Open()$oBook = _Excel_BookOpen($oXL,@ScriptDir & "\Calendrier.xls")If @error = 2 Then MsgBox(0, "Erreur n° 3", "Le fichier \Calendrier.xls n'existe pas" ) ExitEndIfLocal $Cell1 = _Excel_RangeRead($oBook, Default, "A6")Local $Cell2 = _Excel_RangeRead($oBook, Default, "B6");MsgBox(0,"Verif",$Cell1 & "__" & $Cell2)$NBrows = $oXL.Range("A6").CurrentRegion.Rows.Count$adD2 = $oXL.ActiveSheet.Range("A" & $NBrows).End(-4161).Address(False,False);vers droite en bas$array = $oXL.ActiveSheet.Range("A6" , $adD2).Value ;Array_ArrayTranspose($array);_ArrayDisplay($array)Local $val, $Tarray[0][7]For $i = 0 To UBound($array) - 1 If $array[$i][5] >= $DateJour Then $val &= $array[$i][0] &"|"& $array[$i][1] &"|"& $array[$i][2] &"|"& $array[$i][3] &"|"& $array[$i][4] &"|"& _
$array[$i][5] &"|"& $array[$i][6] _ArrayAdd($Tarray,$val) EndIf$val = ""Next$oXL.ActiveSheet.Range("A6" , $adD2).Delete_ArrayDisplay($Tarray)$oXL.ActiveWorkbook.Save_Excel_Close($oXL) ; Fermeture excelExit
Il semblerait que les erreurs soient dues à Autoit avec les versions > v3.3.12.0 (c'est un avis personnel)
Re: Commande(s) EXCEL
Posté : jeu. 06 juil. 2017 09:03
par Yle
Bonjour
Pas photo sur le temps d'exécution et c'est OK !
Je voulais attirer votre attention sur le fait que pour récupérer le code, j'ai cliqué sur "tout sélectionner" puis fait un CTRL-C
J'ai sauvegardé sur aqw.au3 et ensuite exécuté le code et j'ai eu ceci:
+> SciTEDir => d:\Program Files (x86)\AutoIt3\SciTE UserDir => d:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper SCITE_USERHOME => E:\AutoIt v3\SciTE
>Running AU3Check (3.3.14.2) from:d:\Program Files (x86)\AutoIt3 input:D:\AU3\aqw.au3
+>08:54:26 AU3Check ended.rc:0
>Running:(3.3.14.2):d:\Program Files (x86)\AutoIt3\autoit3_x64.exe "D:\AU3\aqw.au3"
--> Press Ctrl+Alt+Break to Restart or Ctrl+Break to Stop
D:\AU3\aqw.au3 (4) : ==> Unable to parse line.:
    Local $oError = ObjEvent("AutoIt.Error", "__Excel_COMErrFunc")
^ ERROR
->08:54:26 AutoIt3.exe ended.rc:1
+>08:54:26 AutoIt3Wrapper Finished.
>Exit code: 1 Time: 1.798
Pour remédier, j'ai cliqué sur la première ligne puis sur la dernière, CTRL-C , et ré exécuté le code et cette fois pas d'erreur....
Est ce le 'TOUT sélectionner' qui introduit des caractères parasites ?
Merci encore pour la solution.
Re: Commande(s) EXCEL
Posté : jeu. 06 juil. 2017 10:36
par orax
Dans le code source (HTML) de la page il y avait des     à la place de la tabulation. J'ai donc supprimé la tabulation. Je pense que ça devrait marcher maintenant.
Re: Commande(s) EXCEL
Posté : ven. 07 juil. 2017 09:15
par Yle
Bonjour,
Eh bien non, çà ne fonctionne pas après avoir fait : "tout sélectionner" et CTRL-C
Résultat, même erreur mais pas à la même ligne :
>"d:\Program Files (x86)\AutoIt3\SciTE\..\AutoIt3.exe" "d:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper\AutoIt3Wrapper.au3" /run /prod /ErrorStdOut /in "D:\AU3\TESTTT.au3" /UserParams
+>09:13:26 Starting AutoIt3Wrapper v.15.920.938.0 SciTE v.3.6.0.0 Keyboard:0000040C OS:WIN_10/ CPU:X64 OS:X64 Environment(Language:040C)
+> SciTEDir => d:\Program Files (x86)\AutoIt3\SciTE UserDir => d:\Program Files (x86)\AutoIt3\SciTE\AutoIt3Wrapper SCITE_USERHOME => E:\AutoIt v3\SciTE
>Running AU3Check (3.3.14.2) from:d:\Program Files (x86)\AutoIt3 input:D:\AU3\TESTTT.au3
"D:\AU3\TESTTT.au3"(10,1) : error: missing EndIf. (illegal character)
Â
^
"D:\AU3\TESTTT.au3"(9,19) : REF: missing EndIf.
If @error = 2 Then
~~~~~~~~~~~~~~~~~~^
D:\AU3\TESTTT.au3 - 1 error(s), 0 warning(s)
!>09:13:27 AU3Check ended. Press F4 to jump to next error.rc:2
+>09:13:27 AutoIt3Wrapper Finished.
>Exit code: 2 Time: 1.94