Selection de page à imprimer Excel VBA

Maze31300 Messages postés 5 Date d'inscription jeudi 16 juin 2016 Statut Membre Dernière intervention 5 juillet 2016 - Modifié par NHenry le 16/06/2016 à 12:35
Maze31300 Messages postés 5 Date d'inscription jeudi 16 juin 2016 Statut Membre Dernière intervention 5 juillet 2016 - 5 juil. 2016 à 14:58
Bonjour à tous

Je travaille actuellement sur un classeur sous Excel 2010 qui va permettre à un technicien de remplir et exploiter les informations d'un parc informatique client.

J'ai réussi à créer avec de l'aide, quelques macros Excel sous VBA me permettant de faire des opérations précises sur ce fichier.
Mais mon niveau de novice me bloque sur une fonctionnalité que je n'arrive pas à mettre en place.

Voici ma problématique :
Mon classeur Excel possède plusieurs onglet, et celui qui m'intéresse s'appelle "POSTES"
Dans cet onglet, le technicien va remplir les informations des postes clients.
J'ai fait en sorte que les informations d'un poste tiennent sur une page lors de l'impression.
Le technicien peut rechercher un poste par le nom de l'utilisateur avec cette macro :
Private Sub CommandButton2_Click()
'Sub RechercheMot()
 Dim Var As String
 Var = InputBox("Chercher un Utilisateur ?", , "Saisir le nom")

 If Var = "" Then Exit Sub

 Set MotTrouvé = Cells.Find(What:=Var)

 If Not MotTrouvé Is Nothing Then
 MotTrouvé.Select
 Style = vbYesNo + vbDefaultButton1
 Msg = "Utilisateur trouvé"
 Title = "Résultat de recherche."
 Réponse = MsgBox(Msg, Style, Title)

 If Réponse = vbYes Then
 ActiveCell.Select
 'ActiveCell.EntireRow.Select
 End If

 Else
 MsgBox "Aucun utilisateur ne correspond à votre recherche."
 Exit Sub
 End If
End Sub


J'aimerais que lorsque l'information est trouvée, le technicien puisse imprimer les informations du poste.
En gros, j'aimerais imprimer la page où se trouve la cellule sélectionnée à l'issue du choix.
J'aimerais aussi qu'à l'issue, une boite de dialogue apparaisse lui permettant d'effectuer une autre recherche/impression ou de fermer en fonction de son choix.

J'ai pas mal cherché sur différents forum et j'ai trouvé quelques commandes pour l'impression mais pas ce que je cherche.

Merci d'avance pour votre contribution.

> Maze 31300 <

7 réponses

cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
16 juin 2016 à 19:34
Bonjour,

Si j'ai bien compris, tu pourrais faire un filtre sur cette valeur recherchée et imprimer ta feuille qui ne contiendra que ce qu'il a demandé...
0
Maze31300 Messages postés 5 Date d'inscription jeudi 16 juin 2016 Statut Membre Dernière intervention 5 juillet 2016
17 juin 2016 à 08:46
Bonjour.

Merci de ton intérêt pour mon problème.

"Si j'ai bien compris, tu pourrais faire un filtre sur cette valeur recherchée ". Ma recherche va cibler des cellules particulières dans la feuille "POSTES" de mon classeur (D7, D41, D75, D109... 34 lignes d'écart à chaque fois).
Les informations du poste sont contenues dans un tableau qui tient sur une page (par exemple le tableau pour le poste1 B5 --> O34, poste2 B39 --> O68 toujours un multiple de 34).

Je ne sais pas si je suis assez clair.

Au besoin de je peux fournir plus d'explications.

Merci encore.

> Maze31300 <

0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 17/06/2016 à 17:43
Bon ...
Je ne voulais pas intervenir car ce n'était plus une question isolée, mais tout un exposé !
Quelle est finalement la question isolée ?
1) Si elle est la détermination de la ligne (appelons-là ligne) de la cellule recherchée par la méthode Find :
cette ligne est
 ligne = MotTrouvé.row

A noter que tu dois (ce que l'on ne voit pas dans ton code) préciser la feuille où s'effectue la recherche. A noter également que Tu dois vérifier que Mottrouve n'est pas Nothing (bien évidemment)
2) si elle est la détermination de la page dans laquelle se trouve la ligne ligne, voici un exemple. Ici on détermine la page de la feuille Feuil1 contenant la ligne Ligne.:
Dim ligne As Long, numpage As Integer
numpage = 1
ligne = 25
For Each coupure In Worksheets("Feuil1").HPageBreaks
If coupure.Location.Row > ligne + 1 Then Exit For
numpage = numpage + 1
Next
MsgBox "la ligne " & ligne & " est en page " & numpage
--

