imprimer tous les element qui se trouve dans une listbox

  • Initiateur de la discussion bichon
  • Date de début
B

bichon

Guest
Salut a tous et bien sur a toutes les excelliens
J'aimerai pouvoir imprimer des element qui sont dans une listbox qui corresponde a des classeurs
si 3 element selectionner j'aimerai imprimer ces 3 classeurs a partir d'un bouton controle
voici le code pour ouvrir ces fichiers j'aimerai pouvoir les imprimer

Private Sub CommandButton5_Click()
Dim i As Integer
Dim chemin As String
Dim clas As String
Dim retval As Double
Dim NomClasseur As String
For i = 1 To ListBox1.ListCount
If ListBox1.Selected(i - 1) Then
NomClasseur = Worksheets("Baseopt").Range("B5").Cells(i, 1)

clas = "F:\Metachut2003\Optmet\Fiches\" & NomClasseur
chemin = "C:\Program Files\Microsoft Office\Office\excel.exe " & clas
retval = Shell(chemin, 4)
End If
Next i

' ce code ouvre la fiche selectionnée

merci je sais c'est assez bref et pas tres clair mais si vous souhaiter plus d'infos demander
merci

bichon
 
@

@+Thierry

Guest
Salut Bichon JP

Je n'ai pas assez de temps, pour étudier ton code, mais regarde ce fichier de GM... Il est très bien pour ce genre de chose.


=>Lien supprimé

Bonne Soirée
@+Thierry
 
Z

zon

Guest
Re,


Thierry, ce fichier je le mets dans ma collection, mais dans le cas de Bichon, il ne va pas fonctionner , car il ouvre ses 3 classeurs dans 3 excels différents (fonction shell)..


Par contre sur le site de Steph (grace à Fred sigonneau), j'ai trouvé une astuce: utiliser la commande imprimer de l'explorateur Windows (API shellexecute).

A mettre dans un module

Declare Function ShellExecute Lib "shell32.dll" Alias "ShellExecuteA" (ByVal hwnd As Long, ByVal lpOperation As String, ByVal lpFile As String, ByVal lpParameters As String, ByVal lpDirectory As String, ByVal nShowCmd As Long) As Long



à utiliser dans le cas présent,:

For i = 1 To ListBox1.ListCount
If ListBox1.Selected(i - 1) Then
NomClasseur = Worksheets("Baseopt").Range("B5").Cells(i, 1)

clas = "F:\Metachut2003\Optmet\Fiches\" & NomClasseur
chemin = "C:\Program Files\Microsoft Office\Office\excel.exe " & clas
retval = Shell(chemin, 4)
ShellExecute 0, "print", NomClasseur, "", "F:\Metachut2003\Optmet\Fiches\", 0

End If
Next i



A+++
 
B

bichon

Guest
Merci zon mais ce ne fonctionne pas j'ai testé ce matin et le bouton ne reagit pas
je met un ficier zip ou tu trouiveras tout ce que je demande tu comprendra surement mieux j'ai mis des
commentaires
sinon ce zip contient egalement le problème d'insertion de donnée dans listbox et textbox vers feuille excel
(D5 D6 Di tu te souviens)
donc voila tu trouvera tout dans le zip
je remercie encore ce qui m'aideront
bonne soirée
en attendant vos reponses merci

bichon
 

Pièces jointes

  • listimprime.zip
    19.4 KB · Affichages: 89
Z

zon

Guest
Bonjour à tous,


Bichon, j'ai corrigé ton fichier mais mais pas comme tu le voulais au départ:


1. J'ai essayé de trouver une solution avant d'être dans les bras de Morphée: Ouvrir une autre application Excel, d'y écrire des infos puis de les imprimer
=> impossible pour moi (cf 2), je sais imprimer un classeur fermé (shellexecute), ou ouvrir une autre application (shell). D'aprés l'aide VBA je crois qu'on ne peut pas le faire Excel, Word et Access....

2. La nuit porte conseil malgré une nuit courte et agitée(LOL): Pourquoi Bichon s'enquiquiner à ouvrir une autre application Excel ? alors qu'en ouvrant juste un autre classeur dans l'application active on aura le même résultat.
=>à partir de ton bouton "Archiver...", j'ouvre un autre classeur(ex: BALDEJO), j'y mets les valeurs des textbox voulues, je l'imprime puis je ferme le classeur sans enregistrer les modifications.

3.Quand utilise qqch du style "D:\Metachut2003\Optmet\Fiches\"
dans plein de macro et autres méthodes, utiliser l'instruction Const comme suit :
Const Nom = "D:\Metachut2003\Optmet\Fiches\" As String

4. Pour mettre dans des cellules la valeur de plusieurs textbox et que l'on ne sait pas si ils sont vides ou remplis, au lieu de faire des if à tout va, passer par un tableau:
Dim J As Byte
Dim TB As Control
Dim Tab1(0 To votre nombre de textbox) As String

For Each TB In Saisieinfos.Controls 'Saisieinfos est le nom de l'useform
If TypeOf TB Is msforms.TextBox Then
If TB.Text <> "" Then Tab1(J) = TB.Text: J = J + 1'on remplit le tableau si le textbox n'est pas vide
Next TB
For J = 0 To UBound(Tab1)
Range("D" & J + 5) = Tab1(J)' on remplit à partir de D5 tant qu'il y a des valeurs dans le tableau(Ubound), puis D6...
Range("B" & J + 5) = J + 1 'On fait que numéroter
Next J

