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...