Toutes tes autres explications ne font que "noyer" ta problématique et n'avaient rien à faire ici.
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Maze31300 Messages postés 5 Date d'inscription jeudi 16 juin 2016 Statut Membre Dernière intervention 5 juillet 2016
20 juin 2016 à 08:47
Bonjour ucfoutu et merci pour tes réponses.

La feuille où s'effectue la recherche s'appelle "POSTES".

Concernant ma question initiale et pour la simplifier, j'aimerais imprimer la page contenant le résultat de ma recherche (dis comme cela c'est effectivement simple).

J'ai 170 pages dans ma feuille "POSTES" de mon classeur d'où ce besoin pour ne pas tout imprimer.

Je vais essayer d'adapter le code proposé.

Par contre, peux tu m'expliquer ces 2 lignes :
For Each coupure In Worksheets("Feuil1").HPageBreaks
If coupure.Location.Row > ligne + 1 Then Exit

Je ne connais pas cette commande HPageBreaks.
Je suis autodidacte en VBA pour Excel et je lis énormément mais je ne maitrise pas tout.

Merci encore pour tes réponses.

Bonne journée

> Maze31300 <

0

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

Posez votre question
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
Modifié par ucfoutu le 20/06/2016 à 11:00
Je ne connais pas cette commande HPageBreaks.

Le premier réflexe est alors de consulter ton aide VBA.
HPageBreaks n'est pas une "commande", mais une collection : celle des sauts de page horizontaux.
Ouvre s'il te plait ton aide VBA à la rubrique Worksheet.HPageBreaks, propriété et ... tu sauras !

EDIT :
Je suis autodidacte en VBA pour Excel

Moi également, mais totalement.

EDIT 2 : et le code que je t'ai montré t'indique bien le n° de page contenant une ligne déterminée (qui n'est rien d'autre que -comme déjà dit - Mottrouve.row)
J'espère que tu sais au moins, à partir de là, utiliser la méthode PrintOut pour imprimer la dite page. Si tu ne le sais pas ===>> ouverture de ton aide VBA et lecture de la rubrique Range.PrintOut, méthode
________________________
Nul ne saurait valablement coder ce qu'il ne saurait exposer clairement.
0
Maze31300 Messages postés 5 Date d'inscription jeudi 16 juin 2016 Statut Membre Dernière intervention 5 juillet 2016
20 juin 2016 à 13:54
Vérifications faites pour :"HPageBreaks" : OK, je vois comment c'est utilisé et quel résultat j'obtiendrais.

Concernant Range.PrintOut, j'avais déjà regardé quelques méthodes d'utilisation sur différents forums (notamment aussi pour l'aperçu avant impression et le choix de l'imprimante).

Je vais m'attaquer à mon projet avec les indications que tu m'as donné. Merci encore.

Je reviens vers vous pour vous donner ce que j'ai réussi à faire, si ça peut aider d'autres personnes.

> Maze31300 <

0
Maze31300 Messages postés 5 Date d'inscription jeudi 16 juin 2016 Statut Membre Dernière intervention 5 juillet 2016
5 juil. 2016 à 14:58
Voici le code que j'ai mis en place et trouvé tout seul...


Private Sub CommandButton3_Click()
'Déclaration de variables
Dim Station As String
Dim ligne As Integer
Dim colonne1 As Integer
Dim colonne2 As Integer

'Affectation de valeurs pour marquer le point de départ du tableau
ligne = 5
colonne1 = 2
colonne2 = 15

Station = InputBox("Saisir le numéro de station", , "Numéro :")

If Station = "" Then
Exit Sub
Else
ligne = 5 + ((Station - 1) * 34)
'Définition de la plage d'impression
ActiveSheet.PageSetup.PrintArea = Range(Cells(ligne, colonne1), Cells(ligne + 29, colonne2)).Address
'Prévisualisation du résultat
ActiveSheet.PrintPreview
End If

End Sub

Voilà.
Il est vrai que mon cas est un peu particulier mais cela fonctionne très bien.

> MAZE31300 <

0
Rejoignez-nous