Maze31300
Messages postés5Date d'inscriptionjeudi 16 juin 2016StatutMembreDernière intervention 5 juillet 2016
-
Modifié par NHenry le 16/06/2016 à 12:35
Maze31300
Messages postés5Date d'inscriptionjeudi 16 juin 2016StatutMembreDerniè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.
Maze31300
Messages postés5Date d'inscriptionjeudi 16 juin 2016StatutMembreDerniè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).
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.
Maze31300
Messages postés5Date d'inscriptionjeudi 16 juin 2016StatutMembreDerniè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 <
Vous n’avez pas trouvé la réponse que vous recherchez ?
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.
Maze31300
Messages postés5Date d'inscriptionjeudi 16 juin 2016StatutMembreDerniè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
Messages postés5Date d'inscriptionjeudi 16 juin 2016StatutMembreDerniè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.