Se connecter avec
S'enregistrer | Connectez-vous

macro de conversion xls en csv

Dernière réponse : dans Programmation
Lassé par la pub ? Créez un compte

Merci pour la réponse!
J'ai suivi tes conseils et en allant sur VB editor le code présent est:
Sub ccsv()
'
' ccsv Macro
' Macro enregistrée le 01/08/2006 par albion
'

'
ActiveWorkbook.SaveAs Filename:= _
"D:\Documents and Settings\albion\Desktop\tramecsv.csv", FileFormat:=xlCSV, _
CreateBackup:=False
End Sub

Etapes
1) Outils/nouvelle macro que j'ai nommé ccsv
2) Fichier/Enregistrer sous/ Bureau et j'ai choisi dans type de fichier CSV puis je l'ai nommé tramecsv.
A chaque fois que je lance la macro il me dit que le fichier existe déjà("normal") jusque là c'est ok.
Sauf que je ne sais pas comment je dois faire pour qu' à chaque fois que je lance la macro que je renomme le fichier de façon différente.
J'espère que j'ai été clair!
Merci
Expert Programmation

(Merci de lire les règles et de les appliquer, particulièrement en se qui concerne la balise CODE)

Pour choisir un nom de fichier, je te propose d'utiliser FileDialog.

J'ai une autre erreur:
"Impossible d'accéder à 'test.csv' le fichier peut être en lecture seule, ou vous essayez peut être d'accéder à un emplacement en lecture seule. Il est également possible que le serveur sur lequel est enregistré le document ne réponde pas"
Quand je clique sur "réessayer" j'ai uneerreur d'execution '1004' La methode saveAs de l'objeet _workbook a echoué!
J'ai essayé de voir sur Aide mais je trouve pas malheureusement qq chose qui peut me faire avancer
Expert Programmation

(Merci de lire les règles et de les appliquer, particulièrement en ce qui concerne la balise CODE)

Tu dois avoir une application qui garde ton fichier ouvert. Sans doute Excel lui-même. Essaie de quitter toutes les instances d'Excel. Vérifie dans le gestionnaire des tâches qu'il n'existe effectivement plus de process Excel. En utilisant SaveCopyAs au lieu de SaveAs, tu peux sans doute éviter ces désagréments.

Merci Zeb
Finalement j'ai décidé de faire simple c'est à dire étape par étape avant de faire la conversion en csv.
Ce que je veux c'est avoir un bouton macro qui me permet de selectionner les fichiers excel sur lesquels je veux travailler
--------------------------------------------------------------------
CODE:
Sub Bouton1_Quandclic()

FileToOpen = Application _
.GetOpenFilename ("text Files (*.xls), *.xls")
End Sub
-----------------------------------------------------------
Peux tu me dire si cette ligne de code est correcte?
Merci d'avance!

J'ouvre deux classeurs
Sur le premier classeur:
Je recherche la cellule qui contient "client", si je trouve la donnée client, je prends la donnée qui situe deux cellules aprés sur la même ligne(formulaire, champ + donnée à rentrer), je l'affecte à une cellule donnée d'un autre classeur.
Pour le moment ce que j'ai fait c'est:
-----------------------------------------------------
CODE:
Sub Recherche ()
Dim c As Object
'je recherche la cellule contenant client et si je trouve je décale de 2 lignes et 3 colonnes
For Each c In Range("1:20")
If c.value = "Client" Then
ActiveCell.Offset(2, 3) = "Albion"
Exit Sub
End If
Next
End Sub
____________________________________________________________
Je sais que ça n'a rien à voir avec ce que je veux, mais comment je peux prendre la donnée de la cellule située à (2,2) et la copier dans un autre classeur?
Merci

J'ai reussi à prendre la valeur qui se situe à 2 cellules de la valeur "client" et la copier sur l'autre feuille:
  1. Sub Recherche ()
  2. Dim c As Object
  3. 'je recherche la cellule contenant client et si je trouve je prends la valeur de la cellule qui est à sur la même ligne mais 2 colonne aprés!
  4.  
  5. For Each c In Range("1:20" )
  6. If c.value = "Client" Then
  7. Worksheets("Feuil2").Cells(2, 1) = Worksheets("Feuil1").Cells(c.row, c.Column + 2)
  8. Exit Sub
  9. End If
  10. Next
  11. End Sub

