# Réduire toutes les fenêtres de commande ouvertes dans la session Windows Add-Type -AssemblyName Microsoft.VisualBasic $shell = New-Object -ComObject Shell.Application $shell.MinimizeAll() # Obtenir le nom d'utilisateur de la session en cours via une méthode alternative $userName = $env:USERNAME # Vérifier si le nom d'utilisateur a été correctement récupéré if (-not [string]::IsNullOrWhiteSpace($userName)) { # Construire le chemin complet en utilisant le nom d'utilisateur $logScamPath = "C:\Users\$userName\Desktop\LOG et SCAM\" # Définir une nouvelle variable d'environnement avec ce chemin [Environment]::SetEnvironmentVariable("LOG_SCAM_PATH", $logScamPath, "User") # Afficher la variable d'environnement (optionnel, pour vérification) Write-Host "La variable d'environnement LOG_SCAM_PATH est définie sur : $logScamPath" } else { Write-Host "Erreur : Impossible de récupérer le nom d'utilisateur." } # Définir le chemin d'accès relatif des fichiers CSV $indexcsv = "$logScamPath\index.csv" $auteurcsv = "C:\Users\$username\Desktop\LOG et SCAM\Auteur\auteur.csv" $diffusioncsv = "$logScamPath\diffusion.csv" $diffusionps1 = ".\diffusion et certificat.ps1" $diffusioncsvps1 = "$logScamPath\Diffusion_csv.ps1" # Affiche le chemin d'accès actuel du script Write-Host "Chemin d'accès du script : $PSScriptRoot" # Construit les chemins complets des fichiers CSV $indexcsvFullPath = "$logScamPath\index.csv" $auteurcsvFullPath = "C:\Users\$username\Desktop\LOG et SCAM\Auteur\auteur.csv" $diffusioncsvFullPath = "$logScamPath\diffusion.csv" $diffusionps1FullPath = Join-Path -Path $PSScriptRoot -ChildPath $diffusionps1 $diffusioncsvps1FullPath = "$logScamPath\Diffusion_csv.ps1" # Vérifie l'existence des fichiers CSV if (Test-Path -Path $indexcsvFullPath) { Write-Host "Le fichier Index.csv existe à l'emplacement : $indexcsvFullPath" } else { Write-Host "Le fichier Index.csv n'existe pas à l'emplacement : $indexcsvFullPath" } if (Test-Path -Path $auteurcsvFullPath) { Write-Host "Le fichier Auteur.csv existe à l'emplacement : $auteurcsvFullPath" } else { Write-Host "Le fichier Auteur.csv n'existe pas à l'emplacement : $auteurcsvFullPath" } if (Test-Path -Path $diffusioncsvFullPath) { Write-Host "Le fichier diffusion.csv existe à l'emplacement : $diffusioncsvFullPath" } else { Write-Host "Le fichier diffusion.csv n'existe pas à l'emplacement : $diffusioncsvFullPath" } if (Test-Path -Path $diffusionps1FullPath) { Write-Host "Le fichier diffusion et certificat.ps1 existe à l'emplacement : $diffusionps1FullPath" } else { Write-Host "Le fichier diffusion et certificat.ps1 n'existe pas à l'emplacement : $diffusionps1FullPath1" } if (Test-Path -Path $diffusioncsvps1FullPath) { Write-Host "Le fichier diffusion_csv.ps1 existe à l'emplacement : $diffusioncsvps1FullPath" } else { Write-Host "Le fichier diffusion_csv.ps1 n'existe pas à l'emplacement : $diffusioncsvps1FullPath" } $auteurcsv = $auteurcsvFullPath $indexcsv = $indexcsvFullPath # Ajout du type .NET pour l'interaction avec Windows Forms Add-Type -AssemblyName System.Windows.Forms function NOK{ $csvFile = $auteurcsv # Assurez-vous que cette variable est définie correctement ailleurs dans votre script. # Importer les données sans les convertir en minuscules $donneesCsv = Import-Csv $csvFile -Delimiter ";" -Encoding UTF8 | ForEach-Object { $_.TITREFILM = $_.TITREFILM.Normalize([System.Text.NormalizationForm]::FormKD) $_ } $resultats = $donneesCsv | Where-Object { $_.TITREFILM -match $rechercheNorm -and $_.REALISATEUR -eq "" -and $_.PRODUCTION -eq "" -and $_.ANNEEDEPRODUCTION -eq "" -and $_.GENRE -eq "" -and $_.SOUSTITRE -eq "" -and $_.NUMEROEPISODE -eq "" -and $_.SAISON -eq "" -and $_.SCENARISTE -eq "" -and $_.PAYSDEPROD -eq "" -and $_.CODEOEUVRE -eq "" } # Vider la liste avant de commencer à ajouter des éléments $listbox.Items.Clear() # Tri des résultats par TITREFILM en ordre alphabétique $resultatsTriés = $resultats | Sort-Object TITREFILM # Ajout des résultats triés dans la ListBox foreach ($resultat in $resultatsTriés) { $listbox.Items.Add($resultat.TITREFILM) } # Actualiser l'interface utilisateur après la mise à jour de la liste $listbox.Refresh() # Compter après avoir rempli la liste $nombreDeResultats = $listbox.Items.Count $resultatLabel.Text = "$nombreDeResultats résultat(s) trouvé(s)." if ($nombreDeResultats -gt 0) { $modifierButton.Enabled = $true } else { [System.Windows.Forms.MessageBox]::Show("Il n'y a pas ou plus de NOK.", "Résultat de la recherche", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information) $resultatLabel.Text = "0 résultat trouvé." $modifierButton.Enabled = $false } } # Fonction pour effectuer la recherche <#function Rechercher($recherche) { $csvFile = $auteurcsv # Assurez-vous que cette variable est définie correctement ailleurs dans votre script. # Utilisez la recherche telle quelle, en supposant que vous voulez ignorer la casse sans modifier les données $rechercheNorm = [regex]::Escape($recherche.Normalize([System.Text.NormalizationForm]::FormKD)) # Importer les données sans les convertir en minuscules $donneesCsv = Import-Csv $csvFile -Delimiter ";" -Encoding UTF8 | ForEach-Object { $_.TITREFILM = $_.TITREFILM.Normalize([System.Text.NormalizationForm]::FormKD) $_ } if ([string]::IsNullOrEmpty($recherche)) { $confirmation = [System.Windows.Forms.MessageBox]::Show("Voulez-vous afficher uniquement les NOK ?", "Afficher uniquement les éléments NOK à remplir ?", [System.Windows.Forms.MessageBoxButtons]::YesNo, [System.Windows.Forms.MessageBoxIcon]::Question) if ($confirmation -eq [System.Windows.Forms.DialogResult]::Yes) { # Filtrer pour les éléments NOK $resultats = $donneesCsv | Where-Object { $_.TITREFILM -match $rechercheNorm -and $_.REALISATEUR -eq "" -and $_.PRODUCTION -eq "" -and $_.ANNEEDEPRODUCTION -eq "" -and $_.GENRE -eq "" -and $_.SOUSTITRE -eq "" -and $_.NUMEROEPISODE -eq "" -and $_.SAISON -eq "" -and $_.SCENARISTE -eq "" -and $_.PAYSDEPROD -eq "" -and $_.CODEOEUVRE -eq "" } } else { # Filtrer sans condition NOK $resultats = $donneesCsv | Where-Object { $_.TITREFILM -match $rechercheNorm } } } else { # Filtrer les résultats en ignorant la casse sans changer les données $resultats = $donneesCsv | Where-Object { $_.TITREFILM -match $rechercheNorm } } # Vider la liste avant de commencer à ajouter des éléments $listbox.Items.Clear() # Tri des résultats par TITREFILM en ordre alphabétique $resultatsTriés = $resultats | Sort-Object TITREFILM # Ajout des résultats triés dans la ListBox foreach ($resultat in $resultatsTriés) { $listbox.Items.Add($resultat.TITREFILM) } # Actualiser l'interface utilisateur après la mise à jour de la liste $listbox.Refresh() # Compter après avoir rempli la liste $nombreDeResultats = $listbox.Items.Count $resultatLabel.Text = "$nombreDeResultats résultat(s) trouvé(s)." if ($nombreDeResultats -gt 0) { $modifierButton.Enabled = $true } else { [System.Windows.Forms.MessageBox]::Show("Aucun résultat trouvé pour '$recherche'.", "Résultat de la recherche", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information) $resultatLabel.Text = "0 résultat trouvé." $modifierButton.Enabled = $false } }#> function Rechercher($recherche) { $csvFile = $auteurcsv # Assurez-vous que cette variable est définie correctement ailleurs dans votre script. # Utilisez la recherche telle quelle, en supposant que vous voulez ignorer la casse sans modifier les données $rechercheNorm = [regex]::Escape($recherche.Normalize([System.Text.NormalizationForm]::FormKD)) # Importer les données sans les convertir en minuscules $donneesCsv = Import-Csv $csvFile -Delimiter ";" -Encoding UTF8 | ForEach-Object { $_.TITREFILM = $_.TITREFILM.Normalize([System.Text.NormalizationForm]::FormKD) $_ } # Filtrer les résultats en ignorant la casse sans changer les données $resultats = $donneesCsv | Where-Object { $_.TITREFILM -match $rechercheNorm } # Vider la liste avant de commencer à ajouter des éléments $listbox.Items.Clear() # Tri des résultats par TITREFILM en ordre alphabétique $resultatsTriés = $resultats | Sort-Object TITREFILM # Ajout des résultats triés dans la ListBox foreach ($resultat in $resultatsTriés) { $listbox.Items.Add($resultat.TITREFILM) } # Actualiser l'interface utilisateur après la mise à jour de la liste $listbox.Refresh() # Compter après avoir rempli la liste $nombreDeResultats = $listbox.Items.Count $resultatLabel.Text = "$nombreDeResultats résultat(s) trouvé(s)." if ($nombreDeResultats -gt 0) { $modifierButton.Enabled = $true } else { [System.Windows.Forms.MessageBox]::Show("Aucun résultat trouvé pour '$recherche'.", "Résultat de la recherche", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information) $resultatLabel.Text = "0 résultat trouvé." $modifierButton.Enabled = $false } } # Fonction pour effectuer la recherche des doublons function RechercherDoublons { $csvFile = $auteurcsv # Utilise la commande "Group-Object" pour trouver les doublons exacts dans la colonne TITREFILM $doublons = Import-Csv $csvFile -Delimiter ";" -Encoding UTF8 | Group-Object TITREFILM | Where-Object { $_.Count -gt 1 } if ($doublons.Count -gt 0) { $resultatMsg = "doublon" if ($doublons.Count -gt 1) { $resultatMsg = "doublons" } $resultatLabel.Text = "$($doublons.Count) $resultatMsg trouvés." $modifierButton.Enabled = $false # Efface la liste actuelle et affiche les doublons dans la zone de liste avec une colonne supplémentaire pour le nombre de fois où le doublon apparaît $listeDoublons = @() foreach ($doublon in $doublons) { $listeDoublons += $doublon } $listeDoublons = $listeDoublons | Sort-Object -Property Count -Descending $listbox.Items.Clear() foreach ($doublon in $listeDoublons) { $listbox.Items.Add("$($doublon.Name) ($($doublon.Count) occurrences)") } } else { [System.Windows.Forms.MessageBox]::Show("Aucun doublon trouvé.", "Résultat de la recherche", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information) $resultatLabel.Text = "$($doublons.Count) doublons trouvés." $modifierButton.Enabled = $false } } ##FIN function Rechercheduree { $titrefilmTextbox.text #$selectedItem = $listBox.SelectedItem.Trim() $selectedItem = $titrefilmTextbox.text $selectedItem = $selectedItem.Replace("?", "") $selectedItem = $selectedItem.Replace("`"", "") $selectedItem = $selectedItem.Replace(":", "-") # Maintenant, $selectedItem est modifié et peut être utilisé $csvData = Import-Csv $indexcsv -Delimiter ";" -Encoding UTF8 $foundItems = $csvData | Where-Object {$_.Fichier.Trim() -eq $selectedItem} if ($foundItems.Count -eq 0) { [System.Windows.Forms.MessageBox]::Show("Le fichier sélectionné n'a pas été trouvé dans le CSV.") return } $cheminVideo = $foundItems[0].Chemin # Vérifier si le fichier vidéo existe if (Test-Path $cheminVideo) { # Créer un objet Shell pour accéder aux propriétés du fichier $shell = New-Object -ComObject Shell.Application $dossier = $shell.Namespace((Get-Item $cheminVideo).DirectoryName) $fichier = $dossier.ParseName((Get-Item $cheminVideo).Name) # Obtenir la durée du fichier vidéo (en secondes) $dureePropriete = $dossier.GetDetailsOf($fichier, 27) # Convertir la durée en format lisible (heures:minutes:secondes) $duree = [TimeSpan]::ParseExact($dureePropriete, "h\:mm\:ss", $null) # Mettre la durée dans $dureefilm $dureefilm = $duree.ToString() # Mettre à jour le texte dans le contrôle de texte $dureefilmTextbox.text = $dureefilm # Chemins possibles pour l'exécutable VLC $vlcPath1 = "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" $vlcPath2 = "C:\Program Files\VideoLAN\VLC\vlc.exe" # Vérifier quel chemin existe et utiliser celui-là if (Test-Path $vlcPath1) { $vlcExe = $vlcPath1 } elseif (Test-Path $vlcPath2) { $vlcExe = $vlcPath2 } else { Write-Host "VLC n'est pas installé dans les chemins standard. Veuillez vérifier l'installation." exit } Add-Type -AssemblyName System.Windows.Forms # Définition des messages et titres $informationComplementaire = "Vérifiez également les autres valeurs de la fiche." $messageInfo = "N'oubliez pas d'enregistrer la fiche auteur pour sauvegarder la durée. " + $informationComplementaire $captionInfo = "Information importante" $question = "Voulez-vous lire la vidéo maintenant ?" $captionQuestion = "Lecture vidéo" # Afficher le message d'information [System.Windows.Forms.MessageBox]::Show($messageInfo, $captionInfo, [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information) # Demander à l'utilisateur s'il veut lire la vidéo $resultat = [System.Windows.Forms.MessageBox]::Show($question, $captionQuestion, [System.Windows.Forms.MessageBoxButtons]::YesNo, [System.Windows.Forms.MessageBoxIcon]::Question) if ($resultat -eq [System.Windows.Forms.DialogResult]::Yes) { # Lancer VLC # Arguments pour VLC $arguments = """$cheminVideo""" Write-Host "Lancement de VLC avec les arguments : $arguments" Start-Process $vlcExe $arguments } } } function LectureVideo { # Vérifier si $listBox.SelectedItem est null if ($listBox.SelectedItem -eq $null) { [System.Windows.Forms.MessageBox]::Show("Aucun élément sélectionné.") return } $selectedItem = $listBox.SelectedItem.Trim() $selectedItem = $selectedItem.Replace("?", "") $selectedItem = $selectedItem.Replace("`"", "") $selectedItem = $selectedItem.Replace(":", "-") write-host $selectedItem write-host $selectedItem # Maintenant, $selectedItem est modifié et peut être utilisé $csvData = Import-Csv $indexcsv -Delimiter ";" -Encoding UTF8 $foundItems = $csvData | Where-Object {$_.Fichier.Trim() -eq $selectedItem} if ($foundItems.Count -eq 0) { [System.Windows.Forms.MessageBox]::Show("Le fichier sélectionné n'a pas été trouvé dans le CSV.") return } $cheminVideo = $foundItems[0].Chemin #Rechercheduree # Chemins possibles pour l'exécutable VLC $vlcPath1 = "C:\Program Files (x86)\VideoLAN\VLC\vlc.exe" $vlcPath2 = "C:\Program Files\VideoLAN\VLC\vlc.exe" # Vérifier quel chemin existe et utiliser celui-là if (Test-Path $vlcPath1) { $vlcExe = $vlcPath1 } elseif (Test-Path $vlcPath2) { $vlcExe = $vlcPath2 } else { Write-Host "VLC n'est pas installé dans les chemins standard. Veuillez vérifier l'installation." exit } # Arguments pour VLC $arguments = """$cheminVideo""" Write-Host "Lancement de VLC avec les arguments : $arguments" # Lancer VLC Start-Process $vlcExe $arguments } # Créer une fenêtre de formulaire Add-Type -AssemblyName System.Windows.Forms $form = New-Object System.Windows.Forms.Form $form.Text = "Recherche de film" $form.Width = 460 $form.Height = 500 $form.FormBorderStyle = "FixedSingle" $form.ControlBox = $true $form.MaximizeBox = $false $form.MinimizeBox = $false # Créer un contrôle Label pour afficher le texte au-dessus de la zone de recherche $rechercheLabel = New-Object System.Windows.Forms.Label $rechercheLabel.Text = "Rechercher une oeuvre à modifier :" $rechercheLabel.AutoSize = $true $rechercheLabel.Location = New-Object System.Drawing.Point(10, 10) $form.Controls.Add($rechercheLabel) # Créer un label pour afficher le nombre de résultats trouvés $resultatLabel = New-Object System.Windows.Forms.Label $resultatLabel.AutoSize = $true $resultatLabel.Location = New-Object System.Drawing.Point(10, 60) $form.Controls.Add($resultatLabel) # Créer une zone de texte pour la saisie de la recherche $textbox = New-Object System.Windows.Forms.TextBox $textbox.Location = New-Object System.Drawing.Point(10, 30) $textbox.Size = New-Object System.Drawing.Size(200, 20) $form.Controls.Add($textbox) # Créer une zone de liste pour les résultats de la recherche $listbox = New-Object System.Windows.Forms.ListBox $listbox.Location = New-Object System.Drawing.Point(10, 80) $listbox.Size = New-Object System.Drawing.Size(300, 350) $listBox.Name = "MaListbox" $form.Controls.Add($listbox) # Créer un bouton pour lancer la recherche $button = New-Object System.Windows.Forms.Button $button.Location = New-Object System.Drawing.Point(220, 10) $button.Size = New-Object System.Drawing.Size(100, 25) $button.Text = "Rechercher" $form.Controls.Add($button) # Créer un bouton pour modifier les valeurs liées à la ligne correspondant au film sélectionné $modifierButton = New-Object System.Windows.Forms.Button $modifierButton.Location = New-Object System.Drawing.Point(330, 10) $modifierButton.Size = New-Object System.Drawing.Size(100, 50) $modifierButton.Text = "Modifier" $modifierButton.Enabled = $Enable $form.Controls.Add($modifierButton) # Créer un bouton pour modifier les valeurs liées à la ligne correspondant au film sélectionné $DiffusioncertButton = New-Object System.Windows.Forms.Button $DiffusioncertButton.Location = New-Object System.Drawing.Point(330, 150) $DiffusioncertButton.Size = New-Object System.Drawing.Size(100, 50) $DiffusioncertButton.Text = "Diffusion et Certificat" $DiffusioncertButton.Enabled = $true $form.Controls.Add($DiffusioncertButton) # Créer un bouton pour ajouter les NOK $NOKButton = New-Object System.Windows.Forms.Button $NOKButton.Location = New-Object System.Drawing.Point(330, 220) $NOKButton.Size = New-Object System.Drawing.Size(100, 50) $NOKButton.Text = "Afficher les NOK" $NOKButton.Enabled = $true $form.Controls.Add($NOKButton) # Ajouter le bouton Play $btnPlay = New-Object System.Windows.Forms.Button $btnPlay.Location = New-Object System.Drawing.Point(330, 80) $btnPlay.Size = New-Object System.Drawing.Size(100, 50) $btnPlay.Text = "Lire la vidéo" $btnPlay.Add_Click({ Lecturevideo }) $form.Controls.Add($btnPlay) #Créer un bouton pour rechercher les doublons exacts $doublonButton = New-Object System.Windows.Forms.Button $doublonButton.Location = New-Object System.Drawing.Point(220,40) $doublonButton.Size = New-Object System.Drawing.Size(100, 25) $doublonButton.Text = "Doublon" $doublonButton.Add_Click({ RechercherDoublons }) $form.Controls.Add($doublonButton) # Événement pour le clic sur le bouton de recherche $button.Add_Click({ $recherche = $textbox.Text Rechercher $recherche }) # Événement pour le clic sur le bouton "Modifier" $modifierButton.Add_Click({ $data = Import-Csv "$auteurcsvFullPath" -Delimiter ";" -Encoding UTF8 $nomrealisateurs = $data | Select-Object -ExpandProperty REALISATEUR -Unique # Créer une fenêtre de formulaire pour la modification des valeurs $modifForm = New-Object System.Windows.Forms.Form $modifForm.Text = "Modification des valeurs" $modifForm.Width = 450 $modifForm.Height = 480 $modifForm.FormBorderStyle = "FixedSingle" # Créer des zones de texte pour les nouvelles valeurs $titrefilmTextbox = New-Object System.Windows.Forms.TextBox $titrefilmTextbox.Location = New-Object System.Drawing.Point(120, 10) $titrefilmTextbox.Size = New-Object System.Drawing.Size(200, 20) $modifForm.Controls.Add($titrefilmTextbox) #Durée $dureefilmTextbox = New-Object System.Windows.Forms.TextBox $dureefilmTextbox.Location = New-Object System.Drawing.Point(330,40) $dureefilmTextbox.Size = New-Object System.Drawing.Size(80, 30) $modifForm.Controls.Add($dureefilmTextbox) # Créer des zones de texte pour les nouvelles valeurs $titreTextbox = New-Object System.Windows.Forms.TextBox $titreTextbox.Location = New-Object System.Drawing.Point(120, 40) $titreTextbox.Size = New-Object System.Drawing.Size(200, 20) $modifForm.Controls.Add($titreTextbox) $realisateurTextbox = New-Object System.Windows.Forms.TextBox $realisateurTextbox.Location = New-Object System.Drawing.Point(120, 70) $realisateurTextbox.Size = New-Object System.Drawing.Size(200, 20) # Ajouter une saisie prédictive pour le réalisateur $realisateurTextbox.AutoCompleteMode = "Suggest" $realisateurTextbox.AutoCompleteSource = "CustomSource" $realisateurs = $data | Select-Object -ExpandProperty REALISATEUR -Unique $autoCompleteCollection = New-Object System.Windows.Forms.AutoCompleteStringCollection $autoCompleteCollection.AddRange($realisateurs) $realisateurTextbox.AutoCompleteCustomSource = $autoCompleteCollection $modifForm.Controls.Add($realisateurTextbox) # Déclarer et initialiser la variable $producteurTextbox $producteurTextbox = New-Object System.Windows.Forms.TextBox $producteurTextbox.Location = New-Object System.Drawing.Point(120, 110) $producteurTextbox.Size = New-Object System.Drawing.Size(200, 20) # Ajouter une saisie prédictive pour la colonne "PRODUCTION" $producteurTextbox.AutoCompleteMode = "Suggest" $producteurTextbox.AutoCompleteSource = "CustomSource" $productions = $data | Select-Object -ExpandProperty PRODUCTION -Unique $autoCompleteCollection = New-Object System.Windows.Forms.AutoCompleteStringCollection $autoCompleteCollection.AddRange($productions) $producteurTextbox.AutoCompleteCustomSource = $autoCompleteCollection $modifForm.Controls.Add($producteurTextbox) $anneeTextbox = New-Object System.Windows.Forms.TextBox $anneeTextbox.Location = New-Object System.Drawing.Point(120, 140) $anneeTextbox.Size = New-Object System.Drawing.Size(200, 20) $modifForm.Controls.Add($anneeTextbox) $genreTextbox = New-Object System.Windows.Forms.TextBox $genreTextbox.Location = New-Object System.Drawing.Point(120, 170) $genreTextbox.Size = New-Object System.Drawing.Size(200, 20) # Ajouter une saisie prédictive pour le réalisateur $genreTextbox.AutoCompleteMode = "Suggest" $genreTextbox.AutoCompleteSource = "CustomSource" $genre = $data | Select-Object -ExpandProperty GENRE -Unique $autoCompleteCollection = New-Object System.Windows.Forms.AutoCompleteStringCollection $autoCompleteCollection.AddRange($genre) $genreTextbox.AutoCompleteCustomSource = $autoCompleteCollection #$modifForm.Controls.Add($genreTextbox) # Créer une ComboBox pour le genre $genreComboBox = New-Object System.Windows.Forms.ComboBox $genreComboBox.AutoCompleteMode = "SuggestAppend" $genreComboBox.AutoCompleteSource = "ListItems" $genreComboBox.DropDownStyle = "DropDownList" $genreComboBox.Location = New-Object System.Drawing.Point(120, 170) $genreComboBox.Size = New-Object System.Drawing.Size(200, 20) # Récupérer les données pour la ComboBox $genre = $data | Select-Object -ExpandProperty GENRE -Unique # Ajouter les données à la ComboBox $genreComboBox.Items.AddRange($genre) # Ajouter la ComboBox à votre formulaire $modifform.Controls.Add($genreComboBox) $paysTextbox = New-Object System.Windows.Forms.TextBox $paysTextbox.Location = New-Object System.Drawing.Point(120, 200) $paysTextbox.Size = New-Object System.Drawing.Size(200, 20) #$modifForm.Controls.Add($paysTextbox) # Créer des zones de texte pour les nouvelles valeurs $sousTitreTextbox = New-Object System.Windows.Forms.TextBox $sousTitreTextbox.Location = New-Object System.Drawing.Point(120, 230) $sousTitreTextbox.Size = New-Object System.Drawing.Size(200, 20) $modifForm.Controls.Add($sousTitreTextbox) $numeroEpisodeTextbox = New-Object System.Windows.Forms.TextBox $numeroEpisodeTextbox.Location = New-Object System.Drawing.Point(120, 260) $numeroEpisodeTextbox.Size = New-Object System.Drawing.Size(200, 20) $modifForm.Controls.Add($numeroEpisodeTextbox) $saisonTextbox = New-Object System.Windows.Forms.TextBox $saisonTextbox.Location = New-Object System.Drawing.Point(120, 290) $saisonTextbox.Size = New-Object System.Drawing.Size(200, 20) $modifForm.Controls.Add($saisonTextbox) $scenaristeTextbox = New-Object System.Windows.Forms.TextBox $scenaristeTextbox.Location = New-Object System.Drawing.Point(120, 320) $scenaristeTextbox.Size = New-Object System.Drawing.Size(200, 20) $modifForm.Controls.Add($scenaristeTextbox) $codeOeuvreTextbox = New-Object System.Windows.Forms.TextBox $codeOeuvreTextbox.Location = New-Object System.Drawing.Point(120, 350) $codeOeuvreTextbox.Size = New-Object System.Drawing.Size(200, 20) $modifForm.Controls.Add($codeOeuvreTextbox) # Créer des labels de texte pour chaque zone de texte $sousTitreLabel = New-Object System.Windows.Forms.Label $sousTitreLabel.Text = "Sous-titre :" $sousTitreLabel.AutoSize = $true $sousTitreLabel.Location = New-Object System.Drawing.Point(10, 235) $modifForm.Controls.Add($sousTitreLabel) $numeroEpisodeLabel = New-Object System.Windows.Forms.Label $numeroEpisodeLabel.Text = "Numéro épisode :" $numeroEpisodeLabel.AutoSize = $true $numeroEpisodeLabel.Location = New-Object System.Drawing.Point(10, 265) $modifForm.Controls.Add($numeroEpisodeLabel) $saisonLabel = New-Object System.Windows.Forms.Label $saisonLabel.Text = "Saison :" $saisonLabel.AutoSize = $true $saisonLabel.Location = New-Object System.Drawing.Point(10, 295) $modifForm.Controls.Add($saisonLabel) $scenaristeLabel = New-Object System.Windows.Forms.Label $scenaristeLabel.Text = "Scénariste :" $scenaristeLabel.AutoSize = $true $scenaristeLabel.Location = New-Object System.Drawing.Point(10, 325) $modifForm.Controls.Add($scenaristeLabel) $codeOeuvreLabel = New-Object System.Windows.Forms.Label $codeOeuvreLabel.Text = "Code oeuvre :" $codeOeuvreLabel.AutoSize = $true $codeOeuvreLabel.Location = New-Object System.Drawing.Point(10, 355) $modifForm.Controls.Add($codeOeuvreLabel) # Créer des labels de texte pour chaque zone de texte $titreLabel = New-Object System.Windows.Forms.Label $titreLabel.Text = "Titre corriger :" $titreLabel.AutoSize = $true $titreLabel.Location = New-Object System.Drawing.Point(10, 45) $modifForm.Controls.Add($titreLabel) $titrefilmLabel = New-Object System.Windows.Forms.Label $titrefilmLabel.Text = "Nom du fichier :" $titrefilmLabel.AutoSize = $true $titrefilmLabel.Location = New-Object System.Drawing.Point(10, 15) $modifForm.Controls.Add($titrefilmLabel) #Durée Label $dureefilmLabel = New-Object System.Windows.Forms.Label $dureefilmLabel.Text = "Durée :" $dureefilmLabel.AutoSize = $true $dureefilmLabel.Location = New-Object System.Drawing.Point(330, 15) $modifForm.Controls.Add($dureefilmLabel) $realisateurLabel = New-Object System.Windows.Forms.Label $realisateurLabel.Text = "Réalisateur :" $realisateurLabel.AutoSize = $true $realisateurLabel.Location = New-Object System.Drawing.Point(10, 75) $modifForm.Controls.Add($realisateurLabel) $producteurLabel = New-Object System.Windows.Forms.Label $producteurLabel.Text = "Producteur :" $producteurLabel.AutoSize = $true $producteurLabel.Location = New-Object System.Drawing.Point(10,115) $modifForm.Controls.Add($producteurLabel) $anneeLabel = New-Object System.Windows.Forms.Label $anneeLabel.Text = "Année :" $anneeLabel.AutoSize = $true $anneeLabel.Location = New-Object System.Drawing.Point(10, 145) $modifForm.Controls.Add($anneeLabel) $genreLabel = New-Object System.Windows.Forms.Label $genreLabel.Text = "Genre :" $genreLabel.AutoSize = $true $genreLabel.Location = New-Object System.Drawing.Point(10, 175) $modifForm.Controls.Add($genreLabel) $paysLabel = New-Object System.Windows.Forms.Label $paysLabel.Text = "Pays de production :" $paysLabel.AutoSize = $true $paysLabel.Location = New-Object System.Drawing.Point(10, 205) $modifForm.Controls.Add($paysLabel) # Créer une ComboBox pour le pays de production $paysComboBox = New-Object System.Windows.Forms.ComboBox $paysComboBox.AutoCompleteMode = "SuggestAppend" $paysComboBox.AutoCompleteSource = "ListItems" $paysComboBox.DropDownStyle = "DropDownList" $paysComboBox.Location = New-Object System.Drawing.Point(120, 200) $paysComboBox.Size = New-Object System.Drawing.Size(200, 20) # Récupérer les données pour la ComboBox $paysdeprod = $data | Select-Object -ExpandProperty PAYSDEPROD -Unique # Ajouter les données à la ComboBox $paysComboBox.Items.AddRange($paysdeprod) # Ajouter la ComboBox à votre formulaire $modifForm.Controls.Add($paysComboBox) # Créer un label pour le pays de production $paysLabel = New-Object System.Windows.Forms.Label $paysLabel.Text = "Pays de production :" $paysLabel.AutoSize = $true $paysLabel.Location = New-Object System.Drawing.Point(10, 205) # Ajouter le label à votre formulaire $modifForm.Controls.Add($paysLabel) ##DEBUT #Afficher les valeurs existantes dans les zones de texte du formulaire de modification $selection = $listBox.SelectedItem $resultat = Import-Csv "$auteurcsvFullPath" -Delimiter ";" | Where-Object { $_.TITREFILM -eq $selection } if ($resultat) { $titrefilmTextbox.Text = "" $titreTextbox.Text = "" $realisateurTextbox.Text = "" $producteurTextbox.Text = "" $anneeTextbox.Text = "" $genreComboBox.SelectedItem = "" $paysComboBox.SelectedItem = "" $sousTitreTextbox.Text = "" $numeroEpisodeTextbox.Text = "" $saisonTextbox.Text = "" $scenaristeTextbox.Text = "" $codeOeuvreTextbox.Text = "" $dureefilmTextbox.text = "" $titrefilm = $resultat.TITREFILM $titre = $resultat.TITRECORRIGER $realisateur = $resultat.REALISATEUR $producteur = $resultat.PRODUCTION $annee = $resultat.ANNEEDEPRODUCTION $genre = $resultat.GENRE $sousTitre = $resultat.SOUSTITRE $numeroEpisode = $resultat.NUMEROEPISODE $saison = $resultat.SAISON $scenariste = $resultat.SCENARISTE $codeOeuvre = $resultat.CODEOEUVRE $pays = $resultat.PAYSDEPROD $dureefilm = $resultat.DUREE if (!$sousTitre) { $sousTitre = "O" } if (!$numeroEpisode) { $numeroEpisode = "O" } if (!$saison) { $saison = "O" } if (!$scenariste) { $scenariste = "O" } if (!$codeOeuvre) { $codeOeuvre = "O" } } else { $titrefilm = "" $titre = "" $realisateur = "" $producteur = "" $annee = "" $genre = "" $sousTitre = "O" $numeroEpisode = "O" $saison = "O" $scenariste = "O" $codeOeuvre = "O" } $titrefilmTextbox.text = $titrefilm $dureefilmTextbox.text = $dureefilm $titreTextbox.Text = $titre $realisateurTextbox.Text = $realisateur $producteurTextbox.Text = $producteur $anneeTextbox.Text = $annee $genreComboBox.SelectedItem = $genre $paysComboBox.SelectedItem = $pays $sousTitreTextbox.Text = $sousTitre $numeroEpisodeTextbox.Text = $numeroEpisode $saisonTextbox.Text = $saison $scenaristeTextbox.Text = $scenariste $codeOeuvreTextbox.Text = $codeOeuvre ## FIN # Ajouter le bouton Play $btnPlay2 = New-Object System.Windows.Forms.Button $btnPlay2.Location = New-Object System.Drawing.Point(230, 380) $btnPlay2.Size = New-Object System.Drawing.Size(100, 45) $btnPlay2.Text = "RECH DUREE" $btnplay2.Enabled = $true $btnPlay2.Add_Click({ Rechercheduree }) $modifForm.Controls.Add($btnPlay2) # Créer un bouton pour enregistrer les nouvelles valeurs $enregistrerButton = New-Object System.Windows.Forms.Button $enregistrerButton.Location = New-Object System.Drawing.Point(90, 380) $enregistrerButton.Size = New-Object System.Drawing.Size(120, 45) $enregistrerButton.Text = "ENREGISTRER" $modifForm.Controls.Add($enregistrerButton) # Événement pour le clic sur le bouton "Enregistrer" ##DEBUT $enregistrerButton.Add_Click({ # Vérification si les variables sont vides $variables = @($titrefilmTextbox.text, $titreTextbox.Text, $realisateurTextbox.Text, $producteurTextbox.Text, $anneeTextbox.Text, $genreComboBox.SelectedItem, $paysComboBox.SelectedItem, $dureefilmTextbox.text) $variableNames = @("Titre du film", "Titre corrigé", "Réalisateur", "Producteur", "Année de production", "Genre", "Pays de production", "Durée du film") $emptyVariables = for ($i = 0; $i -lt $variables.Length; $i++) { if ([string]::IsNullOrWhiteSpace($variables[$i])) { $variableNames[$i] } } # Supposons que vous devez afficher une boîte de dialogue if ($emptyVariables) { $message = "Les variables suivantes sont vides :`n" + ($emptyVariables -join "`n") + "`nVoulez-vous continuer ?" $caption = "Variables manquantes" # Utilisation de la méthode MessageBox::Show pour afficher la boîte de dialogue $result = [System.Windows.Forms.MessageBox]::Show($message, $caption, [System.Windows.Forms.MessageBoxButtons]::YesNo, [System.Windows.Forms.MessageBoxIcon]::Question) if ($result -eq [System.Windows.Forms.DialogResult]::No) { Write-Host "Opération annulée par l'utilisateur." return } } # Continuer le script si l'utilisateur choisit de continuer Write-Host "Continuation du script..." # Importez le contenu du fichier CSV d'origine dans une variable $data = Import-Csv "$auteurcsvFullPath" -Delimiter ";" -Encoding Default # Recherchez la ligne correspondant à l'élément sélectionné dans votre liste $selection = $listbox.SelectedItem $row = $data | Where-Object { $_.TITREFILM -eq $selection } # Si une ligne correspondante est trouvée, mettez à jour les valeurs if ($row) { $row.TITREFILM = $titrefilmTextbox.Text $row.TITRECORRIGER = $titreTextbox.Text $row.REALISATEUR = $realisateurTextbox.Text $row.PRODUCTION = $producteurTextbox.Text $row.ANNEEDEPRODUCTION = $anneeTextbox.Text $row.GENRE = $genreComboBox.SelectedItem $row.PAYSDEPROD = $paysComboBox.SelectedItem $row.SOUSTITRE = $sousTitreTextbox.Text $row.NUMEROEPISODE = $numeroEpisodeTextbox.Text $row.SAISON = $saisonTextbox.Text $row.SCENARISTE = $scenaristeTextbox.Text $row.CODEOEUVRE = $codeOeuvreTextbox.Text $dureeFilmValue = $dureefilmTextbox.Text if ([string]::IsNullOrEmpty($dureeFilmValue)) { # La valeur de la durée est vide, vous pouvez continuer sans vérification $row.DUREE = $dureeFilmValue # Exportez les données mises à jour dans le fichier CSV d'origine $data | Export-Csv "C:\Users\$username\Desktop\LOG et SCAM\Auteur\auteur.csv" -Delimiter ";" -NoTypeInformation -Encoding UTF8 [System.Windows.Forms.MessageBox]::Show("Les modifications ont été enregistrées.", "Enregistrement des modifications", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information) $modifForm.Close() } else { $dureePattern = "^([01]?[0-9]|2[0-3]):[0-5][0-9]:[0-5][0-9]$" if ($dureeFilmValue -match $dureePattern) { $row.DUREE = $dureeFilmValue # Exportez les données mises à jour dans le fichier CSV d'origine $data | Export-Csv "$auteurcsvFullPath" -Delimiter ";" -NoTypeInformation -Encoding UTF8 [System.Windows.Forms.MessageBox]::Show("Les modifications ont été enregistrées.", "Enregistrement des modifications", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information) $modifForm.Close() } else { # La valeur de la durée n'est pas au bon format, affichez un message d'erreur [System.Windows.Forms.MessageBox]::Show("Le format de la durée doit être hh:mm:ss.", "Erreur de format", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error) } } } else { # Si aucune ligne correspondante n'est trouvée, affichez un message d'erreur [System.Windows.Forms.MessageBox]::Show("Aucune ligne correspondante trouvée dans le fichier CSV.", "Erreur de modification", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Error) } }) # Créer un bouton pour supprimer la ligne sélectionnée $supprimerButton = New-Object System.Windows.Forms.Button $supprimerButton.Location = New-Object System.Drawing.Point(10, 380) $supprimerButton.Size = New-Object System.Drawing.Size(75, 45) $supprimerButton.Text = "SUPP" $modifForm.Controls.Add($supprimerButton) $supprimerButton.Add_Click({ # Demander une confirmation avant de supprimer l'élément $resultat = [System.Windows.Forms.MessageBox]::Show("Êtes-vous sûr de vouloir supprimer $($resultat.TITREFILM) ?", "Confirmation de suppression", [System.Windows.Forms.MessageBoxButtons]::YesNo, [System.Windows.Forms.MessageBoxIcon]::Warning) if ($resultat -eq [System.Windows.Forms.DialogResult]::Yes) { # Importez le contenu du fichier CSV d'origine dans une variable $data = Import-Csv "$auteurcsvFullPath" -Delimiter ";" -Encoding UTF8 # Recherchez la ligne correspondant à l'élément sélectionné dans votre liste $selection = $listbox.SelectedItem $row = $data | Where-Object { $_.TITREFILM -eq $selection } # Si une ligne correspondante est trouvée, supprimez-la du tableau et exportez les données mises à jour dans le fichier CSV d'origine if ($row) { $data = $data | Where-Object { $_.TITREFILM -ne $selection } $data | Export-Csv "$auteurcsvFullPath" -Delimiter ";" -NoTypeInformation -Encoding UTF8 [System.Windows.Forms.MessageBox]::Show("L'élément a été supprimé.", "Suppression de l'élément", [System.Windows.Forms.MessageBoxButtons]::OK, [System.Windows.Forms.MessageBoxIcon]::Information) $modifForm.Close() # Mettre à jour la liste des résultats dans la liste box après la suppression de l'élément $resultats = $data | Where-Object { $_.TITREFILM.Normalize([Text.NormalizationForm]::FormC) -like "*$recherche*" } $listbox.Items.Clear() foreach ($resultat in $resultats) { $listbox.Items.Add($resultat.TITREFILM) } } } }) ##FIN # Afficher la fenêtre de formulaire pour la modification des valeurs $modifForm.ShowDialog() | Out-Null }) $DiffusioncertButton.Add_Click({ $global:myVariable = $listbox.SelectedItem # Lancement pour recherche les créer le csv diffusion à partir des logs #& "$diffusioncsvps1FullPath" # Lancement de script2.ps1 une fois que script1.ps1 est terminé & "$diffusionps1FullPath" }) <#$nokbutton.Add_Click({ & "$diffusioncsvps1FullPath" # Importer les données des fichiers CSV dans des tableaux $diffusion = @(Import-Csv -Path "$diffusioncsvFullPath" -Encoding UTF8 -Delimiter ";") $auteur = @(Import-Csv -Path "$auteurcsvFullPath" -Encoding UTF8 -Delimiter ";") # Créer un index sur la colonne TITREFILM de auteur $index = @{} foreach ($item in $auteur) { $index[$item.TITREFILM] = $true } # Initialiser le tableau pour les nouveaux enregistrements $newRows = @() # Parcourir les enregistrements de diffusion foreach ($row in $diffusion) { # Vérifier si le Clipname existe dans TITREFILM en utilisant l'index $match = $false if ($index.ContainsKey($row.Clipname)) { $match = $true } # Si le Clipname n'existe pas dans TITREFILM, l'ajouter au tableau de nouveaux enregistrements if (!$match) { # Vérifier si le nouveau film a déjà été ajouté $added = $false foreach ($item in $newRows) { if ($item.TITREFILM -eq $row.Clipname) { $added = $true break } } # Ajouter le nouveau film si ce n'est pas déjà ajouté if (!$added) { $newRow = New-Object PSObject -Property @{ TITREFILM = $row.Clipname } $newRows += $newRow $newRowsCount++ } } } # Ajouter les nouveaux enregistrements au tableau de TITREFILM $auteur += $newRows # Exporter les données mises à jour dans le fichier CSV $auteur | Export-Csv -Path "$auteurcsvFullPath" -NoTypeInformation -Encoding UTF8 -Delimiter ";" # Afficher le nombre de nouveaux enregistrements ajoutés $message = "$($newRows.Count) nouveaux enregistrements ont été ajoutés." [System.Windows.Forms.MessageBox]::Show($message, "Nouveaux enregistrements") $resultatLabel.Text = "$($newRows.Count) NOK trouvés." # Récupérer la ListBox $listBox = $form.Controls.Find("MaListbox", $true)[0] # Vider la ListBox $listBox.Items.Clear() # Ajouter les nouveaux enregistrements à la ListBox foreach ($item in $newRows) { $listBox.Items.Add($item.TITREFILM) $modifierButton.Enabled = $True } })#> $nokbutton.Add_Click({ <# Importer les données des fichiers CSV $diffusion = Import-Csv -Path "$diffusioncsvFullPath" -Encoding UTF8 -Delimiter ";" $auteur = Import-Csv -Path "$auteurcsvFullPath" -Encoding UTF8 -Delimiter ";" # Créer un index pour TITREFILM $index = @{} foreach ($item in $auteur) { $index[$item.TITREFILM] = $true } # Utiliser une liste pour les nouveaux enregistrements $newRows = New-Object 'System.Collections.Generic.List[object]' $addedTitles = New-Object 'System.Collections.Generic.HashSet[string]' # Parcourir les enregistrements de diffusion foreach ($row in $diffusion) { if (-not $index.ContainsKey($row.Clipname) -and -not $addedTitles.Contains($row.Clipname)) { $newRow = New-Object PSObject -Property @{ TITREFILM = $row.Clipname } $newRows.Add($newRow) $addedTitles.Add($row.Clipname) } } # Ajouter les nouveaux enregistrements à $auteur $auteur += $newRows # Exporter les données mises à jour $auteur | Export-Csv -Path "$auteurcsvFullPath" -NoTypeInformation -Encoding UTF8 -Delimiter ";" # Afficher le nombre de nouveaux enregistrements $message = "$($newRows.Count) nouveaux enregistrements ont été ajoutés." [System.Windows.Forms.MessageBox]::Show($message, "Nouveaux enregistrements") $resultatLabel.Text = "$($newRows.Count) NOK trouvés." # Mettre à jour la ListBox $listBox = $form.Controls.Find("MaListbox", $true)[0] $listBox.Items.Clear() foreach ($item in $newRows) { $listBox.Items.Add($item.TITREFILM) } $modifierButton.Enabled = $newRows.Count -gt 0#> Nok }) $doublonButton.Add_Click({ RechercherDoublons }) # Définir une fonction pour exécuter le code après l'ouverture du formulaire function RunAfterFormLoad { # Importer les données des fichiers CSV $diffusion = Import-Csv -Path "$diffusioncsvFullPath" -Encoding UTF8 -Delimiter ";" $auteur = Import-Csv -Path "$auteurcsvFullPath" -Encoding UTF8 -Delimiter ";" # Créer un index pour TITREFILM $index = @{} foreach ($item in $auteur) { $index[$item.TITREFILM] = $true } # Utiliser une liste pour les nouveaux enregistrements $newRows = New-Object 'System.Collections.Generic.List[object]' $addedTitles = New-Object 'System.Collections.Generic.HashSet[string]' # Parcourir les enregistrements de diffusion foreach ($row in $diffusion) { if (-not $index.ContainsKey($row.Clipname) -and -not $addedTitles.Contains($row.Clipname)) { $newRow = New-Object PSObject -Property @{ TITREFILM = $row.Clipname } $newRows.Add($newRow) $addedTitles.Add($row.Clipname) } } # Ajouter les nouveaux enregistrements à $auteur $auteur += $newRows # Exporter les données mises à jour $auteur | Export-Csv -Path "$auteurcsvFullPath" -NoTypeInformation -Encoding UTF8 -Delimiter ";" # Afficher le nombre de nouveaux enregistrements $message = "$($newRows.Count) nouveaux sujets ont été ajoutés." [System.Windows.Forms.MessageBox]::Show($message, "Nouveaux enregistrements") #$resultatLabel.Text = "$($newRows.Count) NOK trouvés." # Mettre à jour la ListBox $listBox = $form.Controls.Find("MaListbox", $true)[0] $listBox.Items.Clear() foreach ($item in $newRows) { $listBox.Items.Add($item.TITREFILM) } $modifierButton.Enabled = $newRows.Count -gt 0 } # Souscrire à l'événement Load du formulaire $form.Add_Load({ RunAfterFormLoad }) # Afficher le formulaire $form.ShowDialog() | Out-Null