macro de conversion xls en csv

albion

Nouveau membre
Bonjour,
Je suis débutant en programmation et je souhaite créer une macro qui convertit un fichier xls en csv et le sauvegarde dans un repertoire bien determiné. Je voulais avoir la ligne de code qui me permet de le faire.
Merci d'avance!
 

zeb

Modérateur
Non.

Pour ça, il suffit de bien vouloir utiliser l'enregistreur de macro et l'aide en ligne !
 

albion

Nouveau membre
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
 

zeb

Modérateur
(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.
 

albion

Nouveau membre
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
 

zeb

Modérateur
(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.
 

albion

Nouveau membre
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!

 

albion

Nouveau membre
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
 

zeb

Modérateur
[:sucube]

UNE DERNIERE FOIS : VAS LIRE LES REGLES :
APRES LES AVOIR ASSIMILEES, TU ME MODIFIES TOUS TES POSTS POUR RESPECTER L'USAGE DE LA BALISE CODE.

IL N'EST PAS NECESSAIRE DE DEMANDER COMMENT FAIRE, TOUT Y EST CORRECTEMENT EXPLIQUE.


(Je rappelle qu'écrire en majuscule sur un forum correspond à crier dans la vie)
 

albion

Nouveau membre
J'ai reussi à prendre la valeur qui se situe à 2 cellules de la valeur "client" et la copier sur l'autre feuille:
Code:
Sub Recherche () 
Dim c As Object 
'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!

For Each c In Range("1:20" ) 
If c.value = "Client" Then 
Worksheets("Feuil2").Cells(2, 1) = Worksheets("Feuil1").Cells(c.row, c.Column + 2)
Exit Sub 
End If 
Next  
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)
 

zeb

Modérateur
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.

Code:
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
Code:
For Each c In Worksheets("Feuil1").Range("1:20")
  ..
  Worksheets("Feuil2" ).Cells(2, 1).Value = c.OffSet(0, 2).Value

Et pour plus de clarté, j'utilise souvent des objets :
Code:
Dim w1, w2 as Worksheet
Set w1 = Worksheets("Feuil1")
Set w2 = Worksheets("Feuil1")

For Each c In w1.Range("1:20")

  w2.Cells(2, 1).Value = c.OffSet(0, 2).Value

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

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:
 

zeb

Modérateur
Gagné ! :D L'aide en ligne, de la jujotte et PPC. Avec ça, rien de résiste !
 

albion

Nouveau membre
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
Code:
Sub last()
Dim I As Integer
'je calcule le nbre de colonnes du tableau dans "conf"
nbrcolonne = Workbooks("vba1.xls").Worksheets("conf") _
.UsedRange.Columns.Count
For I = 2 To nbrcolonne
For Each c In Range("A:I")
If c.Value = Workbooks("vba1.xls").Worksheets("Conf").Cells(1, I) Then
Workbooks("vba2.xls").Worksheets("import").Cells(2, I + 2) = _
' pour info, c.column + workbook..... correspond au decalage entre champ recherché et donnée que je veux recopier
Workbooks("vba1.xls").Worksheets("frm").Cells(c.Row, c.Column + _
Workbooks("vba1.xls").Worksheets("Conf").Cells(2, I))
End If
Next
Next I

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.
 

albion

Nouveau membre
Pour info j'ai essayé avec:
Code:
For Each c In Worksheets("Feuil1" ).Range("1:20" )
  ...
  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
Code:
Worksheets("Feuil1" ).Cells(c.row, c.Column + 2)

 
Vous devez vous inscrire ou vous connecter pour répondre ici.
Derniers messages publiés
Statistiques globales
Discussions
730 128
Messages
6 717 832
Membres
1 586 367
Dernier membre
ramkin
Partager cette page
Haut