Excel csv vers xlsm

Résolu/Fermé
__Juulien__ Messages postés 20 Date d'inscription vendredi 11 mai 2018 Statut Membre Dernière intervention 14 novembre 2020 - Modifié le 14 avril 2020 à 09:42
jordane45 Messages postés 38141 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 - 14 avril 2020 à 09:44
Bonjour,

J'ai des fichiers CSV que je souhaite insérer dans mon document actif à l'aide d'un bouton ( il permet d'actualiser les données de mon fichier ouvert )

Le problème et qu'après l'exécution de mon script powershell, les données ne s'ajoutent pas. Il y a seulement les anciennes données qui disparaissent.

Mon vba qui permet lancé mon script Powershell :
Sub Bouton1()

    strCommand = "Powershell -File ""\C:\Temp\Excel\Update_data"""
    Set WshShell = CreateObject("WScript.Shell")
    Set WshShellExec = WshShell.Exec(strCommand)
    strOutput = WshShellExec.StdOut.ReadAll
    MsgBox strOutput
    
End Sub

Mon fichier Powershell :
# Définir les emplacements et le séparateur 
$csv = "\C:\Temp\Excel\Update_data\Customer_hotline.csv" # Emplacement du fichier source 1
$csv2 = "\C:\Temp\Excel\Update_datal\Customer_consulting.csv" # Emplacement du fichier source 2
$xlsm = "\C:\Temp\Excel\Update_data\Customer_hotline_consulting.xlsm" # Emplacement du fichier final
$delimiter = "," # Séparateur

# Ouvrir le fichier et la feuille excel (fichier 1)
$excel = New-Object -ComObject excel.application
$Workbook = $Excel.Workbooks.Open($$xlsm)
$worksheet = $workbook.Worksheets.Item(1)
$worksheet.Cells.Clear()

# Ajout des données + formatage des données (fichier 1)
$TxtConnector = ("TEXT;" + $csv)
$Connector = $worksheet.QueryTables.add($TxtConnector,$worksheet.Range("A1"))
$query = $worksheet.QueryTables.item($Connector.name)
$query.TextFileOtherDelimiter = $delimiter
$query.TextFileParseType  = 1
$query.TextFileColumnDataTypes = ,2 * $worksheet.Cells.Columns.Count
$query.AdjustColumnWidth = 1
$query.TextFilePlatform = 65001

# Exécuter et supprimer la requête d'importation (fichier 1)
$query.Refresh()
$query.Delete()



# Ouvrir ouvrir feuille de calcul (fichier 2)
$worksheet2 = $workbook.Worksheets.Item(2)
$worksheet2.Cells.Clear()

# Ajout des données + formatage des données (fichier 2)
$TxtConnector = ("TEXT;" + $csv2)
$Connector = $worksheet2.QueryTables.add($TxtConnector,$worksheet2.Range("A1"))
$query = $worksheet2.QueryTables.item($Connector.name)
$query.TextFileOtherDelimiter = $delimiter
$query.TextFileParseType  = 1
$query.TextFileColumnDataTypes = ,2 * $worksheet2.Cells.Columns.Count
$query.AdjustColumnWidth = 1
$query.TextFilePlatform = 65001


# Exécuter et supprimer la requête d'importation (fichier 2)
$query.Refresh()
$query.Delete()

# Sauvegarder et fermer le fichier .xlsx
$Workbook.Save()
$excel.Quit()


EDIT : AJout des balises de code
A voir également:

2 réponses

jordane45 Messages postés 38141 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
14 avril 2020 à 09:03
Bonjour,

Tu essaies d'écrire dans le fichier qui est déjà ouvert depuis un script externe en powershell ? Je ne pense pas que ça fonctionne.

Il semble également qu'il manque une quote à la ligne 3 de ton powershell.

Et puis, vu que tu fais du VBA... pourquoi ne pas traiter l'import directement en VBA au lieu de passer par un script externe ?



2
__Juulien__ Messages postés 20 Date d'inscription vendredi 11 mai 2018 Statut Membre Dernière intervention 14 novembre 2020
14 avril 2020 à 09:38
Oui justement vu que le fichier est déjà ouvert, en utilisant le script Powershell cela fait comme si deux utilisateurs travaillent dessus simultanément.

J'ai décidé d'utiliser le script externe car j'en avais un à disposition, mais je pense que la solution d’utiliser entièrement du vba serait probablement mieux. Je n'ai juste aucune notion de VBA et n'ai pas trouvé ce qui me convenais sur le net pour modifier un fichier déjà ouvert.

Merci pour vos conseils
0
jordane45 Messages postés 38141 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 20 avril 2024 4 649
14 avril 2020 à 09:44

Oui justement vu que le fichier est déjà ouvert, en utilisant le script Powershell cela fait comme si deux utilisateurs travaillent dessus simultanément

Ben justement... on ne peut pas travailler à plusieurs sur un même fichier... sauf si il est "partagé"
Mais le fait de le faire depuis autre chose qu'excel lui même... je ne suis pas certain que ça marche.
A savoir que lorsque le fichier est partagé, pour voir les modifications faites par le second utilisateur, il faut faire un SAVE également de son côté pour que ça actualise de son côté.
- Le user2 fait une modif et sauvegarde
- Le user1 fait une sauvegarde et peut alors voir les modifs du user1

Je n'ai juste aucune notion de VBA

Mais, si tu as trouvé comment faire en powershell .. tu n'auras pas de mal à le faire en VBA. Le code est quasi le même ... les $ en moins.
0