[macro excel]manipuler notepad avec une macro

Résolu
sioux49 Messages postés 6 Statut Membre -  
sioux49 Messages postés 6 Statut Membre -
Bonjour,

Je voudrais savoir comment utiliser notepad avec une macro excel.
Mon sujet est le suivant:
avec une macro excel je traite des fichiers de données. A la fin du programme je crée un fichier texte contenant deux colonnes de données. Le problème est que le séparateur entre les données est une tabulation alors que je veux un ";". De plus sur les deux premières lignes j'ai du texte que je veux encadrer par des guillemets. Ainsi, j'ai:
crankangle tasa
et je veux avoir:
"crankangle";"tasa"

Merci d'avance.

1 réponse

  1. Kobaya Messages postés 282 Date d'inscription   Statut Membre Dernière intervention   214
     
    salut,

    avec ce code, tu devrais y arriver :

    Sub EcrireFichier()
        Dim lngNbLignes     As Long
        Dim lngIndexLig     As Long
        Dim intF            As Integer
        
        ' nombre de lignes de la zone de données
        lngNbLignes = ActiveCell.CurrentRegion.Rows.Count
        
        ' ouvrir un canal pour le fichier
        intF = FreeFile()
        ' créer le fichier
        Open "C:\users\MonFichier.txt" For Output As intF
        
        ' écriture des données
        For lngIndexLig = 1 To lngNbLignes
            If lngIndexLig = 1 Then
                Print #intF, """" & Cells(lngIndexLig, 1).Value & """;""" & Cells(lngIndexLig, 1).Value & """";
            Else
                Print #intF, Cells(lngIndexLig, 1).Value & ";" & Cells(lngIndexLig, 1).Value;
            End If
            Print #intF,
        Next
        
        ' fermer le canal
        Close #intF
    End Sub
    


    0
    1. sioux49 Messages postés 6 Statut Membre 10
       
      Merci,

      Ça marche!

      Il y a juste un dernier problème: j'ai modifié un peu ton code car dans ma première ligne de données il a juste un chiffre. J'ai fait la modification suivante:
       ' écriture des données
          For lngIndexLig = 1 To lngNbLignes
              If lngIndexLig = 1 Then
                  Print #intF, Cells(lngIndexLig, 1).Value;
              Else            
                  If lngIndexLig = 2 Then
                      Print #intF, """" & Cells(lngIndexLig, 1).Value & """;""" & Cells(lngIndexLig, 2).Value & """";
                  Else
                      Print #intF, Cells(lngIndexLig, 1).Value & ";" & Cells(lngIndexLig, 2).Value;
                  End If
              End If
              Print #intF,
          Next

      Avec ma modification j'obtiens ce que je voulais à l'exception suivante: pour la première ligne il me fait une tabulation et je ne sais pas pourquoi. Ainsi, j'ai:

         3600
      "crankangle";"tasa"       
      123;56
      212;94
      
      alors que je veux:
      3600
      "crankangle";"tasa"       
      123;56
      212;94


      Encore merci d'avance. Tu m'as enlevé une épine du pied. Cela faisait 4 jours que je cherchais à résoudre ce problème.
      0
    2. sioux49 Messages postés 6 Statut Membre 10
       
      J'ai trouvé un moyen de résoudre mon problème. Après le premier If je fais:
      ' écriture des données
          For lngIndexLig = 1 To lngNbLignes
              If lngIndexLig = 1 Then
                  Print #intF, Cells(lngIndexLig, 1).Value;Cells(lngIndexLig, 2).Value;


      Encore merci.
      0