Microsoft 365 Traiter un fichier CSV qui est ouvert

  • Initiateur de la discussion Initiateur de la discussion gsx-air
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

gsx-air

XLDnaute Nouveau
Bonjour à tous
je butte sur un problème
j'utilise un logiciel qui me permet de générer des nomenclatures de pièces en cliquant sur un bouton export cela m'ouvre un fichier CSV dans EXCEL
aujourd'hui, je copie colle les infos que j'ai besoin dans un fichier Excel avec macro qui me permet de générer des exports dans différent format vers différents services, mais c'est plutôt fastidieux
je souhaite donc automatiser ce copier-coller, mais je n'arrive pas à trouver via le VBA ce fichier CSV qui est ouvert
ce fichier est un fichier temporaire puisque non-enregistrer (le fichier s'appelle tmp1 le suivant tmp2 .... et Excel me dit "emplacement temp"

j'ai testé ceci
VB:
Function NomAutreClasseur() As String
Dim Wkb As Workbook
    NomClasseur = ""
    For Each Wkb In Application.Workbooks
        If Left(Wkb.Name, 3) = "tmp" Then
            NomClasseur = Wkb.Name
            Exit For
        End If
    Next Wkb
End Function

cela fonctionne si j'ouvre plusieurs fichiers Excel, mais je ne trouve pas mon CSV
autre point, mon fichier CSV est ouvert dans une autre application Excel (lorsque j'ouvre mon gestionnaire de tache, j'ai un Excel avec en dessous tous les fichiers ouvert et un autre Excel avec en dessous le fichier CSV)

j'ai testé un bouton macro dans le ruban, là cela fonctionne presque, (si mon fichier macro est déjà ouvert cela me le rouvre dans la seconde appli Excel) mais cela m'obligerait à installer une barre d'outils sur plusieurs postes et je souhaiterais éviter cela

si quelqu'un a une piste, je suis preneur
je pense que le problème vient du fait que j'ai deux applis Excel d'ouvertes
qu'en pensez-vous
Merci de votre aide.
 
Solution
Bonjour à tous
j'ai trouvé une solution avec le code suivant
je dois être franc, je ne maitrise pas ce code (récup du net)
je l'ai adapté et cela fonctionne
soyez indulgent mes modifs sont peut-être un peu brouillon
encore merci pour le temps passé 😉✌



VB:
Option Explicit

  Declare PtrSafe Function FindWindowEx Lib "user32" Alias "FindWindowExA" _
  (ByVal hWnd1 As Long, ByVal hWnd2 As Long, ByVal lpsz1 As String, ByVal lpsz2 As String) As Long
  Declare PtrSafe Function GetClassName Lib "user32" Alias "GetClassNameA" _
  (ByVal hwnd As Long, ByVal lpClassName As String, ByVal nMaxCount As Long) As Long
  Declare PtrSafe Function IIDFromString Lib "ole32" (ByVal lpsz As LongPtr, ByRef lpiid As UUID) As Long
  Declare PtrSafe Function...
Bonsoir gsx-air,

Perso ce que je ferais et que je fais dans ma société, mettre votre macro dans le classeur de macros personnelles qui s'ouvre automatiquement avec Excel et se trouve dans le dossier
C:\Users\*NOMàCHANGER*\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB

Du coup, lorsque votre CSV sera ouvert, vous aurez juste à lancer la macro 🤔

A+
 
Bonsoir gsx-air,

Perso ce que je ferais et que je fais dans ma société, mettre votre macro dans le classeur de macros personnelles qui s'ouvre automatiquement avec Excel et se trouve dans le dossier
C:\Users\*NOMàCHANGER*\AppData\Roaming\Microsoft\Excel\XLSTART\PERSONAL.XLSB

Du coup, lorsque votre CSV sera ouvert, vous aurez juste à lancer la macro 🤔

A+
En effet mais je ne souhaite pas mettre de bouton macro dans le ruban (plusieurs poste à modifier)
Et autre problème que je n'arrive pas a contourner c'est que lorsque je lance la macro je n'arrive pas a passer d'un fichier a l'autre(csv vers fichier permettant de générer mes exports ) (certainement un manque de connaissance de ma part)
Comme il y a plusieurs instances Excel cela me reouvre mon fichier d'export dans la nouvelle instance et je n'est pas acces en écriture puisque déjà ouvert dans la première instance

J'espère être assez clair
 
En effet mais je ne souhaite pas mettre de bouton macro dans le ruban (plusieurs poste à modifier)
Et autre problème que je n'arrive pas a contourner c'est que lorsque je lance la macro je n'arrive pas a passer d'un fichier a l'autre(csv vers fichier permettant de générer mes exports ) (certainement un manque de connaissance de ma part)
Comme il y a plusieurs instances Excel cela me reouvre mon fichier d'export dans la nouvelle instance et je n'est pas acces en écriture puisque déjà ouvert dans la première instance

J'espère être assez clair
Re
Et bien enregistrez votre csv dans un dossier spécifique sur un serveur, fermez le et ouvrez votre ficher avec macro 🤔
Quel est le problème, je ne comprends pas !
 
Bonsoir gsx-air
pas clair ce fichier temp, pourquoi ouvrir un csv dans une instance excel (workbpoks.open) le fichier chargé se trouve t'il dans un nouveau classeur en memoire? Autres solutions en vba : open file (via open, ou via fso.opentextfile)
Quelle est la transformation entre le fichier csv de depart (source à définir ou au sélectionner?) et le fichier de nomenclature?
Fournir le fichier de départ, le résultat attendu, et la description de la transformation.
 
Re
Et bien enregistrez votre csv dans un dossier spécifique sur un serveur, fermez le et ouvrez votre ficher avec macro 🤔
Quel est le problème, je ne comprends pas !
Bonjour
Disons que je cherche une solution rapide, car je réalise cette opération régulièrement (plusieurs fois par jour) mais en effet si je n'arrive pas à traiter ce fichier ouvert, je vais devoir choisir une solution moins confort
 
Bonjour,
Je ne suis pas sûr d'avoir bien compris. Tu veux identifier le fichier csv ouvert ? S'il n'y en a qu'un d'ouvert à la fois, c'est possible. Ouvre le classeur joint. Ensuite, à chaque classeur ouvert un msgbox affiche son nom. Partant de là, tu dois modifier la macro :

VB:
Sub NomClasseur(wb)
  MsgBox wb.Name
End Sub

Pour tester s'il s'agit d'un CSV. Fais alors ton traitement. La variable représentant le classeur est "wb". Qunad la macro est au point, enreegistre le classeur comme une macro complémentaire. Il faut le faire sur tous les postes 🙁🙁.

Daniel
 

Pièces jointes

Bonsoir gsx-air
pas clair ce fichier temp, pourquoi ouvrir un csv dans une instance excel (workbpoks.open) le fichier chargé se trouve t'il dans un nouveau classeur en memoire? Autres solutions en vba : open file (via open, ou via fso.opentextfile)
Quelle est la transformation entre le fichier csv de depart (source à définir ou au sélectionner?) et le fichier de nomenclature?
Fournir le fichier de départ, le résultat attendu, et la description de la transformation.
Bonjour
j'utilise enterprise PDM un logiciel de gestion de pièces (que je dessine) ce logiciel me crée des nomenclatures et dans ce logiciel, j'ai un bouton export CSV
le fichier est ouvert directement dans Excel "tmp1.csv" mais je pense qu'il n'est enregistré nulle part à ce moment-là et je ne souhaite pas l'enregistrer, c'est à cet instant que je souhaiterais le traiter
mais ce fichier CSV s'est ouvert dans une autre instance de Excel et je n'arrive pas à naviguer via le vba entre ces deux instances
 
Bonjour,
Je ne suis pas sûr d'avoir bien compris. Tu veux identifier le fichier csv ouvert ? S'il n'y en a qu'un d'ouvert à la fois, c'est possible. Ouvre le classeur joint. Ensuite, à chaque classeur ouvert un msgbox affiche son nom. Partant de là, tu dois modifier la macro :

VB:
Sub NomClasseur(wb)
  MsgBox wb.Name
End Sub

Pour tester s'il s'agit d'un CSV. Fais alors ton traitement. La variable représentant le classeur est "wb". Qunad la macro est au point, enreegistre le classeur comme une macro complémentaire. Il faut le faire sur tous les postes 🙁🙁.

Daniel
screenshot_13.png

Bonjour
je le comprends comme ça, mais je ne suis pas expert
oui, je peux trouver le nom du fichier sans problème
mais pour moi le fichier csv est ouvert dans une autre application excel
donc quand je lance la macro, je suis dans une appli excel sans pouvoir acceder à l'autre et inversement
D'ailleurs si j'accède à l'éditeur VBA depuis le CSV, j'ai une seconde fenêtre éditeur vba qui s'ouvre tous les projets ne sont pas dans la même fenêtre.
 
Regarde la pièce jointe 1212507
Bonjour
je le comprends comme ça, mais je ne suis pas expert
oui, je peux trouver le nom du fichier sans problème
mais pour moi le fichier csv est ouvert dans une autre application excel
donc quand je lance la macro, je suis dans une appli excel sans pouvoir acceder à l'autre et inversement
D'ailleurs si j'accède à l'éditeur VBA depuis le CSV, j'ai une seconde fenêtre éditeur vba qui s'ouvre tous les projets ne sont pas dans la même fenêtre.
un essai, copie/colle csv dans une nouvelle feuille de ton classeur de travail.

Copier/coller code dans un module standard de ton fichier de travail et exécute le code.
VB:
Option Explicit

Sub CopierDepuisAutreInstance()
    Dim appExcel2 As Object
    Dim wbSource As Workbook
    Dim wsSource As Worksheet
    Dim wbDestination As Workbook
    Dim wsDestination As Worksheet
    Dim sourceFileName As String
    
    sourceFileName = "tmp*.csv"

    On Error Resume Next
    Set appExcel2 = GetObject(, "Excel.Application")
    On Error GoTo 0
    
    If appExcel2 Is Nothing Then
        MsgBox "Impossible de trouver la deuxième instance d'Excel."
        Exit Sub
    End If
    
    For Each wb In appExcel2.Workbooks
        If wb.Name Like sourceFileName Then
            Set wbSource = wb
            Exit For
        End If
    Next wb
    
    If wbSource Is Nothing Then
        MsgBox "Impossible de trouver le fichier CSV dans la deuxième instance d'Excel."
        Exit Sub
    End If
    
    Set wsSource = wbSource.Sheets(1)
    
    Set wbDestination = ThisWorkbook
    Set wsDestination = wbDestination.Sheets.Add
    
    wsSource.UsedRange.Copy
    
    wsDestination.Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
    
    ' Message de confirmation
    MsgBox "Données copiées avec succès de " & wbSource.Name & " vers le classeur de travail."
End Sub
 
Bonjour gsx-air

Tu nous dis bien "le fichier est ouvert directement dans Excel "tmp1.csv"
Donc Excel que je nommerai Excel1 est bien ouvert

Alors pourquoi lancer une autre instance, il suffit d'aller dans le menu fichier -> Ouvrir
et ouvrir le fichier contenant les macros, de plus cela peut-être fait en automatique

A+
 
Bonjour gsx-air

Tu nous dis bien "le fichier est ouvert directement dans Excel "tmp1.csv"
Donc Excel que je nommerai Excel1 est bien ouvert

Alors pourquoi lancer une autre instance, il suffit d'aller dans le menu fichier -> Ouvrir
et ouvrir le fichier contenant les macros, de plus cela peut-être fait en automatique

A+
Bonjour
en fait, c'est l'inverse, je travaille avec différent fichier Excel ouvert "liste à faire" "demande de chiffrage".... (tout c'est fichier s'ouvre sous la meme instance d'Excel
Mais lorsque via mon logiciel enterprise PDM, je clique sur le bouton export cela m'ouvre le fichier "tmp.. .cvs" dans une autre instance de excel
et je souhaiterais via une macro récupérer les infos du fichier CSV pour les traiter via un autre fichier Excel mais comme il y a plusieurs instances, je n'y arrive pas
 
un essai, copie/colle csv dans une nouvelle feuille de ton classeur de travail.

Copier/coller code dans un module standard de ton fichier de travail et exécute le code.
VB:
Option Explicit

Sub CopierDepuisAutreInstance()
    Dim appExcel2 As Object
    Dim wbSource As Workbook
    Dim wsSource As Worksheet
    Dim wbDestination As Workbook
    Dim wsDestination As Worksheet
    Dim sourceFileName As String
   
    sourceFileName = "tmp*.csv"

    On Error Resume Next
    Set appExcel2 = GetObject(, "Excel.Application")
    On Error GoTo 0
   
    If appExcel2 Is Nothing Then
        MsgBox "Impossible de trouver la deuxième instance d'Excel."
        Exit Sub
    End If
   
    For Each wb In appExcel2.Workbooks
        If wb.Name Like sourceFileName Then
            Set wbSource = wb
            Exit For
        End If
    Next wb
   
    If wbSource Is Nothing Then
        MsgBox "Impossible de trouver le fichier CSV dans la deuxième instance d'Excel."
        Exit Sub
    End If
   
    Set wsSource = wbSource.Sheets(1)
   
    Set wbDestination = ThisWorkbook
    Set wsDestination = wbDestination.Sheets.Add
   
    wsSource.UsedRange.Copy
   
    wsDestination.Range("A1").PasteSpecial xlPasteValuesAndNumberFormats
   
    ' Message de confirmation
    MsgBox "Données copiées avec succès de " & wbSource.Name & " vers le classeur de travail."
End Sub
Salut
j'ai testé le code
je remarque que si j'ai une ou deux instances excel a aucun moment, je n'ai le message "MsgBox "Impossible de trouver la deuxième instance d'Excel.""
sinon la boucle fonctionne, elle scrute les fichiers ouvert, mais que dans une seule instance, je pense
merci pour le temps passé👍
 
Re,
Bonjour
en fait, c'est l'inverse, je travaille avec différent fichier Excel ouvert "liste à faire" "demande de chiffrage".... (tout c'est fichier s'ouvre sous la meme instance d'Excel
Mais lorsque via mon logiciel enterprise PDM, je clique sur le bouton export cela m'ouvre le fichier "tmp.. .cvs" dans une autre instance de excel
et je souhaiterais via une macro récupérer les infos du fichier CSV pour les traiter via un autre fichier Excel mais comme il y a plusieurs instances, je n'y arrive pas
J'entends bien que d'autres fichiers sont ouverts

Mais tu nous dis bien "aujourd'hui, je copie colle les infos que j'ai besoin dans un fichier Excel avec macro qui me permet de générer des exports dans différent format vers différents services, mais c'est plutôt fastidieux"

Donc ce fameux fichier Excel ou tu colles les données, pourquoi ne pas l'ouvrir depuis le fichier "temp1.csv" 🤔

Bon après si tu ne veux pas faire autrement que ton habitude 🙄
Perso, j'arrête là ma tentative d'aide avec toi

Bonne continuation
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

D
  • Question Question
2
Réponses
28
Affichages
1 K
Deleted member 441486
D
Réponses
40
Affichages
2 K
Réponses
8
Affichages
658
Réponses
10
Affichages
491
Retour