Imprimer des données d'une feuille Excel active vers un fichier text [Résolu]

Messages postés
7
Date d'inscription
lundi 25 décembre 2000
Statut
Membre
Dernière intervention
31 octobre 2008
- - Dernière réponse : cs_Orohena
Messages postés
578
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
Afficher la suite 

5 réponses

Meilleure réponse
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 186 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Orohena
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
3
Merci
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

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 186 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_Orohena
Messages postés
7
Date d'inscription
lundi 25 décembre 2000
Statut
Membre
Dernière intervention
31 octobre 2008
0
Merci
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
Commenter la réponse de Rayan75008
Messages postés
7
Date d'inscription
lundi 25 décembre 2000
Statut
Membre
Dernière intervention
31 octobre 2008
0
Merci
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!
Commenter la réponse de Rayan75008
Messages postés
578
Date d'inscription
vendredi 26 septembre 2008
Statut
Membre
Dernière intervention
20 novembre 2010
4
0
Merci
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
Commenter la réponse de cs_Orohena