Page 1 sur 1
[..] Mise en forme conditionnelle sous Excel
Posté : ven. 16 oct. 2015 14:33
par Hugues
Bonjour,
Je souhaiterai mettre en forme le contenu de mon fichier Excel.
Je lis en boucle des fichiers et je met leur contenu dans un fichier Excel.
Je voudrais arriver à un résultat comme dans le fichier Excel Joint.
Ci-joint mon code et les fichiers à lire. Vous comprendrez tout de suite mon problème ^^
Merci par avance.
Les fichiers à lire:
http://www.cjoint.com/c/EJqmsZs0QZI
http://www.cjoint.com/c/EJqmtthKloI
http://www.cjoint.com/c/EJqmtU5bVxI
http://www.cjoint.com/c/EJqmus6vqsI
http://www.cjoint.com/c/EJqmuVvpd2I
http://www.cjoint.com/c/EJqmvfdhiDI
Le fichier excel final désiré:
http://www.cjoint.com/c/EJqmwyCBghI
Mon code:
► Afficher le texte
Code : Tout sélectionner
#include <ArrayEx.au3>
#include <File.au3>
#include <Excel.au3>
Global $ExcelRowStart = 3, $aArray, $Unity
_FONCTION_TEST()
Func _FONCTION_TEST()
$aArray = _FileListToArray(@ScriptDir, "*", 1)
;_ArrayDisplay($aArray)
Local $oAppl = _Excel_Open()
Global $oWorkbook = _Excel_BookNew($oAppl)
If @error Then
MsgBox(64, "", "Error creating the new workbook.")
_Excel_Close($oAppl)
EndIf
$oWorkbook.sheets("Feuil1").Range("A2").Value = "Nom fichier"
$oWorkbook.sheets("Feuil1").Range("B2").Value = "Point de sertissage"
$oWorkbook.sheets("Feuil1").Range("C2").Value = "Référence"
$oWorkbook.sheets("Feuil1").Range("D2").Value = "Date"
$oWorkbook.sheets("Feuil1").Range("E2").Value = "Heure"
$oWorkbook.ActiveSheet.Range("A2:R2").Font.Bold = True
$oWorkbook.ActiveSheet.Range("G1:R1").Font.Bold = True
For $i = 1 To UBound($aArray) - 1
Global $DummyFile = $aArray[$i]
_ReadFile($DummyFile, $i)
Next
$oWorkbook.ActiveSheet.Columns("A:R").AutoFit
EndFunc
Func _ReadFile($DummyFile, $i)
Local $hFileRead = FileRead(@ScriptDir" & $DummyFile)
Local $aString2 = _StringToArray2D($hFileRead, @CRLF, ";", 1)
$aString2[0][0] = StringReplace($aString2[0][0], " ", "")
Local $aSplit = StringSplit($aString2[0][0], "'")
Local $aSplitDateTime = StringSplit($aString2[1][0], " ")
Local $iIndex = _ArraySearch($aString2, "")
For $x = UBound($aSplit) - 1 To 0 Step - 1
If $aSplit[$x] Then
Else
_ArrayDelete($aSplit, $x)
EndIf
Next
_ArrayDisplay($aString2)
For $a = 5 To $iIndex - 1
;### Nom du fichier, etc...
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 1).Value = StringReplace($aArray[$i], "'", "")
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 2).Value = $aSplit[1]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 3).Value = $aSplit[2]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 4).Value = StringReplace($aSplitDateTime[1], "'", "")
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 5).Value = StringReplace($aSplitDateTime[2], "'", "")
;### Fin Nom du fichier, etc...
;### Points de mesures
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart - 1, $a + 2).Value = StringReplace(StringReplace(StringReplace(StringReplace($aString2[$a][0], "'", ""), "=", ""), "nicht auswertbar", ""), " ", "")
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart - 1, $a + 2).Font.Bold = True
;### Fin points de mesures
;### Valeur points de mesures
If StringInStr($aString2[$a][0], "nicht") Then
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $a + 2).Value = "n.a"
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $a + 2).Font.ColorIndex = 3
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $a + 2).Font.Bold = True
Else
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $a + 2).Value = $aString2[$a][1]
EndIf
;### Fin valeur points de mesures
Next
FileClose($hFileRead)
$ExcelRowStart+=2 ;ICI INCREMENTATION
$aSplit = ""
EndFunc
Re: [..] Mise en forme conditionnelle sous Excel
Posté : ven. 16 oct. 2015 19:29
par walkson
Bonsoir,
Vous comprendrez tout de suite mon problème
Ben, pas vraiment. Pour le savoir, il faudrait voir votre résultat avec problèmes.
A tout hasard, je vous propose de formater les cellules dans Excel. Voici un exemple tiré d'un vieux script.
En espérant que cela vous aide...
► Afficher le texte
Code : Tout sélectionner
Local $aFormatExamples[5] = ["Format Examples", "General", "hh:mm:ss", "$#,##0.00", "[Red]($#,##0.00)"]
For $i = 1 To UBound($aFormatExamples) - 1
_ExcelNumberFormat($oExcel, $aFormatExamples[$i], 2, $i, 11, $i)
Next
; Name...........: _ExcelNumberFormat
; Description ...: Applies the specified formatting to the cells in the specified R1C1 Range.
; Syntax.........: _ExcelNumberFormat($oExcel, $sFormat, $sRangeOrRowStart, $iColStart = 1, $iRowEnd = 1, $iColEnd = 1)
; Parameters ....: $oExcel - An Excel object opened by a preceding call to _ExcelBookOpen() or _ExcelBookNew()
; $sFormat - The formatting string to apply to the specified range (see Notes below)
; $sRangeOrRowStart - Either an A1 range, or an integer row number to start from if using R1C1
; $iColStart - The starting column for the number format(left)
; $iRowEnd - The ending row for the number format (bottom)
; $iColEnd - The ending column for the number format (right)
; Return values .: Success - Returns 1
; Failure - Returns 0 and sets @error on errors:
; @error=1 - Specified object does not exist
; @error=2 - Starting row or column invalid
; @extended=0 - Starting row invalid
; @extended=1 - Starting column invalid
; @error=3 - Ending row or column invalid
; @extended=0 - Ending row invalid
; @extended=1 - Ending column invalid
; Author ........: SEO <locodarwin at yahoo dot com>
; Modified.......: litlmike
; Remarks .......: For more information about possible formatting strings that can be used with this command, consult the book:
; "Programming Excel With VBA and .NET," by Steven Saunders and Jeff Webb, ISBN: 978-0-59-600766-9
; Related .......:
; Link ..........;
; Example .......; Yes
; ===============================================================================================================================
Func _ExcelNumberFormat($oExcel, $sFormat, $sRangeOrRowStart, $iColStart = 1, $iRowEnd = 1, $iColEnd = 1)
If Not IsObj($oExcel) Then Return SetError(1, 0, 0)
If Not StringRegExp($sRangeOrRowStart, "[A-Z,a-z]", 0) Then
If $sRangeOrRowStart < 1 Then Return SetError(2, 0, 0)
If $iColStart < 1 Then Return SetError(2, 1, 0)
If $iRowEnd < $sRangeOrRowStart Then Return SetError(3, 0, 0)
If $iColEnd < $iColStart Then Return SetError(3, 1, 0)
With $oExcel.ActiveSheet
.Range(.Cells($sRangeOrRowStart, $iColStart), .Cells($iRowEnd, $iColEnd) ).NumberFormat = $sFormat
EndWith
Return 1
Else
$oExcel.ActiveSheet.Range($sRangeOrRowStart).NumberFormat = $sFormat
Return 1
EndIf
EndFunc ;==>_ExcelNumberFormat
Re: [..] Mise en forme conditionnelle sous Excel
Posté : lun. 19 oct. 2015 14:44
par Hugues
Salut,
Quand tu regardes mon fichier Excel joint, il y a la mise en forme que je désire ^^. Ce n'est pas un problème de mise en forme de cellule... ^^
Si tu copies les fichiers joints et que tu lances mon code, tu verras qu'il copie et colle ligne à ligne les données que je veux récupérer.
Moi je veux que si les points de mesure de la ligne suivante correspondent aux points de mesure précedents, il supprime la ligne des noms des points de mesures (pas les valeurs ^^).
Voilà, je sais pas si j'ai été clair dans mes explications lol.
Je peux pas tester ton code car je viens de changer de PC et j'ai pô Excel d'installé..
Merci.
Re: [..] Mise en forme conditionnelle sous Excel
Posté : lun. 19 oct. 2015 16:46
par Hugues
Voici mon fichier excel généré par mon code:
http://www.cjoint.com/c/EJtoSityv0I
et je voudrais obtenir comme resultat:
http://www.cjoint.com/c/EJqmwyCBghI

