Bon, donc voilà mon dernier script, encore fait pour le taf, encore dans une nouvelle boite
Son but est simple : me permettre de connaitre les quantités à dupliquer par référence dans un grand tableau de préparation de commande. Chaque cellule contient une et une seule référence, qui peut être répétée sans limite.
Voili voilou ! Si vous avez des axes d'amélioration, je suis preneur
; *************************************************************
; * COMPTAGE QUANTITES - ECRIT PAR GHOST LINE - 2010 *
; *************************************************************
; * Ce programme compte le nombre d'occurences d'une valeur *
; * dans un tableau donné et reporte valeurs et quantités *
; * dans un autre tableau. *
; *************************************************************
#include <ExcelCOM_UDF.au3>
$sFilePath1 = InputBox ("Calcul CD déstockage","Veuillez entrer le chemin d'accès complet au fichier de déstockage :",@DesktopDir&"\DestockageS")
If @error = 1 Then
Exit
EndIf
; reste à lancer automatique l'impression et à faire une mise en page potable et à faire une case à cocher en bout de ligne
$sFilePath2 = "c:\fichier_commande.xls"
$oFichierDestockage = _ExcelBookOpen($sFilePath1)
$oFichierCommande = _ExcelBookOpen($sFilePath2)
$colonne_debut_destockage = 18
$colonne_fin_destockage = 26
_ExcelSheetDelete($oFichierDestockage, 1)
_ExcelRowDelete($oFichierDestockage, 1, 2)
; On compte le nombre de lignes du tableau de destockage
Local $nb_ligne_destockage = $oFichierDestockage.ActiveSheet.UsedRange.Rows.Count
Local $nb_ligne_commande = 1
For $z = $colonne_debut_destockage to $colonne_fin_destockage
$colonne_destockage =$z
; on checke chaque cellule par colonne
For $i=1 to $nb_ligne_destockage
$sCellValue_destockage = _ExcelReadCell($oFichierDestockage, $i, $colonne_destockage)
; on vérifie que si cette valeur existe dans l'autre tableau
$valeur_existe = 0
For $j=1 to $nb_ligne_commande
$sCellValue_commande = _ExcelReadCell($oFichierCommande, $j, 1)
If $sCellValue_commande = $sCellValue_destockage and $sCellValue_commande <> "" Then
_ExcelWriteCell($oFichierCommande,(_ExcelReadCell($oFichierCommande, $j, 2))+1,$j, 2)
$valeur_existe = 1
EndIf
Next
; si elle n'existe pas, on la créé en fin de tableau
If $valeur_existe = 0 and $sCellValue_destockage <> "" Then
_ExcelWriteCell($oFichierCommande, $sCellValue_destockage,($j-1), 1)
_ExcelWriteCell($oFichierCommande, "1",($j-1), 2)
$nb_ligne_commande = $nb_ligne_commande +1
EndIf
Next
Next
_ExcelRowInsert($oFichierCommande, 1, 1)
$oFichierCommande.Application.Activesheet.Range("A1:C1").MergeCells = True
_ExcelWriteCell($oFichierCommande,$sFilePath1,1)
_ExcelPrintSheet($oFichierCommande, "Feuil1", 1, "", False)
_ExcelBookClose($oFichierCommande,0)
_ExcelBookClose($oFichierDestockage,0)
Ci joint les fichiers nécessaires pour faire les tests. Le fichier fichier_commande.xls est prévu dans le code pour être à la racine de C: , et le fichier destockage... .xls où vous voulez, mais de préférence sur le bureau. Ce fichier a été débarrassé de tout ce qu'il pourrait contenir de confidentiel, d'où son aspect dépouillé.
Hé, je t'avais dit qu'il fallait *adapter* à ton script _ExcelReadSheetToArray : Returned array has row count in [0][0] and column count in [0][1]
L'adaptation n'est pas indispensable à ton script mais c'est quand même plus propre