Page 1 sur 1
[..] Excel colonne et Array
Posté : dim. 20 déc. 2015 07:15
par InfinityHell
Bonjour,
je cherche un moyen de stocker les donnée d'une colonne d'un fichier xls dans un array et faire en sorte que toutes les donnée soit trier de manière a ne pas avoir de doublon pour ensuite les utiliser dans une comboBox
si vous demandez pourquoi Excel parce que ça sert dans le cadre d'un logiciel de gestion pour ranger de photo ca peut paraitre blizzard mais si je fessait tout le détail on y seras encore la semaine prochaine
Re: [..] Excel colonne et Array
Posté : dim. 20 déc. 2015 11:08
par mikell
_Excel_RangeRead , _ArrayUnique , _ArraySort
Et tant que les règles du forum sont respectées les raisons ne nous regardent pas

Re: [..] Excel colonne et Array
Posté : dim. 20 déc. 2015 21:53
par walkson
Bonsoir,
Une solution sans utiliser un array
► Afficher le texte
Code : Tout sélectionner
#include <Array.au3>
#include <ExcelConstants.au3>
Global Const $xlTopToBottom = 1
Global Const $xlPinYin = 1
Global Const $xlUp = -4162
$path = @ScriptDir & "\AA.xlsx";chemin excel
$lire = 1;feuil 1
Global $oExcel = ObjCreate("Excel.Application")
If @error Then Exit
$oExcel.WorkBooks.Open($path, Default, Default, Default, Default, Default)
$oExcel.Visible = 1
$oExcel.ActiveWorkbook.Sheets($lire).cells(1,1).Select;sélection Feuil1
$NBrows = $oExcel.ActiveCell.CurrentRegion.Rows.Count
$oExcel.ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add ($oExcel.Range("A1"), _
$xlSortOnValues, $xlAscending, $xlSortNormal)
With $oExcel.ActiveWorkbook.Worksheets("Feuil1").Sort
.SetRange ($oExcel.Range($oExcel.Activesheet.cells(1,1),$oExcel.Activesheet.cells($NBrows,1)))
.Header = $xlGuess
.MatchCase = False
.Orientation = $xlTopToBottom
.SortMethod = $xlPinYin
.Apply
EndWith
$oExcel.ActiveCell.Offset($NBrows - 1,0).Range("A1").Select
For $i = 1 To $NBrows
If $oExcel.Activecell.Value = $oExcel.Activecell.Offset(-1,0).Value Then
$oExcel.Activecell.EntireRow.Cells().Select
$oExcel.Selection.Delete($xlup)
EndIf
$oExcel.ActiveCell.Offset(- 1,0).Range("A1").Select
ConsoleWrite( $oExcel.Activecell.Address() & @CR)
If $oExcel.Activecell.Address() = "$A$1" Then ExitLoop
Next
Local $lecture = ""
For $j = 1 To $NBrows ;boucle les lignes
$lecture &= $oExcel.Activesheet.cells($j,1).Value & "|"
Next
$oExcel.ActiveWorkbook.Saved = True
$oExcel.WorkBooks.close
;================================================================================================
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $Form1 = GUICreate("", 379, 118, 192, 124)
Global $Combo1 = GUICtrlCreateCombo("", 56, 24, 161, 25)
GUICtrlSetData(-1,$lecture)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Re: [..] Excel colonne et Array
Posté : lun. 21 déc. 2015 02:09
par InfinityHell
La solution de Wilson ne fonctionne pas chez moi et j'ai un problème avec tout les script trouvé sur le net avec des erreur du type 'impossible de créé un objet excel' un truc du genre
pour etre precis pour wilson ton if @error then exit s'execute directement j'ai commenter la ligne et il me dit que "(10) : ==> Variable must be of type "Object".:"
Edit ca fonctionne mais pas avec openOffice il faut absolument Microsoft office
Re: [..] Excel colonne et Array
Posté : lun. 21 déc. 2015 09:33
par InfinityHell
Si je souhaite lire la colonne B avec le code citer au dessus je suis censer procéder comment j'ai essayer de remplacer tout les A1 par B1 mais ça crée des erreur et j'arrive pas a trouver la doc de excel pour l'autoIT
bon en retirant le code servant a ranger les colonnes dans le Excel et en mettant B1 partout le curseur fait un peut ce que il veut il se balade en diagonale de A a D Enfin bref il devient fou si je repasse a A1 c est ok
il y'a une valeur a modifier qui doit m’échapper mais je trouver que la doc ExcelUDF et ça ressemble pas du tout au script au dessus =(
Re: [..] Excel colonne et Array
Posté : lun. 21 déc. 2015 15:27
par walkson
Bonjour,
Si vous parlez d'Excel, ce ne peut pas être openOffice
J'ai simplifié le script pour aller sur la colonne B. J'ai mis un Sleep() pour visualiser mais il est inutile.
Pour rendre le classeur invisible, commentez ou supprimez $oExcel.Visible = 1
Enfin si la première ligne comprend les titres, il faut modifier .Header = $xlYes et ajuster $NBrows pour ne pas prendre en compte la première ligne
C'est vrai que ma méthode n'aide pas beaucoup car elle n'utilise pas les includes Excel. C'est du pur VBA façon Autoit que vous retrouverez dans l'include (en plus simple

)
► Afficher le texte
Code : Tout sélectionner
#include <ExcelConstants.au3>
Global Const $xlTopToBottom = 1
Global Const $xlPinYin = 1
Global Const $xlUp = -4162
$path = @ScriptDir & "\AA.xlsx";chemin excel
$lire = 1;feuil 1
Global $oExcel = ObjCreate("Excel.Application")
If @error Then Exit
$oExcel.WorkBooks.Open($path, Default, Default, Default, Default, Default)
$oExcel.Visible = 1
$oExcel.ActiveWorkbook.Sheets($lire).cells(1,2).Select;sélection Feuil1
$NBrows = $oExcel.ActiveCell.CurrentRegion.Rows.Count
$oExcel.ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add ($oExcel.Range("B1"), _
$xlSortOnValues, $xlAscending, $xlSortNormal)
With $oExcel.ActiveWorkbook.Worksheets("Feuil1").Sort
.SetRange ($oExcel.Range($oExcel.Activesheet.cells(1,2),$oExcel.Activesheet.cells($NBrows,2)))
.Header = $xlGuess
.MatchCase = False
.Orientation = $xlTopToBottom
.SortMethod = $xlPinYin
.Apply
EndWith
$oExcel.ActiveWorkbook.Sheets($lire).Cells($NBrows - 1, 1).Select
For $i = 0 To $NBrows - 1
If $oExcel.Activecell.Value = $oExcel.Activecell.Offset(-1,0).Value Then
$oExcel.Activecell.EntireRow.Cells().Select
$oExcel.Selection.Delete($xlup)
EndIf
$oExcel.ActiveWorkbook.Sheets($lire).Cells($NBrows - $i, 2).Select
ConsoleWrite( $oExcel.Activecell.Address() & @CR)
If $oExcel.Activecell.Address() = "$B$1" Then ExitLoop
Sleep(1000)
Next
$oExcel.ActiveWorkbook.Sheets($lire).cells(1,2).Select
$NBrows = $oExcel.ActiveCell.CurrentRegion.Rows.Count
Local $lecture = ""
For $j = 1 To $NBrows ;boucle les lignes
$lecture &= $oExcel.Activesheet.cells($j,2).Value & "|"
Next
$oExcel.ActiveWorkbook.Saved = True
$oExcel.WorkBooks.close
;================================================================================================
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>
Global $Form1 = GUICreate("", 379, 118, 192, 124)
Global $Combo1 = GUICtrlCreateCombo("", 56, 24, 161, 25)
GUICtrlSetData(-1,$lecture)
GUISetState(@SW_SHOW)
While 1
$nMsg = GUIGetMsg()
Switch $nMsg
Case $GUI_EVENT_CLOSE
Exit
EndSwitch
WEnd
Re: [..] Excel colonne et Array
Posté : mar. 22 déc. 2015 09:00
par InfinityHell
Merci du coup de main c:
Re: [..] Excel colonne et Array
Posté : jeu. 24 déc. 2015 09:06
par InfinityHell
alors j'ai utilisé ton code en le clonant 3 fois une fonction par colonne mais dans le totale random j’obtiens cette erreur je précise que chaque fonction s exécute après la première
En gros quand on ferme le fichier excel a la fin de la fonction j’exécute la fonction suivante
la fonction A exécute la fonction B qui exécute la C
la fonction A elle est lancer au démarrage du logiciel après la sélection du fichier .XLS via FileOpenDialog
"chemin d acces quelquonque" (89) : ==> The requested action with this object has failed.:
$oExcel.ActiveWorkbook.Sheets($lire).cells(1,1).Select
$oExcel.ActiveWorkbook.Sheets($lire)^ ERROR
Re: [..] Excel colonne et Array
Posté : ven. 25 déc. 2015 12:51
par walkson
Bonjour,
Si vous avez
c'est que Excel ne trouve pas la feuille, vérifiez $lire qui peut être 1 ou 2 ou "Feuil1" etc...
Par contre, il y a un problème dans mon script, il faut rajouter $oExcel.Worksheets($lire).Select après $oExcel.Visible = 1 (au début) pour sélectionner la feuille voulue.
Aussi, si vous avez écrit votre script sous forme de fonction, il faut déclarer $lire en Global $lire = 1 (le problème vient peut être de là ?) ou bien de remplacer $lire par sa valeur
En espérant vous avoir aidé, bonnes fêtes de fin d'année
Re: [..] Excel colonne et Array
Posté : ven. 25 déc. 2015 12:56
par InfinityHell
apparemment j'ai plus cette erreur merci pour tous et bonne fête de fin d'année a vous aussi