Imprimer des données d'une feuille Excel active vers un fichier text

Résolu
Rayan75008 Messages postés 7 Date d'inscription lundi 25 décembre 2000 Statut Membre Dernière intervention 31 octobre 2008 - 28 oct. 2008 à 19:43
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 - 29 oct. 2008 à 18:50
Bonjour,

Novice dans le VB, cela fait quelques jours que j'essaie différentes manière de faire pour ouvrir un fichier excel, mettre un bouton, qui imprim tout l'onglet (qu'on renomme CODE) dans un fichier texte avec un séparateur et en supprimant les lignes à blancs lorsqu'une colonne n'est pas renseignée :

tabelau excel :

Nom          /    Prénom /    téléphone /    adresse /    Mobile /
Bernard      Sophie         014040         Paris            062345
Paul            Bernard        014050         Paris            0
Luc            Sam               014060         Paris            062545

Donc dans le fichier texte, je dois retrouver ces informations sauf la deuxième ligne car dans Mobile, il a 0.

J'ai fait un petit VB mais ça plante. HELP ME : Merci d'avance de votre aide!!!!! J'ai beau cherché mais j'arrive si une personne maitrise VB ce serait génial!!!

Private Sub CommandButton1_Click()


Dim intMsg As Integer
Dim strReponse As String
Open "c:\temp\test9.dat" For Output As 1
Dim Responsel As Long
Dim Ligne As String


intMsg = MsgBox("Voulez Vous lancer l'extration?", vbOKCancel)
If intMsg = 1 Then


Line Input #1, Ligne


Print #1, Ligne


Close file


Response = Shell("NotePad.exe c:\temp\test9.dat", vbNormalFocus)


strReponse = MsgBox("Fin de l'extraction")


Else


strReponse = MsgBox("Aucune Extraction réalisée")


      Exit Sub
End If

5 réponses

cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
29 oct. 2008 à 03:16
Bonjour


1. Le fichier test9.dat est ouvert en Output, il n'est pas possible d'y lire des données par line input #1, ligne
2. Pour imprimer tout l'onglet, donc plusieurs lignes, il faut une boucle (do / loop)
3. A aucun moment ton code le lit ta feuille de calcul ; ton instruction line input #1, ligne est une instruction de lecture de fichier sequentiel.
4. Il faut fermer le fichier test9.dat

Concrètement, ton programme devrait ressembler à ça  :

Private Sub CommandButton1_Click()
Dim intMsg As Integer
Dim strReponse As String
Dim Responsel As Long
Dim Ligne As String
Dim r As Integer, c As Integer
dim f as Integer
f = FreeFile
Open "c:\temp\test9.dat" For Output As #f
intMsg = MsgBox("Voulez Vous lancer l'extration?", vbOKCancel)
If intMsg = 1 Then
      r = 1   ' r est le n° de ligne
      Do
' tests des critères de sélection (cellule 4 à zéro...)
           If Cells(r, 4).Value <> 0 Then _
                Print #1, Cells(r, 1) & ";" & Cells(r, 2) & ";" & _
                     Cells(r, 3) & ";" & Cells(r, 4)   ' imprime la ligne avec séparateur ";"
           r = r + 1
      Loop Until Cells(r, 1) = vbNullString ' tests de dernière ligne ( cellule 1 vide ...)
End If
Close #1
...
end sub

Cordialement
3
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
29 oct. 2008 à 03:23
Je reposte la fin de mon exemple car il contient 2 erreurs :

 tests des critères de sélection (cellule 4 à zéro...)
           If Cells(r, 4).Value <> 0 Then _
                Print #f, Cells(r, 1) & ";" & Cells(r, 2) & ";" & _
                     Cells(r, 3) & ";" & Cells(r, 4)   
' imprime la ligne avec séparateur ";"
           r = r + 1
      Loop Until Cells(r, 1) = vbNullString ' tests de dernière ligne ( cellule 1 vide ...)

End If
Close #f

...
end sub

Cordialement
3
Rayan75008 Messages postés 7 Date d'inscription lundi 25 décembre 2000 Statut Membre Dernière intervention 31 octobre 2008
29 oct. 2008 à 16:14
Bonjour!

Je tiens à vous remercier pour votre réponse. j'ai pu prendre note et appliquer votre réponse qui marche en effet! encore merci!

voici le code final que j'ai retenu. Je n'imprime pas l'entête des colonnes, je rajoute des espaces et affiche un message de fin d'opération. La dernière difficulté à laquelle je suis confronté c'est d'aligner mes sorties. C'est à dire que si la cellule 1 contient 5 caractères, je voudrais imprimer dans le fichier texte 20-5=15 caractère d'espace. Je ne sais pas si je suis clair??? Autrement dit je limite l'impression de la cellule A2 à 20 caractères, si les premiers sont pris par le contenu de la cellule du fichier excel, le reste c'est un espace. Idem pour les autres colonnes mais avec un nombre de caractère différent (exemple : 20 pour colonne A, 15 pour colonne B et 10 pour colonne C).

Encore merci pour la réponse initale!!!

Private Sub CommandButton1_Click()
Dim intMsg As Integer
Dim strReponse As String
Dim Responsel As Long
Dim Ligne As String
Dim r As Integer, c As Integer
Dim f As Integer
f = FreeFile
Open "c:\temp\test9.dat" For Output As #f
intMsg = MsgBox("Voulez Vous lancer l'extration?", vbOKCancel)
If intMsg = 1 Then
      r = 2   ' r est le n° de ligne
      Do
' tests des critères de sélection (cellule 4 à zéro...)
           If Cells(r, 4).Value <> 0 Then _
                Print #f, Cells(r, 1) & Space(20) & Cells(r, 2) & Space(15) & _
                     Cells(r, 3) & Space(10) & Cells(r, 4)   ' imprime la ligne avec séparateur "espace"
           r = r + 1
      Loop Until Cells(r, 1) = vbNullString ' tests de dernière ligne ( cellule 1 vide ...)
     
      strReponse = MsgBox("Fin de l'extraction")
     
      Else
     
      strReponse = MsgBox("Aucune Extraction réalisée")
   
End If


Close #f


End Sub
0
Rayan75008 Messages postés 7 Date d'inscription lundi 25 décembre 2000 Statut Membre Dernière intervention 31 octobre 2008
29 oct. 2008 à 18:16
Bonjour, j'ai trouvé la solution!!!

Il suffisais de compter la cellule, d'indiquer le nombre de caractère et de faire la différence qu'on indique à la fonction space()

'colonne A
Dim aa As Long
Dim ab As Long
Dim ac As Long

aa = 20
ab = Len(Cells(r, 1))
ac = aa - ab

space(ac)

Encore merci!!!

Serait il possible de rester en contact pour d'autres échanges de ce type??? En plus je viens de m'attaquer au C++, un vaste sujet lol

Bonne journée!
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Orohena Messages postés 577 Date d'inscription vendredi 26 septembre 2008 Statut Membre Dernière intervention 20 novembre 2010 4
29 oct. 2008 à 18:50
Rendons à César ce qui lui appartient ; si vous avez d'autres questions du même genre, posez-les d'abord sur le forum vbfrance. Vous pourrez toujours m'envoyer un message personnel si vous n'obtenez pas de résultat sur vbfrance.

Je vais bientôt me mettre au C++, peut-être aurai-je besoin de vos lumières...

Cordialement
0
Rejoignez-nous