Commande(s) EXCEL

Aide et conseils concernant AutoIt et ses outils.
Règles du forum
.
Répondre
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 167
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

Commande(s) EXCEL  

#1

Message 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" )
    Exit
EndIf

$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+=1
WEnd
$NbConc = $i+1
redim $Tab[$NbConc][7]
_ArrayDisplay($Tab,$i+1)

;$oXL.DisplayAlerts = False            ; evite la question -fichier existe dejà ?
$oXL.ActiveWorkbook.Save($oXL)
_Excel_BookClose($oXL) ; Fermeture excel
Exit              ; 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
Calendrier.xls
(35 Kio) Téléchargé 89 fois
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Commande(s) EXCEL

#2

Message par walkson »

Bonjour,
Vous devriez regarder l'aide d'Excel car vous fonctionnez comme l'ancien UDF :wink:
#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" )
    Exit
EndIf

$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+=1
WEnd
$NbConc = $i+1
redim $Tab[$NbConc][7]
_ArrayDisplay($Tab,$i+1)

;$oXL.DisplayAlerts = False                             ; evite la question -fichier existe dejà ?
$oXL.ActiveWorkbook.Save
_Excel_Close($oXL) ; Fermeture excel
Exit                                    ; 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 !)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 167
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

Re: Commande(s) EXCEL

#3

Message 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 ?
Avatar du membre
walkson
Modérateur
Modérateur
Messages : 1020
Enregistré le : ven. 12 août 2011 19:49
Localisation : Hurepoix
Status : Hors ligne

Re: Commande(s) EXCEL

#4

Message 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 $oError
Global $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" )
    Exit
EndIf

Local $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 excel
Exit
Il semblerait que les erreurs soient dues à Autoit avec les versions > v3.3.12.0 (c'est un avis personnel)
Cordialement,
Walkson
"Horas non numero nisi serenas " Le canon de midi
(Je ne compte que les heures heureuses)
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 167
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

Re: Commande(s) EXCEL

#5

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

Re: Commande(s) EXCEL

#6

Message 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.
De petits détails peuvent faire toute la différence. — Quand la boule de neige commence à rouler… poussez-la. (Columbo)
Avatar du membre
Yle
Niveau 5
Niveau 5
Messages : 167
Enregistré le : mar. 21 avr. 2009 17:22
Localisation : La NORMANDIE -76
Status : Hors ligne

Re: Commande(s) EXCEL

#7

Message 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
Répondre