Question [Résolu] Fusion fichier Excel avec Powershell

Plus d'informations
il y a 7 ans 3 mois #28331 par Hicham Madini
oui ben l'idée c'est de tout copier sur la feuille \"Suivi Utilisation Applications\" et aprés tu fais un tri. (c'est juste mon idée)
tu peux aussi faire un tri des deux fihciers directement aprés de leur ouverture et aprés tu commences la comparaison et le copier/coller.

Bon je t'ai fait une partie, il te reste à copier les élements qui coincident et de coller leurs données dans les colonnes V et W.
Fait attention à ton fichier destination, il faut suprimer les lignes de 171 à 190 (mal formater) avant de lancer le script! J'ai utilisé ton fichier initial sans rien changer!

[code:1]Function Get-WorkbookData($Workbook, $Row) {
$Workbook.Activate()

$Logiciel = $Workbook.ActiveSheet.Range(\"A\" + $Row).Text
while ($Logiciel.Length) {
$obj = @{
\"Logiciel\" = $Logiciel;
}
New-Object –Typename PSObject –Prop $obj
$Row++
$j = $Row
$Logiciel = $Workbook.ActiveSheet.Range(\"A\" + $Row).Text -replace '(^\s+|\s+$)','' -replace '\s+',' '
}
}

Function Mark-Logiciel($Workbook, $LogicielToMark) {
$Workbook.Activate()
$lastCol = $ExcelWorkbookOld.Worksheets.item(1).UsedRange.columns.count + 1
$Row = 1
$Logiciel = $Workbook.ActiveSheet.Range(\"A\" + $Row).Text
while ($Logiciel.Length) {
if ($LogicielToMark -contains $Logiciel) {
$Workbook.Activate()
$lago = $Workbook.ActiveSheet.Range(\"A\" + $Row).copy()
$Workbook.ActiveSheet.Range(\"A\" + $Row).Cells.Font.ColorIndex = 3
$ExcelWorkbookOld.Activate()
$lastRow = $ExcelWorkbookOld.Worksheets.item(1).UsedRange.rows.count + 1
$ExcelWorkbookOld.Worksheets.item(1).Range(\"A\" + $lastRow).select()
$ExcelWorkbookOld.ActiveSheet.Paste()
$lago1 = $Workbook.ActiveSheet.Range(\"B\" + $Row).copy()
$ExcelWorkbookOld.Worksheets.item(1).Cells($lastRow , $lastCol - 1).select()
$ExcelWorkbookOld.ActiveSheet.Paste()
$lago2 = $Workbook.ActiveSheet.Range(\"C\" + $Row).copy()
$ExcelWorkbookOld.Worksheets.item(1).Cells($lastRow , $lastCol - 2).select()
$ExcelWorkbookOld.ActiveSheet.Paste()

}

$Row++
$Logiciel = $Workbook.ActiveSheet.Range(\"A\" + $Row).Text
}
}

Add-Type -AssemblyName \"Microsoft.Office.Interop.Excel\" | out-null

# Ouvrir Excel
$ExcelApplication = New-Object -ComObject \"Excel.Application\"
$ExcelApplication.Visible = $true

# ouvrir les deux fichiers à comparer

$ExcelWorkbookOld = $ExcelApplication.Workbooks.Open(\"DESTINATION2.xlsx\")
$ExcelWorkbookNew = $ExcelApplication.Workbooks.Open(\"SOURCE3.xlsx\")

$rng1=\"T1:U2\" # l'entête à copier
$rng2=\"V1:W2\"
$xl = new-object -c excel.application
$ExcelWorkbookOld.Activate()
$rng = $ExcelWorkbookOld.Worksheets.item(1).Range($rng1).Copy()
$x=$ExcelWorkbookOld.Worksheets.item(1).Range($rng2).Select()
$ExcelWorkbookOld.Worksheets.item(1).Paste()
$x=$ExcelWorkbookOld.Worksheets.item(1).Range(\"V1\").value =\"Janver 19\"


# recupérer les données des colonnes à comparer
$OldData = Get-WorkbookData -Workbook $ExcelWorkbookOld 3
$NewData = Get-WorkbookData -Workbook $ExcelWorkbookNew 2

# comparer les données récuperer
$Comparison = Compare-Object -ReferenceObject $NewData -DifferenceObject $OldData -Property \"Logiciel\" -IncludeEqual:$false


$LogicielToMark = @()
$Comparison | %{
if ($_.SideIndicator -eq \"<=\") {
$LogicielToMark += $_.Logiciel
}
}

Mark-Logiciel -Workbook $ExcelWorkbookNew -LogicielToMark $LogicielToMark

#$ExcelApplication.Quit()[/code:1]

Bonne chance pour le reste :D<br><br>Message édité par: hichammadd, à: 26/02/19 10:33

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 3 mois #28332 par Atou
Réponse de Atou sur le sujet Re:Fusion ficier Excel avec Powershell
Je te remercie beaucoup pour ton aide, je vais essayer de finir ce script dans les jours à venir lorsque j'aurais un peu de temps libre.

Je te retournerais le script si j'arrive à le terminer.

Merci beaucoup ;)

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 3 mois #28333 par Atou
Réponse de Atou sur le sujet Re:Fusion ficier Excel avec Powershell
J'aurais juste un dernier service à te demander,est ce que tu pourrais commenter un peu ton code parce que je suis un peu dépasser par rapport à ton niveau. :pinch:

Merci d'avance ;)<br><br>Message édité par: Atou45, à: 25/02/19 12:53

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 2 mois #28340 par Atou
Réponse de Atou sur le sujet Re:Fusion ficier Excel avec Powershell
J'ai commencer à plancher sur ton script, je me demandais, est ce que je peux récupérer cette ligne pour faire ma comparaison pour ajouter les temps d'utilisation et les nombres de lancement :

if ($UsersToMark -contains $Logiciel) {

Si je comprends bien cela correspond à : Si UserToMark contient Logiciel on exécute la suite.

Ce que je ne comprend pas c'est que cette partie fait l'inverse, si je comprend bien le code qui suit cette partie permet d'ajouter les logiciel manquant.

Bon la je t'avoue que c'est encore un peu le blocage ...<br><br>Message édité par: Atou45, à: 26/02/19 10:42

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 2 mois #28342 par Hicham Madini
oui mais il faut faire attention à l'indicateur!

Connexion ou Créer un compte pour participer à la conversation.

Plus d'informations
il y a 7 ans 2 mois #28343 par Atou
Réponse de Atou sur le sujet Re:Fusion ficier Excel avec Powershell
Ah oui d'accord j'ai bien compris pour le SideIndicator, dans un sens sa veut dire que le logiciel n'est pas présent et dans l'autre il y est.

Sa va être compliqué pour la suite mais bon je vais essayer de mon débrouiller je te dirais ce que sa donne demain je pense, je vais essayer de résoudre mon problème aujourd'hui.

Connexion ou Créer un compte pour participer à la conversation.

Temps de génération de la page : 0.041 secondes
Propulsé par Kunena