je souhaite que Excel me retourne un fichier CSV avec certaine colones du fichier xls

Burk91

XLDnaute Nouveau
Bonjour à tous et merci pour votre aide.

Je pense que ce que je veux faire n'est pas sorcier, mais je ne suis malheureusement pas un expert en Excel, donc j'ai un peu de mal.

Je souhaite que a partir d'un fichier xls, un utilisateur puisse remplire des champs, présent dans 2 feuilles de ce fichier xls, et qu'une foi la saisie terminé, il clique sur un bouton qui va lui crée un fichier CSV avec JUSTE les infos qu'il a saisie.


Donc un utilisateur remplirait le fichier XLS suivant.

Code:
Exemple :
Prénom : [B]Bernard[/B]
Nom : [B]Tartempion[/B]
adresse : [B]3 rue de l'église[/B]

Regarde la pièce jointe 159005

puis une foi terminé, cet utilisateur cliquerait sur le bouton [CREAT CSV]
et le fichier cvs suivant ce créerait (enregistrer sous : fichier.csv):


Bernard;Tartempion; 3 rue de l'église
Polo; 1,8L; 130 chv; Noir
Clim; Auto Radio; jantes; GPS


Je vous remercie de votre aide, car la j'ai besoin d'une piste ;)
 

Pièces jointes

  • Template xls.xls
    31.5 KB · Affichages: 82
  • Template xls.xls
    31.5 KB · Affichages: 84
  • Template xls.xls
    31.5 KB · Affichages: 82
Dernière édition:

kjin

XLDnaute Barbatruc
Re : je souhaite que Excel me retourne un fichier CSV avec certaine colones du fichie

Bonsoir,
Dans le module standard et le fichier de l'exemple précédent
Code:
Sub CreerCSV()
Dim Fichier As String, PrintTxt As String, nB As Byte

nB = FreeFile
Fichier = ActiveWorkbook.Path & "\" & Format(Date, "dd-mm-yyyy") & ".csv"
Open Fichier For Output As nB

PrintTxt = Txt("Clients", 3, nB) 'nom de la feuille, nb de colonne, n° fichier
PrintTxt = Txt("Véhicules", 4, nB)
PrintTxt = Txt("Options", 4, nB)
Close nB

End Sub

Function Txt(ws As String, C As Byte, nB)
Dim i As Long, j As Byte, dl As Long
With Sheets(ws)
    dl = .Range("A65000").End(xlUp).Row
    For i = 2 To dl
        For j = 1 To C
            If .Cells(i, j) <> "" Then Txt = Txt & .Cells(i, j) & ";"
        Next
        If Txt <> "" Then Print #nB, Left(Txt, Len(Txt) - 1)
        Txt = ""
    Next
End With

End Function
A+
kjin
 

Burk91

XLDnaute Nouveau
Re : je souhaite que Excel me retourne un fichier CSV avec certaine colones du fichie

Bonjour Kjin

C’est Génial , tout fonctionne comme sur des roulettes !
Maintenant juste 2 ou 3 petites questions afin que je puisse comprendre ton algorithme :p:confused:

Dans :
Code:
nB = FreeFile 
PrintTxt = Txt("DEFINITION SOURCE 12-38-39", 16, nB) 'nom de la feuille, nb de colonne, n° fichier
Je ne comprends pas ce que le « nB » fait ? tu le commente en « n° de fichier », mais c’est encore flou pour moi quand a son utilité dans l’algo :s

- Et dans la fonction
Code:
Function Txt(ws As String, C As Byte, nB)
Dim i As Long, j As Byte, dl As Long
With Sheets(ws)
    dl = .Range("A65000").End(xlUp).Row
    For i = 5 To dl
        For j = 1 To C
            If .Cells(i, j) <> "" Then Txt = Txt & .Cells(i, j) & ";"
        Next
        If Txt <> "" Then Print #nB, Left(Txt, Len(Txt) - 1)
        Txt = ""
    Next
End With

End Function
Je comprends qu’elle permet de mettre le séparateur avec des « ; »
Mais pareil je ne vois pas le rôle des variable « ws » et « C » et toujours ce « nB » qui me perturbe ;) (j'aurai juste besoin d'un petit commentaire sur ce code, afin que je puisse le comprendre :D:rolleyes::D)

- Et enfin, est t’il possible quand on clique sur le bouton « Creat CSV » d’avoir une nouvelle fenêtre qui demande d’enregistrer sous (et l’utilisateur choisirait son emplacement sur le Bureau et le nom du fichier toto.csv ;)

Enfin c’est vraiment génial ce que tu m’as fais et je t’en remercie encore !
 
Dernière édition:

Staple1600

XLDnaute Barbatruc
Re : je souhaite que Excel me retourne un fichier CSV avec certaine colones du fichie

Bonjour à tous

Pour info Burk91:
Dans Excel, tu fais ALT+F11 puis F1
Tu cherches alors ce dont tu as besoin, ici Freefile
et tu trouves ceci:

FreeFile, fonction, exemple

Cet exemple utilise la fonction FreeFile pour renvoyer le prochain numéro de fichier disponible. Cinq fichiers sont ouverts à l'intérieur de la boucle et des données sont écrites dans chacun d'eux.
Dim MyIndex, FileNumber
For MyIndex = 1 To 5 ' La boucle est effectuée cinq fois.
FileNumber = FreeFile ' Lit le numéro de fichier inutilisé.
' Crée le nom du fichier.
Open "TEST" & MyIndex For Output As #FileNumber
Write #FileNumber, "Ceci est un exemple" ' Écrit le texte.
Close #FileNumber ' Ferme le fichier.
Next MyIndex

