archivage si imprimé

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

philmar

XLDnaute Occasionnel
Bonjour à toutes et à tous,

alors que normalement j'arrive à me passer de vba, pour ce dont j'ai besoin il n'y a pas le choix!
je voudrais si c'est possible , quand le numéro de contrat est sélectionné dans contrat, et quand il a été imprimé, que les infos contenues dans l'onglet base pour le contrat imprimé soit automatiquement copiées dans l'onglet sauvegarde (à la première ligne vide pour ne pas effacer la précédente sauvegarde).
AVANTAGE, savoir ce qui a été imprimé, et sauvegarder les infos si par hasard on quitte le fichier dans sauvagarder 😡
Est-ce possible?
Bonne journée
Philippe
 

Pièces jointes

Re : archivage si imprimé

Bonjour,

en travaillant sur ce problème je m'aperçois qu'on ne peut avoir de tracabilité d'une impression,
par contre peut-on, avec du VBA/macro,
1 : empécher l'impression par le menu fichier de la feuille contrat,
2 : créer une macro qui
a: lance l'impression sur l'imprimante par défaut , en 2 exemplaires,
b: puis qui copie les cellules du contrat sélectionné sur l'onglet contrat,
à partir de la feuille "base" (ligne du contrat sélectionné) vers l'onglet sauvegarde .​
Merci
Philippe
 
Re : archivage si imprimé

Bonsoir philmar,

Voici ton fichier modifié et complété, avec un bouton Imprimer qui lance l'impression en 2 exemplaires et transfère la ligne imprimée dans la feuille sauvegarde.

Concernant l'annihilation du bouton Imprimer, c'est possible, mais n'ayant pas manipulé les barres d'outils et les menus depuis un certain temps, il me faut un petit délai de réflexion.

Espérant déjà avoir répondu à ta principale préoccupation.

Cordialement.

PS : j'ai supprimé les formules sur la feuille contrat, la suppression des lignes conduisant à des messages d'erreur dans les cellules. La mise à jour se fait par macro.
 

Pièces jointes

Re : archivage si imprimé

Bonjour et merci pour ton aide!
cela ne fonctionne pas avec mon excel 2003..
il me dit "erreur de compilation sur Me.PrintOut 1, 1, 2
J'ai regardé le code pour comprendre, essayé avec 2007, même problème..
Bien cordialement
philippe
 

Pièces jointes

Re : archivage si imprimé

Salut,pour ce qui de l'impression passer dans module ThisWorkbook
par Workbook_BeforePrint avec qqch comme
Code:
Private Sub Workbook_BeforePrint(Cancel As Boolean)
    If ActiveSheet.Name = LeNomDeLAFeuille Then
        Cancel = bFlagPrint
        If Cancel Then MsgBox "Pour imprimer correctement cette feuille" & vbCrLf & "     Utiliser le bouton IMPRESSION", vbOKOnly + vbInformation, "Impression"
    Else
        Cancel = False
    End If
End Sub

Avec donc une variable booléenne
Public bFlagPrint As Boolean

et dans Worksheet_Activate de "LeNomDeLAFeuille"
Code:
Private Sub Worksheet_Activate()
    bFlagPrint = True
End Sub

Sans doute à adapter à ton contexte
 
Dernière édition:
Re : archivage si imprimé

Bonjour et merci pour ton aide!
cela ne fonctionne pas avec mon excel 2003..
il me dit "erreur de compilation sur Me.PrintOut 1, 1, 2
J'ai regardé le code pour comprendre, essayé avec 2007, même problème..
Bien cordialement
philippe

Bonjour philmar,

Désolé pour l'erreur,

J'avais initialement placé le code dans le module de la feuille 'contrat' et ça marchait, j'avais testé.

Puis j'ai déplacé ce code dans le Module1, en oubliant de le modifier.

Rectifie donc la ligne concernée :

Code:
[B][COLOR="Red"]Sheets("contrat")[/COLOR][/B].PrintOut 1, 1, 2

Cordialement.

PS : Bonjour à kiki29
 
Re : archivage si imprimé

Bonjour Papou-net,
cela imprime, après cela plante sur la copie :
Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
False, Transpose:=False
Bonne journée
Philippe

Voici donc le fichier corrigé.

