Excel csv vers xlsm [Résolu]

Signaler
Messages postés
20
Date d'inscription
vendredi 11 mai 2018
Statut
Membre
Dernière intervention
8 mai 2020
-
Messages postés
28864
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 juillet 2020
-
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

2 réponses

Messages postés
28864
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 juillet 2020
2 590
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 ?



Messages postés
20
Date d'inscription
vendredi 11 mai 2018
Statut
Membre
Dernière intervention
8 mai 2020

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
Messages postés
28864
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
3 juillet 2020
2 590

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.