La touche F1 est trop souvent ignorée (et cela la rend triste :( ) ;)
 

Burk91

XLDnaute Nouveau
Re : je souhaite que Excel me retourne un fichier CSV avec certaine colones du fichie

Bonjour Tout le monde

@Staple1600 Merci pour ce tips ;)
@kjin si tu pouvais m'expliquer ta fonction, ca serai génial, car la je patauge, après je ne t'embête plus.

Merci d'avance ;) et bon week end !
 

kjin

XLDnaute Barbatruc
Re : je souhaite que Excel me retourne un fichier CSV avec certaine colones du fichie

Bonjour,
Et bien je ne vois pas ce que tu ne comprends pas
On fait appel à la fonction en lui passant des paramètres différents à chaque fois.J'aurais pu simplifier en bouclant sur les feuilles et les colonnes directement dans la fonction, une forme de récusivité en qq sorte.
Note également, qu'une simple Sub aurait suffit, la fonction n'ayant aucune utilité ici, c'est d'ailleurs ce que j'ai fait dans cet exemple.
Pour le répertoire de sauvegarde, j'ai cru comprendre qu'il fallait obliger l'utilisateur à utiliser le bureau, si c'est pas ça, change le paramètre "bwsInf.pidlRoot" dans la fonction "GetFolderName".
A+
kjin
 

Pièces jointes

  • Burk91_v4.zip
    21.4 KB · Affichages: 16
  • Burk91_v4.zip
    21.4 KB · Affichages: 18
  • Burk91_v4.zip
    21.4 KB · Affichages: 15

Burk91

XLDnaute Nouveau
Re : je souhaite que Excel me retourne un fichier CSV avec certaine colones du fichie

Bonjour a tous,

Kjin, c est parfait ;) Merci pour ton aide.

maintenant j'ai une question plus simple, au niveau du nom de sauvegarde.

Fichier = ActiveWorkbook.Path & "\" & Range("B5").Value & "-" & Range("E5").Value & "-" & Format(Date, "dd-mm-yyyy") & ".csv"

ca me donne le résultat que je veux, si je suis sur la Feuille1 de mon fichier XLS.
Foncement vue que c'est "ActiveWorkbook"

Mais mon bouton "Creat CSV" est sur plusieurs Feuilles.
Donc j'aimerai remplacer ce ActiveWorkbook par Feuille1 (pour mettre le chemin en dur) mais je ne trouve pas la bonne syntaxe :s

Quelqu'un connait il la bonne syntaxe ? merci de votre aide :)
 

kjin

XLDnaute Barbatruc
Re : je souhaite que Excel me retourne un fichier CSV avec certaine colones du fichie

Bonjour,
Mais mon bouton "Creat CSV" est sur plusieurs Feuilles.
Donc j'aimerai remplacer ce ActiveWorkbook par Feuille1 (pour mettre le chemin en dur) mais je ne trouve pas la bonne syntaxe :s
Pas très clair tout ça...
Code:
ActiveWorkbook.Path & "\
représente le répertoire d'enregistrement, donc ici le répertoire courant
"Feuil1" serait donc le répertoire ? Soit, mais il n'est pas dans la nature, faut-il le rechercher ou connais tu le chemin pour y acceder ?
Par ailleurs tu dis avoir plusieurs boutons;faut-il utiliser dans tout les cas "Feuil1" pour le répertoire ou le nom de la feuille où se situe le bouton ?
En attendant des compléments d'infos...
A+
kjin
 

Burk91

XLDnaute Nouveau
Re : je souhaite que Excel me retourne un fichier CSV avec certaine colones du fichie

Par ailleurs tu dis avoir plusieurs boutons;faut-il utiliser dans tout les cas "Feuil1" pour le répertoire ou le nom de la feuille où se situe le bouton ?
kjin

Voila exactement.

Dans la feuille 1 j ai le Nom (B5) et le Prénom (E5)
Donc si le clique sur le bouton Exporte CVS de la feuille 1, avec cette requête, ca marche impec.
Fichier = ActiveWorkbook.Path & "\" & Range("B5").Value & "-" & Range("E5").Value & "-" & Format(Date, "dd-mm-yyyy") & ".csv"

Mais j ai ce bouton dans d autre page, qui regroupe les voitures, ou les options (au qu elle cas, B5 est Renault, et E5 est CLIO)

Donc moi j aimerai dire :
Fichier = ActiveWorkbook.Path & "\" & Range.FEUILLE1.("B5").Value & "-" & Range.FEUILLE1.("E5").Value & "-" & Format(Date, "dd-mm-yyyy") & ".csv"

Je dois pas être loin mais ma syntaxe n'est pas bonne ;)
 

kjin

XLDnaute Barbatruc
Re : je souhaite que Excel me retourne un fichier CSV avec certaine colones du fichie

Re,
Je suis sans doute bouché mais j'aime les explications simples et claires !
Code:
With Sheets("[COLOR="Blue"]Feuille1[/COLOR]")
    Fichier = ActiveWorkbook.Path & "\" & .Range("B5") & "-" & .Range("E5") & "-" & Format(Date, "dd-mm-yyyy") & ".csv"
End With
Si tant est que la feuille se nomme bien "Feuille1"
A+
kjin
 
Dernière édition:

Statistiques des forums

Discussions
312 554
Messages
2 089 540
Membres
104 205
dernier inscrit
mehaya63