Comment je fais si je veux copier cette donnée dans un autre classeur qui se nomme "Configuration"
Merci en espèrant que j'ai respecté les règles (je viens de les lire)
Expert Programmation

1°) J'avais dit tous.
2°) J'avais dit modifier, pas recopier.
3°) Tu montres un peu de bonne volonté, c'est déjà ça.

  1. Worksheets("Feuil1" ).Cells(c.row, c.Column + 2)
:non:  Ce n'est pas faux, mais c'est très laid !
c c'est déjà une une cellule. Alors c.OffSet(0, 2) est la cellule d'à-côté !

Quelques conseils (tu fais comme tu veux, ce ne sont que des conseils)

Perso, quand j'utilise plusieurs feuilles et/ou plusieurs classeurs, je préfère tout préciser
  1. For Each c In Worksheets("Feuil1").Range("1:20")
  2. ..
  3. Worksheets("Feuil2" ).Cells(2, 1).Value = c.OffSet(0, 2).Value


Et pour plus de clarté, j'utilise souvent des objets :
  1. Dim w1, w2 as Worksheet
  2. Set w1 = Worksheets("Feuil1")
  3. Set w2 = Worksheets("Feuil1")
  4.  
  5. For Each c In w1.Range("1:20")
  6.  
  7. w2.Cells(2, 1).Value = c.OffSet(0, 2).Value


----------------------------------------------------

Citation :
dans un autre classeur


ActiveCell, c'est la cellule active.
Cells c'est la collection des cellules.
Cells( .. ) c'est une cellule précise.

ActiveSheet, c'est la feuille active.
Sheets c'est la collection des feuille s.
Sheets( .. ) c'est une feuille précise.

ActiveWorkbook, c'est le classeur actif.
Workbooks, c'est la collection des classeurs.
Devine comment on fait pour désigner un classeur précis :whistle: 

Wé encore moi!
Encore merci, tes indications m'ont bcp aidé, et ça a marché par la suite. Maintenat j'ai décidé de faire le remplissage de façon automatique. J'explique le contexte!
J'ai un classeur que j'ai nommé vba1 qui contient la feuille "frm" et la feuille "conf" et un autre classeur que j'ai nommé "vba2" qui contient la feuille "import"
La feuille "conf" contient un tableau avec les champs à chercher et le décalage qu'il faut pour trouver la donnée que je veux insérer dans la feuille "import" de vba2. Ce que j'ai fait
  1. Sub last()
  2. Dim I As Integer
  3. 'je calcule le nbre de colonnes du tableau dans "conf"
  4. nbrcolonne = Workbooks("vba1.xls").Worksheets("conf") _
  5. .UsedRange.Columns.Count
  6. For I = 2 To nbrcolonne
  7. For Each c In Range("A:I")
  8. If c.Value = Workbooks("vba1.xls").Worksheets("Conf").Cells(1, I) Then
  9. Workbooks("vba2.xls").Worksheets("import").Cells(2, I + 2) = _
  10. ' pour info, c.column + workbook..... correspond au decalage entre champ recherché et donnée que je veux recopier
  11. Workbooks("vba1.xls").Worksheets("frm").Cells(c.Row, c.Column + _
  12. Workbooks("vba1.xls").Worksheets("Conf").Cells(2, I))
  13. End If
  14. Next
  15. Next I
  16.  
  17. End Sub

Quand j'exècute cela
1)prend un tps fou
2)Il me recopie rien
3) ne génére pas d'erreur
Je pense que c'est la boucle qui est mal définie et donc pour revenir au point de départ c'est ce fichier que je dois enregistrer en csv et l'importer à partir d'un PDA.

Pour info j'ai essayé avec:
  1. For Each c In Worksheets("Feuil1" ).Range("1:20" )
  2. ...
  3. Worksheets("Feuil2" ).Cells(2, 1).Value = c.OffSet(0, 2).Value

ça n'a pas marché c'est pour ça que je repris la même syntaxe
  1. Worksheets("Feuil1" ).Cells(c.row, c.Column + 2)


Lassé par la pub ? Créez un compte