Question
[Résolu] Fusion fichier Excel avec Powershell
- Atou
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 65
- Remerciements reçus 0
il y a 7 ans 2 mois #28352
par Atou
Réponse de Atou sur le sujet Re:Fusion ficier Excel avec Powershell
J'ai essayer et non j'ai toujours la même erreur ...
Je ne comprend également pas ou est la partie du code qui permet de copier coller le temps d'utilisation et le nombre de lancement du logiciel ...
Je suis de plus en plus désespéré ...
Voilà tout mon code si sa peut vous aidez :
[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+',' '
}
}
#Fonction pour l'ajout des logiciels manquant
Function Mark-Users($Workbook, $UsersToMark) {
$Workbook.Activate()
$lastCol = $ExcelWorkbookOld.Worksheets.item(1).UsedRange.columns.count + 1
$Row = 1
$Logiciel = $Workbook.ActiveSheet.Range(\"A\" + $Row).Text
while ($Logiciel.Length) {
if ($UsersToMark -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
}
}
Function Mark-Logi($Workbook, $UsersToAtou) {
$Workbook.Activate()
$lastCol = $ExcelWorkbookOld.Worksheets.item(1).UsedRange.columns.count + 1
$Row = 1
$Logiciel = $Workbook.ActiveSheet.Range(\"A\" + $Row).Text
while ($Logiciel.Length){
if ($UsersToMark -eq $Logiciel){
$Workbook.Activate()
$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(\"E:\2K19\Scriptexcel\DESTINATION3.xlsx\"«»)
$ExcelWorkbookNew = $ExcelApplication.Workbooks.Open(\"E:\2K19\Scriptexcel\SOURCE3.xlsx\"«»)
#Copie de l'entête de base
$rng1=\"T1:U2\"
$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 =\"Janvier 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
$UsersToMark = @()
$Comparison | %{
if ($_.SideIndicator -eq \"<=\"«») {
$UsersToMark += $_.Logiciel
}
}
if ($_.SideIndicator -eq \"=>\"«»){
$UsersToAtou += $_.Logiciel
}
Mark-Users -Workbook $ExcelWorkbookNew -UsersToMark $UsersToMark
Mark-Logi -Workbook $ExcelWorkbookNew -UsersToMark $UsersToAtous
[/code:1]<br><br>Message édité par: Atou45, à: 26/02/19 14:49
Je ne comprend également pas ou est la partie du code qui permet de copier coller le temps d'utilisation et le nombre de lancement du logiciel ...
Je suis de plus en plus désespéré ...
Voilà tout mon code si sa peut vous aidez :
[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+',' '
}
}
#Fonction pour l'ajout des logiciels manquant
Function Mark-Users($Workbook, $UsersToMark) {
$Workbook.Activate()
$lastCol = $ExcelWorkbookOld.Worksheets.item(1).UsedRange.columns.count + 1
$Row = 1
$Logiciel = $Workbook.ActiveSheet.Range(\"A\" + $Row).Text
while ($Logiciel.Length) {
if ($UsersToMark -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
}
}
Function Mark-Logi($Workbook, $UsersToAtou) {
$Workbook.Activate()
$lastCol = $ExcelWorkbookOld.Worksheets.item(1).UsedRange.columns.count + 1
$Row = 1
$Logiciel = $Workbook.ActiveSheet.Range(\"A\" + $Row).Text
while ($Logiciel.Length){
if ($UsersToMark -eq $Logiciel){
$Workbook.Activate()
$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(\"E:\2K19\Scriptexcel\DESTINATION3.xlsx\"«»)
$ExcelWorkbookNew = $ExcelApplication.Workbooks.Open(\"E:\2K19\Scriptexcel\SOURCE3.xlsx\"«»)
#Copie de l'entête de base
$rng1=\"T1:U2\"
$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 =\"Janvier 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
$UsersToMark = @()
$Comparison | %{
if ($_.SideIndicator -eq \"<=\"«») {
$UsersToMark += $_.Logiciel
}
}
if ($_.SideIndicator -eq \"=>\"«»){
$UsersToAtou += $_.Logiciel
}
Mark-Users -Workbook $ExcelWorkbookNew -UsersToMark $UsersToMark
Mark-Logi -Workbook $ExcelWorkbookNew -UsersToMark $UsersToAtous
[/code:1]<br><br>Message édité par: Atou45, à: 26/02/19 14:49
Connexion ou Créer un compte pour participer à la conversation.
- Hicham Madini
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 98
- Remerciements reçus 0
il y a 7 ans 2 mois #28353
par Hicham Madini
Réponse de Hicham Madini sur le sujet Re:Fusion ficier Excel avec Powershell
ajoute
[code:1]$UsersToAtou = @()[/code:1]
aprés
[code:1]$UsersToMark = @()[/code:1]<br><br>Message édité par: hichammadd, à: 26/02/19 15:05
[code:1]$UsersToAtou = @()[/code:1]
aprés
[code:1]$UsersToMark = @()[/code:1]<br><br>Message édité par: hichammadd, à: 26/02/19 15:05
Connexion ou Créer un compte pour participer à la conversation.
- Atou
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 65
- Remerciements reçus 0
il y a 7 ans 2 mois #28357
par Atou
Réponse de Atou sur le sujet Re:Fusion ficier Excel avec Powershell
J'ai bien ajouter cette ligne et rien n'y fait, j'ai toijours la même erreur ...
Connexion ou Créer un compte pour participer à la conversation.
- Hicham Madini
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 98
- Remerciements reçus 0
il y a 7 ans 2 mois #28358
par Hicham Madini
Réponse de Hicham Madini sur le sujet Re:Fusion ficier Excel avec Powershell
hmm ok je vais voir, en fait tu as toutes les données pour réaliser ton script, c'est une question de 20 min.
@+++ je t'oublierais pas t'inquiète
@+++ je t'oublierais pas t'inquiète
Connexion ou Créer un compte pour participer à la conversation.
- Atou
- Auteur du sujet
- Hors Ligne
- Membre senior
-
Réduire
Plus d'informations
- Messages : 65
- Remerciements reçus 0
il y a 7 ans 2 mois #28359
par Atou
Réponse de Atou sur le sujet Re:Fusion ficier Excel avec Powershell
Je suis bien d'accord que pour quelqu'un qui est assez doué avec powershell comme toi c'est une affaire de 20 min mais bon tu vois j'ai encore des bases très faibles en powershell surtout avec excel ...
Le problème que j'ai aussi c'est que tu a fais beaucoup de chose sur le script et je ne comprend pas tout, il manque peut être quelques commentaires pour que j'arrive à peu près à tout comprendre et à finir le script moi même ...
Je te remercie d'avance<br><br>Message édité par: Atou45, à: 27/02/19 08:15
Le problème que j'ai aussi c'est que tu a fais beaucoup de chose sur le script et je ne comprend pas tout, il manque peut être quelques commentaires pour que j'arrive à peu près à tout comprendre et à finir le script moi même ...
Je te remercie d'avance<br><br>Message édité par: Atou45, à: 27/02/19 08:15
Connexion ou Créer un compte pour participer à la conversation.
- Hicham Madini
- Hors Ligne
- Membre premium
-
Réduire
Plus d'informations
- Messages : 98
- Remerciements reçus 0
il y a 7 ans 2 mois #28362
par Hicham Madini
Réponse de Hicham Madini sur le sujet Re:Fusion ficier Excel avec Powershell
Re,
non mais moi aussi je suis comme toi, tout nouveau
Ton projet m'a intéréssé aussi
donc voilà:
1- oublie/efface tous les anciens scripts.
2- utilise le fichier Destination attaché
3- plus de questions hen
puisque j'ai commenté un peu le script
[code:1]# Fonction pour récupérer les données de la première colonne de chaque fichier
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+',' '
}
}
# fonction pour colorer les différences et de faire la mise à jour du fichier Destination
Function Update-Destination($Workbook, $LogicielToMark, $LogicielToCopy) {
$Workbook.Activate()
$lastCol = $wsD.UsedRange.columns.count
$Row = 1
$Logiciel = $Workbook.ActiveSheet.Range(\"A\" + $Row).Text
while ($Logiciel.Length) {
if ($LogicielToMark -contains $Logiciel) {
$Workbook.Activate()
$Workbook.ActiveSheet.Range(\"A\" + $Row).copy()
$Destination.Activate()
$lastRow = $wsD.UsedRange.rows.count + 1
$wsD.Range(\"A\" + $lastRow).select()
$Destination.ActiveSheet.Paste()
$Workbook.ActiveSheet.Range(\"B\" + $Row).copy()
$wsD.Cells($lastRow , $lastCol).select()
$Destination.ActiveSheet.Paste()
$Workbook.ActiveSheet.Range(\"C\" + $Row).copy()
$wsD.Cells($lastRow , $lastCol - 1).select()
$Destination.ActiveSheet.Paste()
$Workbook.ActiveSheet.Range(\"A\" + $Row).Cells.Font.ColorIndex = 3
}
Else {
if ($LogicielToCopy -contains $Logiciel) {
$Workbook.Activate()
$CurrentRow = $wsD.Columns.item(1).find($Logiciel).row
$Workbook.ActiveSheet.Range(\"B\" + $Row).copy()
$Destination.Activate()
$wsD.Cells($CurrentRow , $lastCol).select()
$Destination.ActiveSheet.Paste()
$Workbook.ActiveSheet.Range(\"C\" + $Row).copy()
$wsD.Cells($CurrentRow , $lastCol - 1).select()
$Destination.ActiveSheet.Paste()
}
}
$Row++
$Logiciel = $Workbook.ActiveSheet.Range(\"A\" + $Row).Text
}
}
# Fonction pour trier les plages
Function Tri-Plage($ws, $Row, $Cell) {
$lastCol = $ws.UsedRange.columns.count
$lastrow = $ws.UsedRange.rows.count
$objRange = $ws.Range($ws.Cells($Row, 1), $ws.Cells($lastrow, $lastCol))
$objRange1 = $ws.Range($Cell)
[void] $objRange.Sort($objRange1)
}
Add-Type -AssemblyName \"Microsoft.Office.Interop.Excel\" | out-null
add-type -assemblyName \"Microsoft.VisualBasic\"
# InputBox pour inserer le bon mois
$mois = [Microsoft.VisualBasic.Interaction]::InputBox(\"Entrez le mois et l'année au format 'Janvier 19'\", \"Nouvel mois\"«»)
# Ouvrir Excel
$ExcelApplication = New-Object -ComObject \"Excel.Application\"
$ExcelApplication.Visible = $true
# ouvrir les deux fichiers à comparer
$Destination = $ExcelApplication.Workbooks.Open(\"DESTINATION2.xlsx\"«»)
$Source = $ExcelApplication.Workbooks.Open(\"SOURCE3.xlsx\"«»)
# définire les feuilles à comparer de chaque fichiers
$wsD = $Destination.Worksheets.item(1)
$wsS = $Destination.Worksheets.item(1)
# copier l'entête du nouveau mois
$rng1=\"T1:U2\"
$rng2=\"V1:W2\"
$xl = new-object -c excel.application
$Destination.Activate()
$rng = $wsD.Range($rng1).Copy()
$wsD.Range($rng2).Select()
$wsD.Paste()
$wsD.Range(\"V1\"«»).value = $mois
#Trier la feuille du document Destination
Tri-Plage $wsD 3 \"A3\"
#Trier la feuille du document Source
Tri-Plage $wsS 2 \"A2\"
# recupérer les données des colonnes à comparer
$DestinationData = Get-WorkbookData -Workbook $Destination 3 # à partir de la ligne 3 à cause de l'entête
$SourceData = Get-WorkbookData -Workbook $Source 2 # à partir de la ligne 2 à cause de l'entête
# comparer les données récuperer
$Comparison = Compare-Object -ReferenceObject $SourceData -DifferenceObject $DestinationData -Property \"Logiciel\" -IncludeEqual:$true
# table de hachage (les résultats de recherche sont stockés dedans)
$LogicielToMark = @()
$LogicielToCopy = @()
$Comparison | %{
if ($_.SideIndicator -eq \"<=\"«») {
$LogicielToMark += $_.Logiciel
}
Else{ if ($_.SideIndicator -eq \"==\"«»){
$LogicielToCopy += $_.Logiciel
}
}
}
# execution opérations coloration et mise à jour
Update-Destination -Workbook $Source -LogicielToMark $LogicielToMark -LogicielToCopy $LogicielToCopy
#Trier la feuille du document Destination aprés la mise à jour
Tri-Plage $wsD 3 \"A3\"
# ajuster le format de la feuille du document Destination
$objRange = $wsD.Range($wsD.Cells(3, 1), $wsD.Cells($lastrow, $lastCol))
7..12 | ForEach {
$objRange.Borders.Item($_).LineStyle = 1
$objRange.Borders.item($_).Weight = -4138 #2
$objRange.Borders.item($_).Color = 0
}
# selectionner la cellule A1, c'est pas obligatoire
$wsD.Range(\"A1\"«»).select()
#$Destination.Save() <== à activer pour sauvegarder
#$Source.Save() <== à activer pour sauvegarder
#$ExcelApplication.Quit() <== à activer pour fermer Excel
[/code:1]<br><br>Message édité par: hichammadd, à: 27/02/19 10:20
non mais moi aussi je suis comme toi, tout nouveau
Ton projet m'a intéréssé aussi
donc voilà:
1- oublie/efface tous les anciens scripts.
2- utilise le fichier Destination attaché
3- plus de questions hen
[code:1]# Fonction pour récupérer les données de la première colonne de chaque fichier
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+',' '
}
}
# fonction pour colorer les différences et de faire la mise à jour du fichier Destination
Function Update-Destination($Workbook, $LogicielToMark, $LogicielToCopy) {
$Workbook.Activate()
$lastCol = $wsD.UsedRange.columns.count
$Row = 1
$Logiciel = $Workbook.ActiveSheet.Range(\"A\" + $Row).Text
while ($Logiciel.Length) {
if ($LogicielToMark -contains $Logiciel) {
$Workbook.Activate()
$Workbook.ActiveSheet.Range(\"A\" + $Row).copy()
$Destination.Activate()
$lastRow = $wsD.UsedRange.rows.count + 1
$wsD.Range(\"A\" + $lastRow).select()
$Destination.ActiveSheet.Paste()
$Workbook.ActiveSheet.Range(\"B\" + $Row).copy()
$wsD.Cells($lastRow , $lastCol).select()
$Destination.ActiveSheet.Paste()
$Workbook.ActiveSheet.Range(\"C\" + $Row).copy()
$wsD.Cells($lastRow , $lastCol - 1).select()
$Destination.ActiveSheet.Paste()
$Workbook.ActiveSheet.Range(\"A\" + $Row).Cells.Font.ColorIndex = 3
}
Else {
if ($LogicielToCopy -contains $Logiciel) {
$Workbook.Activate()
$CurrentRow = $wsD.Columns.item(1).find($Logiciel).row
$Workbook.ActiveSheet.Range(\"B\" + $Row).copy()
$Destination.Activate()
$wsD.Cells($CurrentRow , $lastCol).select()
$Destination.ActiveSheet.Paste()
$Workbook.ActiveSheet.Range(\"C\" + $Row).copy()
$wsD.Cells($CurrentRow , $lastCol - 1).select()
$Destination.ActiveSheet.Paste()
}
}
$Row++
$Logiciel = $Workbook.ActiveSheet.Range(\"A\" + $Row).Text
}
}
# Fonction pour trier les plages
Function Tri-Plage($ws, $Row, $Cell) {
$lastCol = $ws.UsedRange.columns.count
$lastrow = $ws.UsedRange.rows.count
$objRange = $ws.Range($ws.Cells($Row, 1), $ws.Cells($lastrow, $lastCol))
$objRange1 = $ws.Range($Cell)
[void] $objRange.Sort($objRange1)
}
Add-Type -AssemblyName \"Microsoft.Office.Interop.Excel\" | out-null
add-type -assemblyName \"Microsoft.VisualBasic\"
# InputBox pour inserer le bon mois
$mois = [Microsoft.VisualBasic.Interaction]::InputBox(\"Entrez le mois et l'année au format 'Janvier 19'\", \"Nouvel mois\"«»)
# Ouvrir Excel
$ExcelApplication = New-Object -ComObject \"Excel.Application\"
$ExcelApplication.Visible = $true
# ouvrir les deux fichiers à comparer
$Destination = $ExcelApplication.Workbooks.Open(\"DESTINATION2.xlsx\"«»)
$Source = $ExcelApplication.Workbooks.Open(\"SOURCE3.xlsx\"«»)
# définire les feuilles à comparer de chaque fichiers
$wsD = $Destination.Worksheets.item(1)
$wsS = $Destination.Worksheets.item(1)
# copier l'entête du nouveau mois
$rng1=\"T1:U2\"
$rng2=\"V1:W2\"
$xl = new-object -c excel.application
$Destination.Activate()
$rng = $wsD.Range($rng1).Copy()
$wsD.Range($rng2).Select()
$wsD.Paste()
$wsD.Range(\"V1\"«»).value = $mois
#Trier la feuille du document Destination
Tri-Plage $wsD 3 \"A3\"
#Trier la feuille du document Source
Tri-Plage $wsS 2 \"A2\"
# recupérer les données des colonnes à comparer
$DestinationData = Get-WorkbookData -Workbook $Destination 3 # à partir de la ligne 3 à cause de l'entête
$SourceData = Get-WorkbookData -Workbook $Source 2 # à partir de la ligne 2 à cause de l'entête
# comparer les données récuperer
$Comparison = Compare-Object -ReferenceObject $SourceData -DifferenceObject $DestinationData -Property \"Logiciel\" -IncludeEqual:$true
# table de hachage (les résultats de recherche sont stockés dedans)
$LogicielToMark = @()
$LogicielToCopy = @()
$Comparison | %{
if ($_.SideIndicator -eq \"<=\"«») {
$LogicielToMark += $_.Logiciel
}
Else{ if ($_.SideIndicator -eq \"==\"«»){
$LogicielToCopy += $_.Logiciel
}
}
}
# execution opérations coloration et mise à jour
Update-Destination -Workbook $Source -LogicielToMark $LogicielToMark -LogicielToCopy $LogicielToCopy
#Trier la feuille du document Destination aprés la mise à jour
Tri-Plage $wsD 3 \"A3\"
# ajuster le format de la feuille du document Destination
$objRange = $wsD.Range($wsD.Cells(3, 1), $wsD.Cells($lastrow, $lastCol))
7..12 | ForEach {
$objRange.Borders.Item($_).LineStyle = 1
$objRange.Borders.item($_).Weight = -4138 #2
$objRange.Borders.item($_).Color = 0
}
# selectionner la cellule A1, c'est pas obligatoire
$wsD.Range(\"A1\"«»).select()
#$Destination.Save() <== à activer pour sauvegarder
#$Source.Save() <== à activer pour sauvegarder
#$ExcelApplication.Quit() <== à activer pour fermer Excel
[/code:1]<br><br>Message édité par: hichammadd, à: 27/02/19 10:20
Pièces jointes :
Connexion ou Créer un compte pour participer à la conversation.
Temps de génération de la page : 0.045 secondes
- Vous êtes ici :
-
Accueil
-
forum
-
PowerShell
-
Entraide pour les débutants
- [Résolu] Fusion fichier Excel avec Powershell