Je pense que le problème venait du fait de la suppression de la ligne du contrat avant sa copie dans la feuille 'sauvegarde'.

En tout cas, maintenant ça fonctionne chez moi.

Bonne journée.

Cordialement.
 

Pièces jointes

Re : archivage si imprimé

Papou-net, Kiki-29, merci beaucoup pour votre aide, je vais essayer de faire fonctionner le code de kiki-29 qui oblige l'impression à partir de la macro, avec la macro de Papou-net (qui fonctionne), et je publie le résultat.
Bonne journée !
Philippe
 
Re : archivage si imprimé

Re-bonjour philmar,

Après un test plus poussé de ton application,

Je me suis aperçu qu'il subsistait quelques anomalies, notamment au niveau de la plage nommée 'num_ctrat' qui se modifiait à chaque suppression de ligne de contrat.

Donc, au lieu de supprimer les lignes de contrats imprimées, je procède à leur effacement puis à un tri alphanumérique afin d'éliminer des lignes vierges dans la liste déroulante.

Par ailleurs, pour éviter des erreurs système, le bouton 'Imprimer' est désactivé si la cellule 'D6' est vide. Après l'impression, j'efface cette cellule, ce qui permet de mettre à jour la liste déroulante grâce à la macro événementielle suivante :

Code:
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Target.Address = "$D$6" Then Exit Sub
[B]If Target.Value = "" Then
  CommandButton1.Enabled = False
  Exit Sub
  Else
  CommandButton1.Enabled = True
End If[/B]
lg = Sheets("base").Range("A:A").Find(Sheets("contrat").Range("D6"), LookIn:=xlValues).Row
For col = 2 To 11
  Cells(col + 7, 2) = Sheets("base").Cells(lg, col)
Next
End Sub

J'ai aussi ajouté une prévisualisation avant impression, si elle te gêne il te suffit de supprimer la ligne en rouge :

Code:
Sub Imprimer()
Dim LgPn As Long ' Variable stockant le N° de ligne à imprimer
Dim LgCp As Long ' Variable stockant le N° de ligne à copier et à supprimer

LgPn = Sheets("base").Range("A:A").Find(Sheets("contrat").Range("D6"), LookIn:=xlValues).Row
[COLOR="Red"][B]Sheets("contrat").PrintPreview[/B][/COLOR]
Sheets("contrat").PrintOut 1, 1, 2
' Copie et suppression de la ligne imprimée
With Sheets("base")
  .Rows(LgPn).Copy
End With
' Ajout de la ligne imprimée dans la feuille sauvegarde
With Sheets("sauvegarde")
  LgCp = .Range("A65536").End(xlUp).Row + 1
  .Range("A" & LgCp).PasteSpecial Paste:=xlPasteAll, Operation:=xlNone, SkipBlanks:= _
    False, Transpose:=False
  ' Tri de la feuille sauvegarde
  .Cells.Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
  Application.CutCopyMode = False
End With
With Sheets("base")
  .Rows(LgPn).ClearContents
  .Cells.Sort Key1:=.Range("A1"), Order1:=xlAscending, Header:=xlYes, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
End With
Sheets("contrat").Range("D6") = ""
End Sub

Je n'ai pas encore eu le temps de regarder pour la commande 'Imprimer' du menu, mais je n'oublie pas.

Cordialement.
 

Pièces jointes

Re : archivage si imprimé

Re-bonjour Papou-net,
cela fonctionne très bien, mais il ne faut pas supprimer la ligne de contrat dans base, juste copier celle sélectionnée pour l'impression dans sauvegarde.
En effet sauvegarde sert juste de contrôle : avoir l'assurance que le contrat de travail a été imprimé, et quand. La base est la liste réelle des contrats saisis, qui pour l'anecdote servira de registre du personnel.
Bien cordialement
Philippe
 
Re : archivage si imprimé

Re-bonjour Papou-net,
cela fonctionne très bien, mais il ne faut pas supprimer la ligne de contrat dans base, juste copier celle sélectionnée pour l'impression dans sauvegarde.
En effet sauvegarde sert juste de contrôle : avoir l'assurance que le contrat de travail a été imprimé, et quand. La base est la liste réelle des contrats saisis, qui pour l'anecdote servira de registre du personnel.
Bien cordialement
Philippe