Re: [..] Mise en forme conditionnelle sous Excel
Posté : jeu. 22 oct. 2015 12:37
par Hugues
Personne pour me donner un p'ti coup de patte?

Re: [..] Mise en forme conditionnelle sous Excel
Posté : mer. 28 oct. 2015 14:14
par Hugues
Any idea?

Car il ne me reste plus que se problème pour clore mon projet...
J'ai beau tourné le problème dans tout les sens, je ne parviens pas à faire ce que je désire...
Re: [..] Mise en forme conditionnelle sous Excel
Posté : mer. 28 oct. 2015 15:50
par Oversid3
Voila qui devrait faire l'affaire, il manque juste un peu de bidouillage a faire pour le saut de ligne
► Afficher le texte
Code : Tout sélectionner
#include <ArrayEx.au3>
#include <File.au3>
#include <Excel.au3>
Global $TestNom=""
Global $ExcelRowStart = 3, $aArray, $Unity
_FONCTION_TEST()
Func _FONCTION_TEST()
$aArray = _FileListToArray(@ScriptDir&"\Test\", "*", 1)
;_ArrayDisplay($aArray)
Local $oAppl = _Excel_Open()
Global $oWorkbook = _Excel_BookNew($oAppl)
If @error Then
MsgBox(64, "", "Error creating the new workbook.")
_Excel_Close($oAppl)
EndIf
$oWorkbook.sheets("Feuil1").Range("A2").Value = "Nom fichier"
$oWorkbook.sheets("Feuil1").Range("B2").Value = "Point de sertissage"
$oWorkbook.sheets("Feuil1").Range("C2").Value = "Référence"
$oWorkbook.sheets("Feuil1").Range("D2").Value = "Date"
$oWorkbook.sheets("Feuil1").Range("E2").Value = "Heure"
$oWorkbook.ActiveSheet.Range("A2:R2").Font.Bold = True
$oWorkbook.ActiveSheet.Range("G1:R1").Font.Bold = True
For $i = 1 To UBound($aArray) - 1
ConsoleWrite($aArray[$i]&@CRLF)
Global $DummyFile = $aArray[$i]
_ReadFile($DummyFile, $i)
Next
$oWorkbook.ActiveSheet.Columns("A:R").AutoFit
EndFunc
Func _ReadFile($DummyFile, $i)
Local $hFileRead = FileRead(@ScriptDir&"\Test\" & $DummyFile)
;~ Msgbox(1,"test",$hFileRead)
Local $aString2 = _StringToArray2D($hFileRead, @CRLF, ";", 1)
$aString2[0][0] = StringReplace($aString2[0][0], " ", "")
Local $aSplit = StringSplit($aString2[0][0], "'")
Local $aSplitDateTime = StringSplit($aString2[1][0], " ")
Local $iIndex = _ArraySearch($aString2, "")
For $x = UBound($aSplit) - 1 To 0 Step - 1
If $aSplit[$x] Then
Else
_ArrayDelete($aSplit, $x)
EndIf
Next
;~ _ArrayDisplay($aString2)
If $aSplit[1]=$TestNom Then
For $a = 5 To $iIndex - 1
;### Nom du fichier, etc...
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 1).Value = StringReplace($aArray[$i], "'", "")
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 2).Value = $aSplit[1]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 3).Value = $aSplit[2]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 4).Value = StringReplace($aSplitDateTime[1], "'", "")
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 5).Value = StringReplace($aSplitDateTime[2], "'", "")
;### Fin Nom du fichier, etc...
;### Valeur points de mesures
If StringInStr($aString2[$a][0], "nicht") Then
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $a + 2).Value = "n.a"
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $a + 2).Font.ColorIndex = 3
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $a + 2).Font.Bold = True
Else
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $a + 2).Value = $aString2[$a][1]
EndIf
;### Fin valeur points de mesures
$TestNom=$aSplit[1]
Next
Else
For $a = 5 To $iIndex - 1
;### Nom du fichier, etc...
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 1).Value = StringReplace($aArray[$i], "'", "")
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 2).Value = $aSplit[1]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 3).Value = $aSplit[2]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 4).Value = StringReplace($aSplitDateTime[1], "'", "")
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 5).Value = StringReplace($aSplitDateTime[2], "'", "")
;### Fin Nom du fichier, etc...
;### Points de mesures
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart - 1, $a + 2).Value = StringReplace(StringReplace(StringReplace(StringReplace($aString2[$a][0], "'", ""), "=", ""), "nicht auswertbar", ""), " ", "")
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart - 1, $a + 2).Font.Bold = True
;### Fin points de mesures
;### Valeur points de mesures
If StringInStr($aString2[$a][0], "nicht") Then
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $a + 2).Value = "n.a"
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $a + 2).Font.ColorIndex = 3
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $a + 2).Font.Bold = True
Else
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $a + 2).Value = $aString2[$a][1]
EndIf
;### Fin valeur points de mesures
$TestNom=$aSplit[1]
Next
Endif
FileClose($hFileRead)
$ExcelRowStart+=2 ;ICI INCREMENTATION
$aSplit = ""
EndFunc
Re: [..] Mise en forme conditionnelle sous Excel
Posté : jeu. 29 oct. 2015 14:38
par Hugues
Salut, merci ^^ mais c'est pas tout à fait ça encore...
En fait, tu fais le tri avec $Split, ce qui correspond au point de sertissage, moi je voudrais que le check se fasse sur le nom des points de mesure:
Sant Fantgr Santgr Mgrad Fantgr etc...
Re: [..] Mise en forme conditionnelle sous Excel
Posté : jeu. 29 oct. 2015 14:44
par Oversid3
Ah ok je vois, si il y a exactement les meme points de mesure d'un fichier a l'autre on garde les "titres" ?
C'est bien ca ?
Re: [..] Mise en forme conditionnelle sous Excel
Posté : jeu. 29 oct. 2015 15:10
par Hugues
En gros c'est ça.
Regarde les 2 fichiers excel que j'ai joint precedemment, tu comprendras tout de suite. ^^
Re: [..] Mise en forme conditionnelle sous Excel
Posté : jeu. 29 oct. 2015 15:25
par Oversid3
Ok je fouille et test dans un coin de l'écran.
Mais je donne déjà ma piste, peut-etre tu aura le temps de l'implementer avant moi
A chaque lecture d'un fichier, utiliser les points de mesure pour créer un chaine unique qui les concatenes
Code : Tout sélectionner
Local $test=StringReplace(StringReplace(StringReplace(StringReplace($aString2[$a][0], "'", ""), "=", ""), "nicht auswertbar", ""), " ", "")
$concat &= $test
Et donc utiliser cette chaine unique pour la comparer avec la suivante pour en déduire si on ecrit ou non.
Il faut juste revoi un peu la logique de ton code et ajouter cette fonction justement de concatenation et de comparatif avant d'ecrire, mais voila l'idée.
Re: [..] Mise en forme conditionnelle sous Excel
Posté : jeu. 29 oct. 2015 15:35
par Hugues
Oui, c'est ce que j'ai commencé à faire avant que tu postes lol.
Après il faut que je l'adapte car mes fichiers lus n'ont pas tous excatement la meme mise en forme à cause des versions de software des machines ^^
Re: [..] Mise en forme conditionnelle sous Excel
Posté : jeu. 29 oct. 2015 15:49
par walkson
Bonjour,
Votre problème n'est pas si évident !
J'essayerais de faire un array global avec en première colonne, les noms des valeurs concatenés et en deuxième valeur le nombre de colonnes à insérer (pour faciliter la recherche)
J'écris à chaque ligne les valeurs et les noms des valeurs (une ligne par fichier)
Si les nombre de colonnes augmente, faire un Redim (ou faire un array maxi si vous le connaissez)
Je fais un ArraySort sur la première colonne puis je récupère les données pour les écrire sur Excel en comparant la valeur concatenée avec la précédente. Si elle existe, je ne récupère pas les noms des mesures mais son chiffre
En espérant été assez clair ...
Re: [..] Mise en forme conditionnelle sous Excel
Posté : jeu. 29 oct. 2015 16:03
par Oversid3
Dans les deux cas il faut revoir le déroulement du script pour avoir 2 parties :
Analyse
Ecriture
Mais j'aime bien l'idée de faire un tableau et de trier dedans, c'est plus propre

