Rayan75008
Messages postés7Date d'inscriptionlundi 25 décembre 2000StatutMembreDernière intervention31 octobre 2008
-
28 oct. 2008 à 19:43
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 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
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 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
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 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 ...)
Rayan75008
Messages postés7Date d'inscriptionlundi 25 décembre 2000StatutMembreDernière intervention31 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 ...)
cs_Orohena
Messages postés577Date d'inscriptionvendredi 26 septembre 2008StatutMembreDernière intervention20 novembre 20104 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...