Bien reçu, et corrigé.

Voici donc la dernière version, avec désactivation du menu et du bouton 'Imprimer' quand la feuille 'contrat' est active.

Une petite remarque :

Chez moi, le bouton 'Imprimer' est le 6ème bouton de la barre d'outils 'Standard'. Si ce n'est pas le cas chez toi, je pense qu'il faut alors modifier cette valeur (enfin, je crois).

Code:
Private Sub Worksheet_Activate()
CommandBars("Standard").Controls([COLOR="Red"][B]6[/B][/COLOR]).Enabled = False
CommandBars(1).Controls("Fichier").Controls("Imprimer...").Enabled = False
If Range("D6").Value = "" Then
  CommandButton1.Enabled = False
  Else
  CommandButton1.Enabled = True
End If
End Sub

Attention : si d'autres classeurs sont ouverts en même temps, les commandes 'Imprimer' seront également inactives dans ceux-ci. Il faut alors revenir dans ce fichier et sélectionner une autre feuille pour rétablir les commandes pour l'ensemble des fichiers.

Espérant avoir répondu.

Bonne journée.

Cordialement.
 

Pièces jointes

Dernière édition:
Re : archivage si imprimé

Cela fonctionne, sauf que:
les formules recherchev qui sont dans la feuille contrat sont effacées à chaque impression, alors qu'elles sont indispensables, il me les faut pour pouvoir afficher les bonnes informations du bon contrat à chaque fois qu'on veut imprimer.
Corrigé : On ne voit plus l'icone imprimer, ni dans la menu fichier..mais plus du tout même en fermant le fichier et avec un autre fichier excel.
Merci
Bonne journée
 
Dernière édition:
Re : archivage si imprimé

Cela fonctionne, sauf que:
les formules recherchev qui sont dans la feuille contrat sont effacées à chaque impression, alors qu'elles sont indispensables, il me les faut pour pouvoir afficher les bonnes informations du bon contrat à chaque fois qu'on veut imprimer.
Corrigé : On ne voit plus l'icone imprimer, ni dans la menu fichier..mais plus du tout même en fermant le fichier et avec un autre fichier excel.
Merci
Bonne journée

1/ Je t'avais mentionné, dans un message précédent, que j'avais supprimé les formules car cela créait un code erreur dans les cellules après impression. Il est vrai que c'est parce que la ligne était supprimée et donc la formule RECHERCHEV ne trouvait plus les données. Ce n'est plus le cas maintenant, mais par contre lors du choix dans la liste déroulante, les données s'affichent automatiquement.

2/ Comment as-tu quitté le fichier ? Si tu quittes en cliquant sur la croix, la macro devrait rétablir les commandes Imprimer dans le menu et la barre d'outils. C'est en tout cas ce qui se passe sur mon poste de travail. Mais il est vrai que cela représente toujours un risque de modifier les menus, car en cas de plantage, les commandes ne sont pas rétablies. Pour les remettre en ordre, ouvre un nouveau fichier et crées la macro suivante :

Code:
Sub RetablirMenus()
Application.CommandBars("Standard").Controls(6).Enabled = True
Application.CommandBars(1).Controls("Fichier").Controls("Imprimer...").Enabled = True
End Sub

Dans ces conditions, il me semble qu'une solution satisfaisante serait de reprendre celle proposée par kiki29, que je salue. Moi, je t'ai proposé la mienne pour répondre exactement à ta demande.

Restant à ton écoute.

Cordialement.
 
Re : archivage si imprimé

Bonsoir papou-net, et merci pour le temps considérable que tu as du passer sur mon problème; je vais essayer ce soir de faire une synthèse des différents codes; le seul problème qui me reste c'est le fait que les formules s'effacent dans la feuille contrat.
Bonne soirée et merci encore
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

D
Réponses
0
Affichages
954
dom29
D
  • Question Question
Microsoft 365 Fleurissement.
Réponses
84
Affichages
9 K
W
Réponses
6
Affichages
1 K
Wikimel
W
X
Réponses
4
Affichages
1 K
xarux
X
J
Réponses
42
Affichages
7 K
J
Réponses
4
Affichages
662
A
Réponses
5
Affichages
1 K
arthur203
A
J
Réponses
3
Affichages
915
Retour