Re: [..] Mise en forme conditionnelle sous Excel
Posté : jeu. 29 oct. 2015 18:43
par walkson
Après, il y a aussi la solution excel en modifiant votre tableau de départ et en appliquant un trie suivi d'un nettoyage des doublons.
Dans l'exemple ci-dessous, les noms des données et leur valeur (soit 2 lignes) sont reconnus par la date et l'heure car vos données sont sous un couple de lignes. Le trie que j'ai effectué, est sur les colonnes A, E,F et D. Il ne reste plus qu'à supprimer les doublons et les valeurs devenues inutiles par une série de boucles.
Vous remarquerez que j'ai changé le format date. Excel est une vieille dame qui a du mal à reconnaitre certains formats...
Bon, j'avoue ne pas avoir trop approfondi le sujet mais ce peut être une piste
Re: [..] Mise en forme conditionnelle sous Excel
Posté : ven. 30 oct. 2015 08:03
par Hugues
Bonjour, merci à tous pour vos réponses.
Il est vrai que le top serait de tout mettre dans un tableau et de coller dans Excel car avec mon code actuel, le temps de déroulement est long...
Je lis les fichiers via FTP, traite les données (une multitudes de boucles car mes fichiers n'ont pas tous la même mise en forme) et je peux avoir jusqu'à plus de 400 fichiers à lire...
Bref...
Re: [..] Mise en forme conditionnelle sous Excel
Posté : ven. 30 oct. 2015 16:08
par Oversid3
Je n'ai pas le temps de finir (et je n'y replancherai pas avant Lundi ou Mardi) donc je te laisse mon avancée :
Mais donc tu verra dans l'idée, j'ai créer un tableau avec toutes les infos.
Je me sert ensuite de ce tableau pour faire la logique d'ecriture dans Excel.
► Afficher le texte
Code : Tout sélectionner
#include <ArrayEx.au3>
#include <File.au3>
#include <Excel.au3>
Global $TestNom=""
Global $Increm=""
Global $CheckMesure=""
Global $ExcelRowStart = 3, $aArray, $Unity
Global $TableauSortie[0][15]
_FONCTION_TEST()
Func _FONCTION_TEST()
$aArray = _FileListToArray(@ScriptDir&"\Test\", "*", 1)
;_ArrayDisplay($aArray)
Redim $TableauSortie[Ubound($aArray,1)*2][50]
_Arraydisplay($TableauSortie)
Local $oAppl = _Excel_Open()
Global $oWorkbook = _Excel_BookNew($oAppl)
If @error Then
MsgBox(64, "", "Error creating the new workbook.")
_Excel_Close($oAppl)
EndIf
$oWorkbook.sheets("Feuil1").Range("A2").Value = "Nom fichier"
$oWorkbook.sheets("Feuil1").Range("B2").Value = "Point de sertissage"
$oWorkbook.sheets("Feuil1").Range("C2").Value = "Référence"
$oWorkbook.sheets("Feuil1").Range("D2").Value = "Date"
$oWorkbook.sheets("Feuil1").Range("E2").Value = "Heure"
$oWorkbook.ActiveSheet.Range("A2:R2").Font.Bold = True
$oWorkbook.ActiveSheet.Range("G1:R1").Font.Bold = True
For $i = 1 To UBound($aArray) - 1
ConsoleWrite($aArray[$i]&@CRLF)
Global $DummyFile = $aArray[$i]
_ReadFile($DummyFile, $i)
Next
$oWorkbook.ActiveSheet.Columns("A:R").AutoFit
_Arraydisplay($TableauSortie)
_ExcelWrite()
EndFunc
Func _ReadFile($DummyFile, $i)
Local $hFileRead = FileRead(@ScriptDir&"\Test\" & $DummyFile)
;~ Msgbox(1,"test",$hFileRead)
Local $aString2 = _StringToArray2D($hFileRead, @CRLF, ";", 1)
$aString2[0][0] = StringReplace($aString2[0][0], " ", "")
Local $aSplit = StringSplit($aString2[0][0], "'")
Local $aSplitDateTime = StringSplit($aString2[1][0], " ")
Local $iIndex = _ArraySearch($aString2, "")
For $x = UBound($aSplit) - 1 To 0 Step - 1
If $aSplit[$x] Then
Else
_ArrayDelete($aSplit, $x)
EndIf
Next
;~ _ArrayDisplay($aString2)
$TableauSortie[$i-1][1]=$iIndex
$TableauSortie[$i-1][2]= StringReplace($aArray[$i], "'", "")
$TableauSortie[$i-1][3]=$aSplit[1]
$TableauSortie[$i-1][4]=$aSplit[2]
$TableauSortie[$i-1][5]=StringReplace($aSplitDateTime[1], "'", "")
$TableauSortie[$i-1][6]=StringReplace($aSplitDateTime[2], "'", "")
For $a=5 To $iIndex -1
$TableauSortie[$i-1][$a+2]=StringReplace(StringReplace(StringReplace(StringReplace($aString2[$a][0], "'", ""), "=", ""), "nicht auswertbar", ""), " ", "")
$TableauSortie[$i-1][0]&=StringReplace(StringReplace(StringReplace(StringReplace($aString2[$a][0], "'", ""), "=", ""), "nicht auswertbar", ""), " ", "")
If StringInStr($aString2[$a][0], "nicht") Then
$TableauSortie[$i-1][$a+8] = "n.a"
$TableauSortie[$i-1][$a+8] = 3
$TableauSortie[$i-1][$a+8] = True
Else
$TableauSortie[$i-1][$a+8] = $aString2[$a][1]
EndIf
Next
FileClose($hFileRead)
EndFunc
Func _ExcelWrite()
For $i=1 to UBound($aArray) - 1
If $i>2 Then
If $TableauSortie[$i-1][1]=$TableauSortie[$i-2][1] Then
$ExcelRowStart+=1
;### Nom du fichier, etc...
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 1).Value = $TableauSortie[$i-1][2]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 2).Value = $TableauSortie[$i-1][3]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 3).Value = $TableauSortie[$i-1][4]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 4).Value = $TableauSortie[$i-1][5]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 5).Value = $TableauSortie[$i-1][6]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 6).Value = $TableauSortie[$i-1][1]
;### Fin Nom du fichier, etc...
For $j=6 to $TableauSortie[$i-1][1]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $j).Value = $TableauSortie[$i-1][$j]
Next
Else
$ExcelRowStart+=2
;### Nom du fichier, etc...
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 1).Value = $TableauSortie[$i-1][2]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 2).Value = $TableauSortie[$i-1][3]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 3).Value = $TableauSortie[$i-1][4]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 4).Value = $TableauSortie[$i-1][5]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 5).Value = $TableauSortie[$i-1][6]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 6).Value = $TableauSortie[$i-1][1]
;### Fin Nom du fichier, etc...
For $j=6 to $TableauSortie[$i-1][1]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $j).Value = $TableauSortie[$i-1][$j]
Next
Endif
Else
$ExcelRowStart+=2
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 1).Value = $TableauSortie[$i-1][2]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 2).Value = $TableauSortie[$i-1][3]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 3).Value = $TableauSortie[$i-1][4]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 4).Value = $TableauSortie[$i-1][5]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 5).Value = $TableauSortie[$i-1][6]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 6).Value = $TableauSortie[$i-1][1]
;### Fin Nom du fichier, etc...
For $j=6 to $TableauSortie[$i-1][1]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $j).Value = $TableauSortie[$i-1][$j]
Next
Endif
Next
EndFunc
Re: [..] Mise en forme conditionnelle sous Excel
Posté : ven. 30 oct. 2015 17:00
par Oversid3
Finalement version finie
Il reste cependant a jouer avec les ExcelRowStart encore un peu mais ca m'ennerve
► Afficher le texte
Code : Tout sélectionner
#include <ArrayEx.au3>
#include <File.au3>
#include <Excel.au3>
Global $TestNom=""
Global $Increm=""
Global $CheckMesure=""
Global $ExcelRowStart = 3, $aArray, $Unity
Global $TableauSortie[0][15]
_FONCTION_TEST()
Func _FONCTION_TEST()
$aArray = _FileListToArray(@ScriptDir&"\Test\", "*", 1)
;_ArrayDisplay($aArray)
Redim $TableauSortie[Ubound($aArray,1)*2][50]
_Arraydisplay($TableauSortie)
Local $oAppl = _Excel_Open()
Global $oWorkbook = _Excel_BookNew($oAppl)
If @error Then
MsgBox(64, "", "Error creating the new workbook.")
_Excel_Close($oAppl)
EndIf
$oWorkbook.sheets("Feuil1").Range("A2").Value = "Nom fichier"
$oWorkbook.sheets("Feuil1").Range("B2").Value = "Point de sertissage"
$oWorkbook.sheets("Feuil1").Range("C2").Value = "Référence"
$oWorkbook.sheets("Feuil1").Range("D2").Value = "Date"
$oWorkbook.sheets("Feuil1").Range("E2").Value = "Heure"
$oWorkbook.ActiveSheet.Range("A2:R2").Font.Bold = True
$oWorkbook.ActiveSheet.Range("G1:R1").Font.Bold = True
For $i = 1 To UBound($aArray) - 1
ConsoleWrite($aArray[$i]&@CRLF)
Global $DummyFile = $aArray[$i]
_ReadFile($DummyFile, $i)
Next
$oWorkbook.ActiveSheet.Columns("A:R").AutoFit
_Arraydisplay($TableauSortie)
_ExcelWrite()
EndFunc
Func _ReadFile($DummyFile, $i)
Local $hFileRead = FileRead(@ScriptDir&"\Test\" & $DummyFile)
;~ Msgbox(1,"test",$hFileRead)
Local $aString2 = _StringToArray2D($hFileRead, @CRLF, ";", 1)
$aString2[0][0] = StringReplace($aString2[0][0], " ", "")
Local $aSplit = StringSplit($aString2[0][0], "'")
Local $aSplitDateTime = StringSplit($aString2[1][0], " ")
Local $iIndex = _ArraySearch($aString2, "")
For $x = UBound($aSplit) - 1 To 0 Step - 1
If $aSplit[$x] Then
Else
_ArrayDelete($aSplit, $x)
EndIf
Next
;~ _ArrayDisplay($aString2)
$TableauSortie[$i-1][1]=$iIndex
$TableauSortie[$i-1][2]= StringReplace($aArray[$i], "'", "")
$TableauSortie[$i-1][3]=$aSplit[1]
$TableauSortie[$i-1][4]=$aSplit[2]
$TableauSortie[$i-1][5]=StringReplace($aSplitDateTime[1], "'", "")
$TableauSortie[$i-1][6]=StringReplace($aSplitDateTime[2], "'", "")
For $a=5 To $iIndex -1
$TableauSortie[$i-1][$a+2]=StringReplace(StringReplace(StringReplace(StringReplace($aString2[$a][0], "'", ""), "=", ""), "nicht auswertbar", ""), " ", "")
$TableauSortie[$i-1][0]&=StringReplace(StringReplace(StringReplace(StringReplace($aString2[$a][0], "'", ""), "=", ""), "nicht auswertbar", ""), " ", "")
If StringInStr($aString2[$a][0], "nicht") Then
$TableauSortie[$i-1][$a+($iIndex-3)] = "n.a"
$TableauSortie[$i-1][$a+($iIndex-3)] = 3
$TableauSortie[$i-1][$a+($iIndex-3)] = True
Else
$TableauSortie[$i-1][$a+($iIndex-3)] = $aString2[$a][1]
EndIf
Next
FileClose($hFileRead)
EndFunc
Func _ExcelWrite()
For $i=1 to UBound($aArray) - 1
If $i>2 Then
If $TableauSortie[$i-1][1]=$TableauSortie[$i-2][1] Then
$ExcelRowStart+=1
;### Nom du fichier, etc...
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 1).Value = $TableauSortie[$i-1][2]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 2).Value = $TableauSortie[$i-1][3]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 3).Value = $TableauSortie[$i-1][4]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 4).Value = $TableauSortie[$i-1][5]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 5).Value = $TableauSortie[$i-1][6]
;~ $oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 6).Value = $TableauSortie[$i-1][1]
;### Fin Nom du fichier, etc...
;~ For $j=6 to $TableauSortie[$i-1][1]
;~ $oWorkbook.sheets("Feuil1").Cells($ExcelRowStart-1, $j).Value = $TableauSortie[$i-1][$j]
;~ Next
Local $ligne=7
For $k=($TableauSortie[$i-1][1])+2 to Ubound($TableauSortie,2)-2
If $TableauSortie[$i-1][$k]<>"" Then
ConsoleWrite($ligne&@CRLF)
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $ligne).Value = $TableauSortie[$i-1][$k]
$Ligne=$Ligne+1
EndIf
Next
Else
$ExcelRowStart+=2
;### Nom du fichier, etc...
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 1).Value = $TableauSortie[$i-1][2]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 2).Value = $TableauSortie[$i-1][3]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 3).Value = $TableauSortie[$i-1][4]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 4).Value = $TableauSortie[$i-1][5]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 5).Value = $TableauSortie[$i-1][6]
;~ $oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 6).Value = $TableauSortie[$i-1][1]
;### Fin Nom du fichier, etc...
For $j=7 to $TableauSortie[$i-1][1]+1
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart-1, $j).Value = $TableauSortie[$i-1][$j]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart-1, $j).Font.Bold = True
Next
Local $ligne=7
For $k=($TableauSortie[$i-1][1])+2 to Ubound($TableauSortie,2)-2
If $TableauSortie[$i-1][$k]<>"" Then
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $ligne).Value = $TableauSortie[$i-1][$k]
$Ligne=$Ligne+1
EndIf
Next
Endif
Else
;~ $ExcelRowStart+=2
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 1).Value = $TableauSortie[$i-1][2]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 2).Value = $TableauSortie[$i-1][3]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 3).Value = $TableauSortie[$i-1][4]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 4).Value = $TableauSortie[$i-1][5]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 5).Value = $TableauSortie[$i-1][6]
;~ $oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, 6).Value = $TableauSortie[$i-1][1]
;### Fin Nom du fichier, etc...
For $j=7 to $TableauSortie[$i-1][1]+1
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart-1, $j).Value = $TableauSortie[$i-1][$j]
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart-1, $j).Font.Bold = True
Next
Local $ligne=7
For $k=($TableauSortie[$i-1][1])+2 to Ubound($TableauSortie,2)-2
If $TableauSortie[$i-1][$k]<>"" Then
$oWorkbook.sheets("Feuil1").Cells($ExcelRowStart, $ligne).Value = $TableauSortie[$i-1][$k]
$Ligne=$Ligne+1
EndIf
Next
$ExcelRowStart+=2
Endif
Next
EndFunc
Re: [..] Mise en forme conditionnelle sous Excel
Posté : mar. 03 nov. 2015 08:20
par Hugues
Ok, merci. Il faut que je l'adapte à mon autre style de fichier car la mise en forme du tableau de sortie n'est pas correct...
Pour le moment je galère avec la suppression de valeur dans un tableau... Je ne reussi pas à le redimensionner...
Je fais un _ArrayFindAll() pour trouver les fichiers que je veux supprimer, ensuite une boucle For...Next pour supprimmer, mais ca bloque au niveau du ReDim...