Améliorer ma macro affichage sur double clic + impression

chris6999

XLDnaute Impliqué
Bonjour

Avec l'aide du FORUM j'ai créé une macro qui permet d'alimenter les cellules d'une fiche (en feuille 2) à partir des valeurs saisies sur les lignes de ma base de données en feuille 1.
Cette macro lance automatiqument l'impression de la fiche .

Le lancement de la macro se fait par double clic sur les cellules de la colonnes L.
Ainsi lorsque je double clique sur L7, la valeur "D" apparait dans ma colonne et incrémente le numéro de ligne dans la cellule D1 de la feuille 2 "fiche" (les cellules de la fiche sont alimentées à partir du numéro de ligne et de la formule INDIRECT.

Voici cette macro:

Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
If Intersect(Target, Range("L7:L10000")) Is Nothing Then Exit Sub
If Target.Offset(0, -10).Value = "" Then Exit Sub
If Target.Value <> "" Then MsgBox "Ce document a déjà été imprimé. Cliquer sur OK pour éditer une copie": Cancel = True: Exit Sub
Sheets("Fiche de Suivi").Range("D1").Value = Target.Row
Target.Value = "D"
Sheets("Fiche de Suivi").PrintOut
Cancel = True
End Sub


Ce que je souhaiterais modifier :

Ne pas pouvoir afficher la valeur "D" sur plusieurs lignes en même temps. Ex si j'ai déjà imprimé la fiche par double clic dans D7, lorsque je double clique en D8, la valeur D disparaît de D7.

Plutôt que de lancer une impression automatique je souhaiterais pouvoir accéder à la fénêtre d'impression (par exemple pour choisir une imprimante ou choisir des paramètres d'impression).

Si vous avez une idée de la manière de modifier cette macro je suis preneuse. J'ai essayé pleins de choses mais ça ne fonctionne pas.

Merci d'avance
Cordialement
 

ERIC S

XLDnaute Barbatruc
Re : Améliorer ma macro affichage sur double clic + impression

Bonjour Chris

je t'avais indiqué cette possibilité dans ton autre fil, que tu aurais dû poursuivre au lieu d'en créer un autre

Code:
    'si aperçu avant impression
    Application.ScreenUpdating = False
    Sheets("Fiche de suivi").Select
    ActiveWindow.SelectedSheets.PrintPreview
    Sheets("Base de données").Activate
    Application.ScreenUpdating = true

d'autre part tu peux effacer (je ne comprend pas pourquoi car cela t'éviterait d'imprimer 2 fois la même) les D après les tests if

Code:
 Sheets("Fiche de Suivi").Range("D7:D2000").ClearContents

et enfin, j'utilsais D1 dans mon exemple pour choisir le type d'impression (directe ou aperçu)
si tu n'utilises pas cette possibl=ilité, tu peux enlever :

Code:
[COLOR=#0000cd]Sheets("Fiche de Suivi").Range("D1").Value = Target.Row[/COLOR]
 

chris6999

XLDnaute Impliqué
Re : Améliorer ma macro affichage sur double clic + impression

Bonjour Eric

La première chose que j'ai faite c'est reprendre tes message en essayant d'adapter.

Le problème c'est que je ne parviens pas à relancer l'impression lorque la fiche a déjà été éditée. Il affiche le massage puis plus rien....d'où ma question pour n'avoir qu'un D par ligne.
Si tu parviens à voir pourquoi ça bug?

Pour la partie fenêtre d'impression : je souhaitais une impression automatique mais je me suis vite rendue compte que je devais pouvoir accéder à la fenêtre d'impression. Si je me souviens bien ta proposition lançait uniquement l'aperçu?

Merci de m'aider en tous cas.
 

ERIC S

XLDnaute Barbatruc
Re : Améliorer ma macro affichage sur double clic + impression

re

à essayer

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
 If Intersect(Target, Range("L7:L10000")) Is Nothing Then Exit Sub
 If Target.Offset(0, -11).Value = "" Then Exit Sub
 If Target.Value <> "" Then
    Valid = MsgBox("fiche déjà imprimée, voulez-vous continuer ?", vbYesNo)
    If Valid = vbNo Then Cancel = True: MsgBox "abandon de l'impression": Exit Sub
End If
 Target.Value = "D"
'si aperçu avant impression
Application.ScreenUpdating = False
Sheets("Fiche de suivi").Select
ActiveWindow.SelectedSheets.PrintPreview
Sheets("Base de données").Activate
Application.ScreenUpdating = True
Cancel = True
End Sub
 

chris6999

XLDnaute Impliqué
Re : Améliorer ma macro affichage sur double clic + impression

Eric

Ca fonctionne très bien (en première impression comme en copie). Par contre il ya un BUG après le lancement de l'impression:
Erreur exécution 9 sur la ligne Sheets("Base de données").Activate

On dirait qu'il ne parvient pas à revenir sur la feuille base de données.

Qu'en penses-tu?

Je pensais que cela pouvait venir de la protection de la feuille "base de données "mais cela n'a pas l'air d'être ça!
 
Dernière édition:

chris6999

XLDnaute Impliqué
Re : RESOLU : Améliorer ma macro affichage sur double clic + impression

Eric Désolée de t'embêter encore mais je viens de faire des derniers tests sur ma base et je rends compte qu'il y a un pb sur la fameuse macro d'impression des fiches.

L'impression marche nickel comme je te l'ai dit.¨Par contre le n° de ligne n'est plus incrémenté dans la cellule D1 de la fiche de suivi (ni en première impression, ni en copie d'impression...)

Je m'arrache le cheveux à comprendre pourquoi mais rien à faire.

Sais-tu ce qui se passe?

J'espère que tu pourras m'aider
Bonne soirée
 

Pièces jointes

  • fichier testES.xls
    247 KB · Affichages: 53
  • fichier testES.xls
    247 KB · Affichages: 56
  • fichier testES.xls
    247 KB · Affichages: 66

ERIC S

XLDnaute Barbatruc
Re : Améliorer ma macro affichage sur double clic + impression

Bonjour

dans la dernière version on n'y écrivait plus

Code:
Private Sub Worksheet_BeforeDoubleClick(ByVal Target As Range, Cancel As Boolean)
  If Intersect(Target, Range("L7:L10000")) Is Nothing Then Exit Sub
  If Target.Offset(0, -11).Value = "" Then Exit Sub
  If Target.Value <> "" Then
     Valid = MsgBox("fiche déjà imprimée, voulez-vous continuer ?", vbYesNo)
     If Valid = vbNo Then Cancel = True: MsgBox "abandon de l'impression": Exit Sub
 End If
  Target.Value = "D"
 'si aperçu avant impression
 Application.ScreenUpdating = False
 Sheets("Fiche de suivi").Select
 Sheets("Fiche de suivi").Range("D1").Value = Target.Row
 ActiveWindow.SelectedSheets.PrintPreview
 Sheets("Base de données").Activate
 Application.ScreenUpdating = True
 Cancel = True
 End Sub

il manquait la ligne

Code:
 Sheets("Fiche de suivi").Range("D1").Value = Target.Row
 

Discussions similaires

Réponses
1
Affichages
234

Statistiques des forums

Discussions
312 108
Messages
2 085 375
Membres
102 876
dernier inscrit
BouteilleMan