Faire une fonction de menu pour enregistrer sous

olivierd

XLDnaute Junior
Bonjour,

Sans vouloir abuser de votre gentillesse (niveau archi débutant),
je cherche une macro qui tourne sous tous les excel windows et qui

enregistre sous "Nom-du-fichier.csv"
un tableau xls à 4 colonnes figées (a,b,c et d )
en csv avec un séparateur ; sur chaque champ
et une boite de dialogue pour choisir la destination du Nom-du-fichier.csv

Pour avoir en résultat:
Couleur;texture;Nom;Prix
Rouge;Satin;V100ABFG;12.50
...

Pour ensuite avoir un appel direct sur la barre de menu d'Excel

Pourriez-vous me donner quelques pistes ?

En vous remerciant

Amicalement
 

mromain

XLDnaute Barbatruc
Re : Faire une fonction de menu pour enregistrer sous

bonjour olivierd

voici un bout de code :

Code:
[COLOR="Blue"]Private Const[/COLOR] csvSeparator = ";"

[COLOR="Blue"]Sub [/COLOR]test()
[COLOR="Blue"]Dim [/COLOR]myFso, csvFile, csvFileName [COLOR="Blue"]As String[/COLOR], i [COLOR="Blue"]As Integer[/COLOR], j [COLOR="Blue"]As Integer[/COLOR], csvLine [COLOR="Blue"]As String[/COLOR]

[COLOR="Green"]'récupérer le nom du fichier à créer[/COLOR]
[COLOR="Blue"]Do[/COLOR]
    csvFileName = Application.GetSaveAsFilename(InitialFileName:=ThisWorkbook.Name & ".csv", filefilter:="Fichier CSV, *.csv")
[COLOR="Blue"]Loop Until[/COLOR] UCase(csvFileName) <> "FAUX"

[COLOR="Green"]'créer le fichier[/COLOR]
[COLOR="Blue"]Set[/COLOR] myFso = CreateObject("Scripting.FileSystemObject")
[COLOR="Blue"]Set[/COLOR] csvFile = myFso.CreateTextFile(Filename:=csvFileName, overwrite:=[COLOR="Blue"]True[/COLOR])

[COLOR="Blue"]With [/COLOR]ThisWorkbook.Sheets("[B][COLOR="Red"]Feuil1[/COLOR][/B]")
    [COLOR="Green"]'boucler sur toutes les lignes[/COLOR]
    [COLOR="Blue"]For [/COLOR]i = 1 [COLOR="Blue"]To [/COLOR].Cells(.Rows.Count, 1).End(xlUp).Row
        [COLOR="Green"]'initialiser la ligne CSV[/COLOR]
        csvLine = vbNullString
        [COLOR="Green"]'boucler sur les 4 colonnes[/COLOR]
        [COLOR="Blue"]For [/COLOR]j = 1 [COLOR="Blue"]To [/COLOR]4
            [COLOR="Green"]'créer la ligne[/COLOR]
            csvLine = csvLine & IIf(csvLine = vbNullString, vbNullString, csvSeparator) & .Cells(i, j).Text
        [COLOR="Blue"]Next [/COLOR]j
        [COLOR="Green"]'écrire la ligne dans le fichier[/COLOR]
        csvFile.WriteLine csvLine
    [COLOR="Blue"]Next [/COLOR]i
[COLOR="Blue"]End With[/COLOR]

[COLOR="Green"]'fermer le fichier[/COLOR]
csvFile.Close

[COLOR="Blue"]Set [/COLOR]csvFile = [COLOR="Blue"]Nothing[/COLOR]
[COLOR="Blue"]Set [/COLOR]myFso = [COLOR="Blue"]Nothing[/COLOR]
[COLOR="Blue"]End Sub[/COLOR]

il te reste à remplacer Feuil1 par le nom de la feuille de ton classeur.

a+

edit:
par contre, je ne l'ai testé qu'avec ma machile (excel2007, Win XP SP3)
 
Dernière édition:

olivierd

XLDnaute Junior
Re : Faire une fonction de menu pour enregistrer sous

Bonjour,

merci beaucoup pour ton temps
Effectivement le With ThisWorkbook.Sheets("Feuil1") me pose un problème car le nom de l'onglet est variable et la macro est destinée à s'exécuter sur différents fichiers aléatoires

je vais chercher pour savoir si ton code pourrait utiliser par défaut l'onglet actif ?

Question subsidiaire, est-ce compliqué de créer un menu d'appel à la macro dans excel (un plusieurs personnes pourraient utiliser ce menu sur différents postes pour activer la macro fréquemment )

merci pour ton temps

Amicalement
 

mromain

XLDnaute Barbatruc
Re : Faire une fonction de menu pour enregistrer sous

re,

pour prendre en compte la feuille active, il faut remplacer
ThisWorkbook.Sheets("Feuil1")
par
ActiveSheet

pour le menu, je maitrise pas trop, mais les experts du forum t'aideront

a+
 

olivierd

XLDnaute Junior
Re : Faire une fonction de menu pour enregistrer sous

Merci beaucoup mromain :)

Pour créer un menu d'appel à la macro dans excel (un plusieurs personnes pourraient utiliser ce menu sur différents postes pour activer la macro fréquemment ), j'ai cru comprendre qu'il convenait d'utiliser un "xla" ?

Amicalement
 

Discussions similaires

Statistiques des forums

Discussions
312 493
Messages
2 088 957
Membres
103 990
dernier inscrit
lamiadebz