Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Enregistrer un CSV sans avertissement et directement dans le même fichier

4 réponses
Avatar
sebastienk
Bonjour,

Lorsqu'on enregistre un CSV avec Excel (Fichier > Enregistrer), on a
toujours deux =E9tapes:
- enregistrer le CSV sous
- avertissement sur la perte de format

Je souhaite modifier le comportement d'Excel 2000 =E0 l'aide de
PERSO.xls, dans un module de classe avec un Sub de type Private Sub
App_WorkbookBeforeSave, pour qu'Excel enregistre directement dans le
fichier ouvert et sans message d'avertissement.

Pouvez-vous m'aider?

Merci,
S=E9bastien

4 réponses

Avatar
hasco
Cette sub et Cette fonction permette d'enregistrer le fichier au format csv
sans faire apparître l'avertissement concerné.

Sub EnregistrerCSV()
Dim NomFic

NomFic = EnregistrerSous(ThisWorkbook.Path)

If NomFic <> False Then
ThisWorkbook.SaveAs Filename:=NomFic, FileFormat:=xlCSV
End If

End Sub



Function EnregistrerSous(Optional Dossier As String = "")

If Dossier <> "" Then
'Positionne le répertoire par défaut
If Not CBool(Len(Dir(Dossier, vbDirectory))) Then
MkDir Dossier
End If

ChDrive Dossier
ChDir Dossier
End If

EnregistrerSous = Application.GetSaveAsFilename( _
fileFilter:="Text Files (*.csv), *.csv")


End Function



Bonjour,

Lorsqu'on enregistre un CSV avec Excel (Fichier > Enregistrer), on a
toujours deux étapes:
- enregistrer le CSV sous
- avertissement sur la perte de format

Je souhaite modifier le comportement d'Excel 2000 à l'aide de
PERSO.xls, dans un module de classe avec un Sub de type Private Sub
App_WorkbookBeforeSave, pour qu'Excel enregistre directement dans le
fichier ouvert et sans message d'avertissement.

Pouvez-vous m'aider?

Merci,
Sébastien




Avatar
sebastienk
On 25 avr, 12:26, hasco wrote:
Cette sub et Cette fonction permette d'enregistrer le fichier au format c sv
sans faire apparître l'avertissement concerné.

Sub EnregistrerCSV()
Dim NomFic

NomFic = EnregistrerSous(ThisWorkbook.Path)

If NomFic <> False Then
ThisWorkbook.SaveAs Filename:=NomFic, FileFormat:=xlCSV
End If

End Sub

Function EnregistrerSous(Optional Dossier As String = "")

If Dossier <> "" Then
'Positionne le répertoire par défaut
If Not CBool(Len(Dir(Dossier, vbDirectory))) Then
MkDir Dossier
End If

ChDrive Dossier
ChDir Dossier
End If

EnregistrerSous = Application.GetSaveAsFilename( _
fileFilter:="Text Files (*.csv), *.csv")

End Function




Bonjour,

Lorsqu'on enregistre un CSV avec Excel (Fichier > Enregistrer), on a
toujours deux étapes:
- enregistrer le CSV sous
- avertissement sur la perte de format

Je souhaite modifier le comportement d'Excel 2000 à l'aide de
PERSO.xls, dans un module de classe avec un Sub de type Private Sub
App_WorkbookBeforeSave, pour qu'Excel enregistre directement dans le
fichier ouvert et sans message d'avertissement.

Pouvez-vous m'aider?

Merci,
Sébastien- Masquer le texte des messages précédents -


- Afficher le texte des messages précédents -


Merci pour ta réponse hasco!

J'ai un problème cependant: je ne veux pas créer un bouton pour
enregistrer, mais utiliser directement l'enregistrement d'Excel. C'est
pour ça que je veux utiliser la sub App_WorkbookBeforeSave.

Quelques détails:

Dans un module de classe, j'ai:

Public WithEvents App As Application

Private Sub App_WorkbookBeforeSave(ByVal Wb As Workbook, ByVal
SaveAsUI As Boolean, Cancel As Boolean)

fType = Wb.FileFormat

Cancel = False

If fType = 6 Then
Cancel = True
Call EnregistrerCSV(Wb)
End If


End Sub

Ainsi, je pense y arriver. Le seul souci, c'est que lorsque la sub
EnregistrerCSV veut enregistrer le fichier, App_WorkbookBeforeSave se
déclenche pour la deuxième fois (donc une deuxième fenêtre Enregist rer
sous apparaît). Et rien n'est sauvegardé à la fin! Une idée?

Merci pour ton aide,
Sébastien


Avatar
hasco
Une idée?

J'ai déjà essayé ce genre de chose et ne suis arrivé à rien de concluant
aussi ai-je laissé tombé.

toutefois peut-être qu'en modifiant le comportement du sous-menu Enregistrer
ou Enregistrer sous par l'objet commandBar et la propriét OnAction est
controls idoines, dans l'évènement open ou activate du Workbook, tu pourrais
lancer ta macro d'enregistrement.

Ne pas oublier de rétablir le menu normal dans WorkbookDeactivate ou
beforeclose!

Amicalement
Ges
Avatar
sebastienk
On 26 avr, 15:00, hasco wrote:
Une idée?

J'ai déjà essayé ce genre de chose et ne suis arrivé à rien de concluant
aussi ai-je laissé tombé.

toutefois peut-être qu'en modifiant le comportement du sous-menu Enregi strer
ou Enregistrer sous par l'objet commandBar et la propriét OnAction est
controls idoines, dans l'évènement open ou activate du Workbook, tu p ourrais
lancer ta macro d'enregistrement.

Ne pas oublier de rétablir le menu normal dans WorkbookDeactivate ou
beforeclose!

Amicalement
Ges


J'ai affecté à un bouton "Save" l'enregistrement et ça marche nickel.

Public WithEvents App As Application

Private Sub App_WorkbookOpen(ByVal Wb As Excel.Workbook)
CommandBars("BarrePerso").Controls("Save").OnAction = "Enregistrer"
End Sub

Sub Enregistrer()

fType = ActiveWorkbook.FileFormat
fNom = ActiveWorkbook.FullName

If fType = 6 Then
Application.DisplayAlerts = False
On Error GoTo AnnuleSauvegarde
ActiveWorkbook.SaveAs Filename:=fNom, FileFormat:=6
Application.DisplayAlerts = True
Else
ActiveWorkbook.Save
End If

AnnuleSauvegarde:

End Sub

Le type 6 correspond chez moi à un CSV.