5. Listbox2.selected(i) renvoie Vrai ou faux, mais en aucun cas ne permet de retrouver la position d'une valeur dans une plage de cellule même si celle-ci à servi à initialiser la listbox. Pour cela il faut tester toutes les cellules de la plage concernée, quand une cellule est = à la valeur de la listbox alors on peut faire le traitement que l'on désire.

Dim C as Range, Plage as Range
Set Plage=Range("A1:A18")
If ListBox2.Selected(i) = True Then 'Le true peut être omis
For Each C In Plage
If C = Optbase.ListBox2.List(i) Then
Range("D"&i) = C.Offset(0, 1)
......
End If
next C
End if


Voilà Bichon, j'ai dû oublier des explications..., moi je ferais plus simple : cliquer sur une listbox puis cliquer sur un bouton afficher cette valeur dans une autre listbox, reselectionner puis cliquer à nouveau sur un autre bouton pour afficher un 2 eme USF=>USINE à GAZ pour commencer.
=> 4 clics, alors qu'un seul aurait pu servir en utilisant l'évènement ListBox1_Click..



A+++


Je vais pouvoir travailler pour de vrai maintenant...
pc5.gif
 
Z

zon

Guest
Re,


Oupsss!! il manque un end if dans le 4.

For Each TB In Saisieinfos.Controls 'Saisieinfos est le nom de l'useform
If TypeOf TB Is msforms.TextBox Then
If TB.Text <> "" Then Tab1(J) = TB.Text: J = J + 1'on remplit le tableau si le textbox n'est pas vide
End if '''ICI à mettre
Next TB

Il y a peut être d'autres erreurs de code, mais comme j'ai mis des bouts de code par copier coller, il peut manquer d'autres instructions...


Bichon, j'en ai même oublier le fichier joint.... la journée commence bien !!!!!!!!!!!!


A+++
 

Pièces jointes

  • liste2colonnes.zip
    20.5 KB · Affichages: 104
  • liste2colonnes.zip
    20.5 KB · Affichages: 94
  • liste2colonnes.zip
    20.5 KB · Affichages: 92
B

bichon

Guest
Salut zon et tout le forum
alors je vais commencer par repondre a tes questions puis je vais t'en poser d'autres lol
1) mon souhait est d'imprimer les feuilles selectionnées sans les ouvrir grace a un bouton controle
si possible en inserant des données textbox juste pour l'impression je ne veux pas sauvegarder

2) le problème est resolu je ne veux pas imprimer la fiche nvellearchive je veux juste copier le contenu
de la listbox2 et des textbox
ceci etant fait voici le code jouvre dans un noucveau classeur

' Archiver fiches sélectionnées

Private Sub CommandButton9_Click()
Saisieinfos.Hide
Sheets("Archives").Select
Dim i As Byte
'Dim J As Byte

Workbooks.Open FileName:="F:\Metachut2003\Optmet\Archives\Nvellearchive.xls"
For i = 0 To Optbase.ListBox2.ListCount - 1
Range("D" & i + 5).Value = Optbase.ListBox2.List(i)
Next i
Range("AD3").Value = TextBox1.Value
Range("Z2").Value = TextBox2.Value
Range("AH2").Value = TextBox3.Value
Range("AD2").Value = TextBox4.Value


'Range("B" & J) = J + 1 'On fait que numéroter

End Sub

par contre comme tu l'as vu jai un problème pour le compteur en b5 b6 bi car j'aimerai garder ce code qui marche
bien et j'ai besoin de ton aide pour me rajouter une petit code pour que en b5 il y est et en bi il y est Di
e: si dans la liste jai 4 donnée jaurai les donnée en D5 D6 D7 D8 et j'aimerai qu'en B5 il y est 1 B6 2 B7 3 et B8 4 que
ca incremente jusqu'a qu'il ny est plus de données

pour le reste j'ai essayé ton zip jai pas tout compris ca marche pas trop bien chez moi
j'aimerai que tu m'aide surtout pour le compteur et imprimer les fiches selectionné avec les textbox
merci a toi et aux autres qui m'aideront

ps: la fonction shellexecute marche pas
j'aimerai si je te l'ai pas di faire le contraire de listbox2 vers classeurs
c'est a dire a partir de D5 et jusqu'a kil y est quelque chose copier ces données dans la listbox2
a partir justement d'une autre liste sur une autre userform grace a un bouton recuperer
les données qui sont dans cette liste fonctionne de la meme facon que pour la list1 de ma userform optbase
c'est a dire avec une bdd sur une feuille du classeur
est ce possible de recupere ces données dans la listbox2 de ma premiere userform
sans ouvrir ces classeurs qui sont contenu dans la listbox archives?

merci

bichon
 
Z

zon

Guest
Bonsoir à tous,


Je me demande si tu as lu le post du 21.05 à 5h26 et même si tu as regarder le fichier joint.....

J'essaie juste de porter des solutions car il y a des méthodes que tu ne connais pas comme la numétotaion automatique par exemple, nous sommes pas sur le forum pour faire des applis sur mesure....
Si des termes que j'utilise, tu ne les comprends pas, il suffit juste de me poser la question...

A+++
 

Discussions similaires

Statistiques des forums

Discussions
314 654
Messages
2 111 598
Membres
111 215
dernier inscrit
fateh