Conditions d'impression si
Résolu/Fermé
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
-
18 mai 2016 à 15:48
micaille01 Messages postés 45 Date d'inscription mercredi 18 mai 2016 Statut Membre Dernière intervention 17 juillet 2016 - 17 juil. 2016 à 21:44
micaille01 Messages postés 45 Date d'inscription mercredi 18 mai 2016 Statut Membre Dernière intervention 17 juillet 2016 - 17 juil. 2016 à 21:44
A voir également:
- Conditions d'impression si
- Spouleur d'impression - Guide
- Excel cellule couleur si condition texte - Guide
- Impression ecran windows - Guide
- Impression livret word - Guide
- Impression ecran samsung - Guide
16 réponses
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
18 mai 2016 à 16:36
18 mai 2016 à 16:36
Bonjour,
une facon de faire
une facon de faire
Sub Impression() For NS = 1 To 7 If Worksheets(NS).Name = "Synthése" Or Worksheets(NS).Range("E9") <> "" Then Worksheets(Worksheets(NS).Name).PrintOut End If Next NS End Sub
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
24 mai 2016 à 12:51
24 mai 2016 à 12:51
J'été parti quelques jour et je suis de retour au boulot!
merci à f894009 et albkan pour ces infos.
J'ai déjà une macro de numérotation qui fonctionne.
j'ai fais les petites modif et ai copé la macro impression à la suite de la précédente mais quand je la lance il me signale une erreur de variable non définie et me met la ligne" sub Impression ()" en jaune.
Quid
merci à f894009 et albkan pour ces infos.
J'ai déjà une macro de numérotation qui fonctionne.
j'ai fais les petites modif et ai copé la macro impression à la suite de la précédente mais quand je la lance il me signale une erreur de variable non définie et me met la ligne" sub Impression ()" en jaune.
Quid
f894009
Messages postés
17181
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
21 mars 2024
1 701
Modifié par f894009 le 24/05/2016 à 12:56
Modifié par f894009 le 24/05/2016 à 12:56
Bonjour,
Ben oui, mais sans voir votre code pas vraiment possible. Une idee, si vous avez mis option explicit en debut, y a une ou plusieurs variables non declarees
Ben oui, mais sans voir votre code pas vraiment possible. Une idee, si vous avez mis option explicit en debut, y a une ou plusieurs variables non declarees
Utilisateur anonyme
24 mai 2016 à 13:03
24 mai 2016 à 13:03
Bonjour micaille01,
Dans le code VBA de la Sub Impression, ajoutes la 2ème ligne :
Sub Impression()
Dim NS As Byte
Normalement, ça devrait marcher. Cordialement. 😊
Dans le code VBA de la Sub Impression, ajoutes la 2ème ligne :
Sub Impression()
Dim NS As Byte
Normalement, ça devrait marcher. Cordialement. 😊
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
24 mai 2016 à 13:58
24 mai 2016 à 13:58
ça c'est nikel.
ça marche top.
Maintenant, si c'est possible, je voudrai:
que la macro d'impression se lance automatiquement à la fermeture de n'importe quelle feuille du classeur
que les ligne 21 à 26 de la feuille synthèse, n'apparaissent que si le montant de la case "F" de ces mêmes lignes est supérieure à 0.
Merci de votre aide.
ça marche top.
Maintenant, si c'est possible, je voudrai:
que la macro d'impression se lance automatiquement à la fermeture de n'importe quelle feuille du classeur
que les ligne 21 à 26 de la feuille synthèse, n'apparaissent que si le montant de la case "F" de ces mêmes lignes est supérieure à 0.
Merci de votre aide.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
24 mai 2016 à 14:09
24 mai 2016 à 14:09
oui c'est bien cela
Dans ce cas, va sur ThisWorkbook, et pour Workbook,
ajoutes la Sub BeforeClose ; tu dois alors avoir :
Ensuite, 2 solutions :
1) Tu laisses ta sub Impression() où elle est et tu mets dans
BeforeClose un appel à cette sub :
2) Tu mets tout le code de la sub Impression dans BeforeClose :
Je te conseille la solution 1) seulement si tu veux, en plus de l'impression
automatique à la fermeture du classeur, pouvoir lancer manuellement
toi-même l'impression.
Sinon, si tu veux imprimer uniquement à la fermeture du classeur,
choisis la solution 2)
Remarque : dans les 2 cas, n'oublies pas que ton imprimante doit avoir
suffisamment de feuilles et d'encre (en cartouche ou en toner) !
Cordialement. 😊
ajoutes la Sub BeforeClose ; tu dois alors avoir :
Private Sub Workbook_BeforeClose(Cancel As Boolean) End Sub
Ensuite, 2 solutions :
1) Tu laisses ta sub Impression() où elle est et tu mets dans
BeforeClose un appel à cette sub :
Private Sub Workbook_BeforeClose(Cancel As Boolean) Impression End Sub
2) Tu mets tout le code de la sub Impression dans BeforeClose :
Private Sub Workbook_BeforeClose(Cancel As Boolean) Dim NS As Byte For NS = 1 To 7 If Worksheets(NS).Name = "Synthése" Or Worksheets(NS).Range("E39") <> "" Then Worksheets(Worksheets(NS).Name).PrintOut End If Next NS End Sub
Je te conseille la solution 1) seulement si tu veux, en plus de l'impression
automatique à la fermeture du classeur, pouvoir lancer manuellement
toi-même l'impression.
Sinon, si tu veux imprimer uniquement à la fermeture du classeur,
choisis la solution 2)
Remarque : dans les 2 cas, n'oublies pas que ton imprimante doit avoir
suffisamment de feuilles et d'encre (en cartouche ou en toner) !
Cordialement. 😊
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
>
Utilisateur anonyme
24 mai 2016 à 15:29
24 mai 2016 à 15:29
ok merci
et si je veux imprimer les feuilles dont la case E39 est supérieure à 0, je remplace "" par ">0"?
et si je veux imprimer les feuilles dont la case E39 est supérieure à 0, je remplace "" par ">0"?
Utilisateur anonyme
>
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
24 mai 2016 à 15:33
24 mai 2016 à 15:33
Oui, mais sans mettre de guillemets :
If Worksheets(NS).Name = "Synthése" Or Worksheets(NS).Range("E39") > 0 Then
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
24 mai 2016 à 15:50
24 mai 2016 à 15:50
Merci encore de la rapidité des réponses.
Si je veux appeler mes feuilles par un chaque fois un nom différents je mets les noms entre "" ou je laisse par ex : For NS = 1 To 7
Si je veux appeler mes feuilles par un chaque fois un nom différents je mets les noms entre "" ou je laisse par ex : For NS = 1 To 7
Laisse : « For NS = 1 To 7 ». Tu peux renommer toutes tes feuilles
du nom que tu veux, SAUF la feuille "Synthèse" : ta sub Imprime()
marchera aussi bien (ou son code déporté dans BeforeClose).
Attention : si par exemple tu ajoutes 3 feuilles, il faudra remplacer
7 par 10 pour prendre en compte ces nouvelles feuilles.
du nom que tu veux, SAUF la feuille "Synthèse" : ta sub Imprime()
marchera aussi bien (ou son code déporté dans BeforeClose).
Attention : si par exemple tu ajoutes 3 feuilles, il faudra remplacer
7 par 10 pour prendre en compte ces nouvelles feuilles.
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
24 mai 2016 à 17:07
24 mai 2016 à 17:07
Pour l'impression à la fermeture du classeur, j'ai un message d'erreur avec la solution 1:
Erreur compilation
Message ambigu détecté:Workbook_BeforeClose(Cancel As Boolean)
Erreur compilation
Message ambigu détecté:Workbook_BeforeClose(Cancel As Boolean)
Vérifie qu'il y a bien une seule procédure BeforeClose ! Donc un seul :
D'autre part, si tu as déporté ici le code de l'ancienne sub Impression,
tu as dû enlever de ton Module1 (n'est-ce-pas ?) :
Si l'erreur persiste, dis-moi si c'est bien dans ThisWorkbook (et pas
dans Module1 ou un autre Module).
Private Sub Workbook_BeforeClose(Cancel As Boolean) ... End Sub
D'autre part, si tu as déporté ici le code de l'ancienne sub Impression,
tu as dû enlever de ton Module1 (n'est-ce-pas ?) :
Sub Impression() End Sub
Si l'erreur persiste, dis-moi si c'est bien dans ThisWorkbook (et pas
dans Module1 ou un autre Module).
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
25 mai 2016 à 22:26
25 mai 2016 à 22:26
ok.
Un grand merci!
j'avais deux before close! maintenant ca marche. J'ai choisi la solution 1 car plus souple
.
Comme il y a une numérotation automatique sur la feuille synthèse,je voudrais que le classeur se ferme toujours sur la feuille synthèse, même si par inadvertance je le ferme sur une autre feuille .
Est-ce possible ?
Un grand merci!
j'avais deux before close! maintenant ca marche. J'ai choisi la solution 1 car plus souple
.
Comme il y a une numérotation automatique sur la feuille synthèse,je voudrais que le classeur se ferme toujours sur la feuille synthèse, même si par inadvertance je le ferme sur une autre feuille .
Est-ce possible ?
Oui, tout à fait ; ton nouvdeau code VBA est alors celui-ci :
Private Sub Workbook_BeforeClose(Cancel As Boolean) Call Impression: WorkSheets("Synthèse").Select End Sub
N'oublie pas de mettre Call devant Impression, car sinon, comme il n'y a pas
de paramètres pour Impression, VBA prendrait « Impression: » comme une
étiquette de programme, et non comme un appel à la sub Impression()..
L'instruction ajoutée après sélectionnera toujours la feuille "Synthèse",
quel que soit sont emplacement parmi les autres feuilles, et bien sûr
à condition de ne pas la renommer !
------------------------------------------------------
Mais si tu es sûr que cette feuille "Synthèse" sera toujours la 1ère feuille
du classeur, tu peux faire plus court en remplaçant "Synthèse" par 1 :
Private Sub Workbook_BeforeClose(Cancel As Boolean) Call Impression: WorkSheets(1).Select End Sub
Cette fois, bien sûr, il faut que personne ne déplace la feuille "Synthèse" !
Si besoin, protège le classeur et sa structure.
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
25 mai 2016 à 23:09
25 mai 2016 à 23:09
Ca fonctionne, j'ai l'impression et il se ferme sur synthèse mais il n'enregistre pas de copie si je ferme sur une autre page que synthèse.
Pour plus de clarté,mon code actuel est celui-ci:
Private Sub Workbook_Open()
Range("B7") = Range("B7") + 1
ActiveWorkbook.Save
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Chemin As String, Numéro_devis As Integer
Chemin = ActiveWorkbook.Path
Numéro_devis = Range("B7")
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:= _
Chemin & "\Devis " & Numéro_devis & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Call Impression: Worksheets("Synthèse").Select
End Sub
Sub Impression()
Dim NS As Byte
For NS = 1 To 12
If Worksheets(NS).Name = "Synthèse" Or Worksheets(NS).Range("E39") > 0 Then
Worksheets(Worksheets(NS).Name).PrintOut
End If
Next NS
End Sub
Pour plus de clarté,mon code actuel est celui-ci:
Private Sub Workbook_Open()
Range("B7") = Range("B7") + 1
ActiveWorkbook.Save
End Sub
Private Sub Workbook_BeforeClose(Cancel As Boolean)
Dim Chemin As String, Numéro_devis As Integer
Chemin = ActiveWorkbook.Path
Numéro_devis = Range("B7")
Application.DisplayAlerts = False
ActiveWorkbook.SaveAs Filename:= _
Chemin & "\Devis " & Numéro_devis & ".xlsx", FileFormat:=xlOpenXMLWorkbook, CreateBackup:=False
Call Impression: Worksheets("Synthèse").Select
End Sub
Sub Impression()
Dim NS As Byte
For NS = 1 To 12
If Worksheets(NS).Name = "Synthèse" Or Worksheets(NS).Range("E39") > 0 Then
Worksheets(Worksheets(NS).Name).PrintOut
End If
Next NS
End Sub
Bonjour micaille01,
D'après ce que tu as écris, c'est seulement si tu es sur la feuille "Synthèse"
qu'il enregistre une copie (puis se ferme). Par « copie », je pense que tu ne
veux pas parler d'une « copie papier » (impression) mais d'une copie sur
disque dur (fichier). Confirme-moi si c'est copie fichier ou copie papier.
Dans Workbook_BeforeClose(..), juste avant la sauvegarde fichier, il y a
une ligne : Application.DisplayAlerts = False ; c'est bon, mais il doit y avoir
ensuite une ligne Application.DisplayAlerts = True, car sans cela, ça peut
provoquer des erreurs aléatoires et inattendues ! Et corriger cela résoudra
peut-être ton problème. Tu peux placer cette nouvelle ligne de code VBA
juste avant la ligne Call Impression: ...
Dis moi si ça s'arrange ou pas.
D'après ce que tu as écris, c'est seulement si tu es sur la feuille "Synthèse"
qu'il enregistre une copie (puis se ferme). Par « copie », je pense que tu ne
veux pas parler d'une « copie papier » (impression) mais d'une copie sur
disque dur (fichier). Confirme-moi si c'est copie fichier ou copie papier.
Dans Workbook_BeforeClose(..), juste avant la sauvegarde fichier, il y a
une ligne : Application.DisplayAlerts = False ; c'est bon, mais il doit y avoir
ensuite une ligne Application.DisplayAlerts = True, car sans cela, ça peut
provoquer des erreurs aléatoires et inattendues ! Et corriger cela résoudra
peut-être ton problème. Tu peux placer cette nouvelle ligne de code VBA
juste avant la ligne Call Impression: ...
Dis moi si ça s'arrange ou pas.
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
26 mai 2016 à 22:51
26 mai 2016 à 22:51
Bonsoir albkan et encore merci de ton suivi.
Il s'agit effectivement d'une copie fichier dont je parlais.
avec ta modification j'ai maintenant une copie fichier à chaque fois et le nouveau n° à l'ouverture sur la feuille synthèse est lui toujours correct avec chaque fois +1.Si je ferme sur la feuille synthèse c'est nickel l'enregistrement fichier est sur le bon n° mais si je ferme sur une autre feuille, il sauve sur un n° qui redémarre à 0 pour chaque feuille.
je sais pas si je suis suffisamment clair...
Il s'agit effectivement d'une copie fichier dont je parlais.
avec ta modification j'ai maintenant une copie fichier à chaque fois et le nouveau n° à l'ouverture sur la feuille synthèse est lui toujours correct avec chaque fois +1.Si je ferme sur la feuille synthèse c'est nickel l'enregistrement fichier est sur le bon n° mais si je ferme sur une autre feuille, il sauve sur un n° qui redémarre à 0 pour chaque feuille.
je sais pas si je suis suffisamment clair...
Bonsoir micaille,
Oui, tu as été suffisamment clair, et merci pour tes précisions
C'est ce qui m'a aidé à trouver d'où vient le problème.
Ça ne marche que sur la feuille "Synthèse" car ton N° de devis
en B7... est sur la feuille "Synthèse", pas sur les autres !
Donc sur la feuille "Synthèse", ça lit B7 qui contient bien le N° de devis ;
sur les autres feuilles, ça lit la cellule B7 de ces autres feuilles qui est
vide, d'où le 0 !
Bon sang, mais c'est bien sûr ! Comme dirait Sherlock Holmes :
« C'est l'évidence même, mon cher Watson ! » 😉
Ayant trouvé la cause du problème, voici la solution :
----------------------------------------------
1) Dans Workbook_Open(), au lieu de Range("B7") = Range("B7") + 1 :
a) Si la feuille Synthèse est toujours la 1ère du classeur, tu peux mettre :
b) Sinon, mets ces 3 lignes :
Attention : mets bien un point ( . ) devant chaque [B7] !
----------------------------------------------
2) Dans Workbook_BeforeClose(..), mets :
a) Si la feuille "Synthèse" est toujours la 1ère :
b) Sinon :
----------------------------------------------
Voilà, problème réglé ! M'est avis que tu vas pouvoir passer
le sujet en « Résolu » ! 😉
Mais peut-être as-tu autre chose à demander ?
Cordialement. 😊
Oui, tu as été suffisamment clair, et merci pour tes précisions
C'est ce qui m'a aidé à trouver d'où vient le problème.
Ça ne marche que sur la feuille "Synthèse" car ton N° de devis
en B7... est sur la feuille "Synthèse", pas sur les autres !
Donc sur la feuille "Synthèse", ça lit B7 qui contient bien le N° de devis ;
sur les autres feuilles, ça lit la cellule B7 de ces autres feuilles qui est
vide, d'où le 0 !
Bon sang, mais c'est bien sûr ! Comme dirait Sherlock Holmes :
« C'est l'évidence même, mon cher Watson ! » 😉
Ayant trouvé la cause du problème, voici la solution :
----------------------------------------------
1) Dans Workbook_Open(), au lieu de Range("B7") = Range("B7") + 1 :
a) Si la feuille Synthèse est toujours la 1ère du classeur, tu peux mettre :
Worksheets(1).[B7] = Worksheets(1).[B7] + 1
b) Sinon, mets ces 3 lignes :
With Worksheets("Synthèse") .[B7] = .[B7] + 1 End With
Attention : mets bien un point ( . ) devant chaque [B7] !
----------------------------------------------
2) Dans Workbook_BeforeClose(..), mets :
a) Si la feuille "Synthèse" est toujours la 1ère :
Numéro_devis = Worksheets(1).[B7]
b) Sinon :
Numéro_devis = Worksheets("Synthèse").[B7]
----------------------------------------------
Voilà, problème réglé ! M'est avis que tu vas pouvoir passer
le sujet en « Résolu » ! 😉
Mais peut-être as-tu autre chose à demander ?
Cordialement. 😊
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
27 mai 2016 à 13:58
27 mai 2016 à 13:58
Yes
Ta solution marche impec et je t'en remercie je vais classer le problème comme resolu et il y en a même eu deux de resolu :impression et numerotation.
Mais j'ai encore une demande si tu as encore un peu de patience:
Dans la feuile synthése il y a les ligne 21 à 26 qui reprennent des titres et des montants.
Je voudrais que les ligne 21 à 26 de la feuille synthèse, n'apparaissent que si le montant de la case "F" de ces mêmes lignes est supérieure à 0.
Merci de votre aide.
Ta solution marche impec et je t'en remercie je vais classer le problème comme resolu et il y en a même eu deux de resolu :impression et numerotation.
Mais j'ai encore une demande si tu as encore un peu de patience:
Dans la feuile synthése il y a les ligne 21 à 26 qui reprennent des titres et des montants.
Je voudrais que les ligne 21 à 26 de la feuille synthèse, n'apparaissent que si le montant de la case "F" de ces mêmes lignes est supérieure à 0.
Merci de votre aide.
Je suis ravi que ma solution marche impec, et qu'il y a 2 problèmes résolus !
Pour ta nouvelle demande, j'ai bien compris que c'est pour la feuille "Synthèse".
À propos, peux-tu me dire si elle est et sera toujours la 1ère feuille du classeur ?
Car c'est plus court de mettre seulement 1 (l'index) plutôt que le nom complet !
Quand tu écris : « Je voudrais que les lignes 21 à 26 n'apparaissent que
si le montant de la case "F" de ces mêmes lignes est supérieur à 0 »,
le veux-tu :
a) Seulement pour la feuille "Synthèse" qui est affichée à l'écran
(et pas à l'impression) ?
b) Seulement pour l'impression de cette feuille (et pas à l'écran) ?
c) Pour a) et b) à la fois ?
------------------------------------------------------
Pour ces 3 cas, il faut commencer par masquer les lignes correspondantes
selon le test de la case "F".
Pour a), il faut ré-afficher ces lignes pour l'impression.
Pour b), les lignes 21 à 26 étant masquées selon le test de la case "F",
lancer manuellement une impression. Ensuite, ré-afficher ces lignes
pour les avoir de nouveau à l'écran.
Pour c), les lignes 21 à 26 sont déjà masquées selon test, aussi bien
pour l'impression que pour l'écran ; il n'y a rien à faire en plus !
Si je me suis trompé et que mon raisonnement n'est pas bon,
n'hésites pas à me le dire ! 😊
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
27 mai 2016 à 20:14
27 mai 2016 à 20:14
Bonjour albkan,
C'est vrai que je n'ai pas été assez précis.
On est sur la solution C avec un masquage à l'écran et à l'impression suivant test case "F"
Mais comment faire?
C'est vrai que je n'ai pas été assez précis.
On est sur la solution C avec un masquage à l'écran et à l'impression suivant test case "F"
Mais comment faire?
Attention : tu as oublié de répondre à ma question concernant la position
de la feuille "Synthèse" dans le classeur ! Est-elle toujours en premier ?
Sans réponse de ta part, je choisirai le plus simple moyen : par l'index 1.
Et ce sera à toi de remplacer par "Synthèse" si besoin !
--------------------------------------------------
Merci d'avoir indiqué que c'est la solution c) ; ça m'arrange bien,
car c'est la plus simple !!! Donc le problème est celui-ci :
Sur la feuille "Synthèse", pour chacune des lignes 21 à 26, la masquer
si la cellule F de la ligne correspondante a un montant supérieur à 0.
Les lignes 21 à 26 correspondant à ce critère seront donc masquées
à l'écran et ne devront pas apparaître à l'impression. Exact ?
--------------------------------------------------
Si oui, est-ce que ça ne résoudra pas du même coup ce que tu as écrit
dans ton message #27 ? Je veux dire par là que masquer les lignes
21 à 26 selon les montants va peut-être faire en sorte que sur la feuille
"Synthèse", tu n'auras que les 7 ou 8 possibilités dont tu as parlé ?
Qu'en penses-tu ?
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
>
Utilisateur anonyme
27 mai 2016 à 22:03
27 mai 2016 à 22:03
Oui la feuille" synthèse" reste toujours la première.
Mais c'est l'inverse je n'ai besoin de faire apparaître que les lignes dont le test montant est supérieur à 0.
Les autres lignes dont le montant est inferieur à 0 ne doivent pas apparaître.
Effectivement automatiquement je crois que la question du message 27 va se résoudre.
Mais c'est l'inverse je n'ai besoin de faire apparaître que les lignes dont le test montant est supérieur à 0.
Les autres lignes dont le montant est inferieur à 0 ne doivent pas apparaître.
Effectivement automatiquement je crois que la question du message 27 va se résoudre.
Merci pour ton message et ta réponse à ma 1ère question.
---------------------------------------------------
Excuse-moi, j'ai effectivement inversé par erreur ! C'est bien :
afficher la ligne n (21 à 26) si le montant en Fn est > à 0, donc :
masquer la ligne n (21 à 26) si le montant en Fn est = à 0 ; car
je ne pense pas qu'il y ait de montant négatif, n'est-ce pas ? 😉
---------------------------------------------------
Un devis avec montant négatif, je n'ai encore jamais vu !
Ça serait comme si un artisan (plombier ou autre) qui n'a même
pas encore commencé les travaux devrait rembourser le client,
cela sans qu'il y ait la moindre raison !
Mais si tu es plombier et que tu fais des devis avec montant négatif,
je te promets que la prochaine fois que j'ai besoin de réparer une
fuite d'eau, je ferai appel à tes services ! 😊
---------------------------------------------------
Et j'espère que la question du message #27 va alors se résoudre
automatiquement ! Sinon, on apportera les modifs nécessaires.
---------------------------------------------------
Excuse-moi, j'ai effectivement inversé par erreur ! C'est bien :
afficher la ligne n (21 à 26) si le montant en Fn est > à 0, donc :
masquer la ligne n (21 à 26) si le montant en Fn est = à 0 ; car
je ne pense pas qu'il y ait de montant négatif, n'est-ce pas ? 😉
---------------------------------------------------
Un devis avec montant négatif, je n'ai encore jamais vu !
Ça serait comme si un artisan (plombier ou autre) qui n'a même
pas encore commencé les travaux devrait rembourser le client,
cela sans qu'il y ait la moindre raison !
Mais si tu es plombier et que tu fais des devis avec montant négatif,
je te promets que la prochaine fois que j'ai besoin de réparer une
fuite d'eau, je ferai appel à tes services ! 😊
---------------------------------------------------
Et j'espère que la question du message #27 va alors se résoudre
automatiquement ! Sinon, on apportera les modifs nécessaires.
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
>
Utilisateur anonyme
27 mai 2016 à 22:31
27 mai 2016 à 22:31
oui c'est bien cela on a pas de montant négatif :-) mais on peut avoir des cases vides .
Utilisateur anonyme
>
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
27 mai 2016 à 23:26
27 mai 2016 à 23:26
Ce code VBA devrait aller :
Cette macro ne se lancera qu'à partir de la feuille 1,
donc à partir de la feuille "Synthèse".
--------------------------------
ATTENTION
Ce qui suit n'est pas à faire manuellement !
C'est fait automatiquement par le code VBA :
Au cas où cette feuille est protégée, il faut d'abord
la déprotéger, masquer les lignes, puis reprotéger
la feuille.
--------------------------------
Si ta feuille "Synthèse" est toujours déprotégée,
et si tu es sûr que tu ne la protègera jamais,
les 2 instructions ActiveSheet.Unprotect et
ActiveSheet.Protect sont inutiles et peuvent
être enlevées.
--------------------------------
À toi de me dire si ça te convient ! 😊
Option Explicit Sub MasqLigs() If ActiveSheet.Index <> 1 Then Exit Sub Dim lig As Byte: ActiveSheet.Unprotect For lig = 21 To 26 If Cells(lig, 6) = 0 Then Rows(lig).Hidden = True Next lig ActiveSheet.Protect End Sub
Cette macro ne se lancera qu'à partir de la feuille 1,
donc à partir de la feuille "Synthèse".
--------------------------------
ATTENTION
Ce qui suit n'est pas à faire manuellement !
C'est fait automatiquement par le code VBA :
Au cas où cette feuille est protégée, il faut d'abord
la déprotéger, masquer les lignes, puis reprotéger
la feuille.
--------------------------------
Si ta feuille "Synthèse" est toujours déprotégée,
et si tu es sûr que tu ne la protègera jamais,
les 2 instructions ActiveSheet.Unprotect et
ActiveSheet.Protect sont inutiles et peuvent
être enlevées.
--------------------------------
À toi de me dire si ça te convient ! 😊
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
27 mai 2016 à 20:21
27 mai 2016 à 20:21
Et si c'est pas exagérer j'irai plus loin.
En fait les possibilités du devis peuvent être signalées sur 13 pages différentes mais pour un seul devis il n'y aura toujours que maximum 7 ou 8 possibilités.
Ce sont ces 7 ou 8 possibilités que je veux ramener sur la feuille synthèse suivant test de la case "F" sur les 13 feuilles.
Voila j'espère que je suis clair... :-)
En fait les possibilités du devis peuvent être signalées sur 13 pages différentes mais pour un seul devis il n'y aura toujours que maximum 7 ou 8 possibilités.
Ce sont ces 7 ou 8 possibilités que je veux ramener sur la feuille synthèse suivant test de la case "F" sur les 13 feuilles.
Voila j'espère que je suis clair... :-)
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
>
Utilisateur anonyme
30 mai 2016 à 11:01
30 mai 2016 à 11:01
Bonjour albkan,
Tu vois ça n'a pas trainer je vais encore avoir besoin de toi...
Dans mes feuilles de" détail devis" j'ai une série de ligne avec des listes déroulantes et des formules de recherche qui vont chercher les prix et qui réponde 0.00€ par défaut en fonction du format cellule monétaire assigné aux cellules.
Je voudrais aussi que juste avant la fermeture , les lignes soit masquées si le test de la colonne b de la ligne correspondante est<0,00€.
Voici la formule actuelle contenue dans ces cellules:
=SI(A12="";""; RECHERCHEV(A12;liste!$A$5:$B$63;2;FAUX)+F13 )
Au départ j'ai que la fonction RechercheV mais j'ai ajouté la fonction SI pour éviter d'avoir une réponse" #N/A" si je sélectionne une ligne blanche.
Peux-tu demander à Coluche quelle macro faut-il où la mettre :-))
Tu vois ça n'a pas trainer je vais encore avoir besoin de toi...
Dans mes feuilles de" détail devis" j'ai une série de ligne avec des listes déroulantes et des formules de recherche qui vont chercher les prix et qui réponde 0.00€ par défaut en fonction du format cellule monétaire assigné aux cellules.
Je voudrais aussi que juste avant la fermeture , les lignes soit masquées si le test de la colonne b de la ligne correspondante est<0,00€.
Voici la formule actuelle contenue dans ces cellules:
=SI(A12="";""; RECHERCHEV(A12;liste!$A$5:$B$63;2;FAUX)+F13 )
Au départ j'ai que la fonction RechercheV mais j'ai ajouté la fonction SI pour éviter d'avoir une réponse" #N/A" si je sélectionne une ligne blanche.
Peux-tu demander à Coluche quelle macro faut-il où la mettre :-))
Utilisateur anonyme
>
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
Modifié par albkan le 30/05/2016 à 12:58
Modifié par albkan le 30/05/2016 à 12:58
Mais c'est Papy Moujot !
Bonjour Papy Moujot, tu es revenu à l'antenne pour tenter de
faire avancer le Schmili schimilili schmilililili li li ... blick ? 😉
Je n'ai pas bien compris ce que tu veux :
---------------------------------------------------------
A) Dans le 1er paragraphe, tu parles de formules de recherche
qui vont chercher les prix. Est-ce que tu as les prix voulus ?
Ou est-ce que tu as toujours 0,00 € ?
Dans le 1er cas, tu as les prix qu'il faut ; dans le 2ème cas,
il faut revoir la formule pour avoir les bons prix.
Mais peut-être as-tu seulement un problème de format à corriger ?
À moins qu'il soit déjà bon, bien sûr !
---------------------------------------------------------
B) Dans le 2ème paragraphe, tu parles de lignes à masquer,
comme on a déjà fait pour la feuille "Synthèse", mais cette fois
pour les autres feuilles, et là encore juste avant la fermeture
du classeur.
On pourrait donc le faire faire aussi par la même sub MasqLigs(),
pour chaque ligne n où Bn < 0 ; mais n : ligne 12 à quelle ligne ?
J'ai pris 12 comme ligne de départ car ta formule du 3ème §
est avec A12.
---------------------------------------------------------
C) Dans ta formule du 3ème §, il y a « liste! » mais ça, ce serait
pour une feuille que tu aurais appelé "liste", pas pour une de
tes listes déroulantes ! Pour référencer une liste déroulante,
il faut utiliser son nom, qui apparaît sur la barre de formule,
devant (et où tu vois d'habitude la référence de la cellule active).
---------------------------------------------------------
Enfin, comme ça commence à devenir plus compliqué, je crois qu'il
serait mieux que tu m'envoies ton fichier via Cjoint, sans données
confidentielles, et sans l'adresse du retraité Papy Moujot !
Cordialement. 😊
Bonjour Papy Moujot, tu es revenu à l'antenne pour tenter de
faire avancer le Schmili schimilili schmilililili li li ... blick ? 😉
Je n'ai pas bien compris ce que tu veux :
---------------------------------------------------------
A) Dans le 1er paragraphe, tu parles de formules de recherche
qui vont chercher les prix. Est-ce que tu as les prix voulus ?
Ou est-ce que tu as toujours 0,00 € ?
Dans le 1er cas, tu as les prix qu'il faut ; dans le 2ème cas,
il faut revoir la formule pour avoir les bons prix.
Mais peut-être as-tu seulement un problème de format à corriger ?
À moins qu'il soit déjà bon, bien sûr !
---------------------------------------------------------
B) Dans le 2ème paragraphe, tu parles de lignes à masquer,
comme on a déjà fait pour la feuille "Synthèse", mais cette fois
pour les autres feuilles, et là encore juste avant la fermeture
du classeur.
On pourrait donc le faire faire aussi par la même sub MasqLigs(),
pour chaque ligne n où Bn < 0 ; mais n : ligne 12 à quelle ligne ?
J'ai pris 12 comme ligne de départ car ta formule du 3ème §
est avec A12.
---------------------------------------------------------
C) Dans ta formule du 3ème §, il y a « liste! » mais ça, ce serait
pour une feuille que tu aurais appelé "liste", pas pour une de
tes listes déroulantes ! Pour référencer une liste déroulante,
il faut utiliser son nom, qui apparaît sur la barre de formule,
devant (et où tu vois d'habitude la référence de la cellule active).
---------------------------------------------------------
Enfin, comme ça commence à devenir plus compliqué, je crois qu'il
serait mieux que tu m'envoies ton fichier via Cjoint, sans données
confidentielles, et sans l'adresse du retraité Papy Moujot !
Cordialement. 😊
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
>
Utilisateur anonyme
30 mai 2016 à 14:06
30 mai 2016 à 14:06
:-)
A)Oui en fait ,j'ai une feuille appelée" liste" dans laquelle j'ai toutes mes listes référencées par nom avec chaque fois l'article et son prix.
Dans mes feuilles devis , j'ai des listes déroulantes qui font références à une liste et une plage bien précise qui se trouve dans la feuille "liste"et suivant l'article choisi, dans la colonne A j'ai la formule recherche qui va rechercher le prix de l'article en question et qui l'indique dans la colonne B. Ca fonctionne très bien.J'ai les prix voulus et je fait la somme en fin de feuille devis et j'y ajoute aussi la Main d'œuvre.
B)Par défaut chaque feuille de devis (j'en ai 14) fait référence à un secteur d'activité : mazout , gaz , sanitaire etc.ou a des kits prédéfinis . Pour chaque feuille j'ai une vingtaine de ligne différentes qui permettent le choix d'articles et qui par défaut me donne 0.00€ dans la colonne prix pour les lignes où aucun article n'est choisi.On est là sur les lignes 9 à 26 /pages. et on pourrait utiliser une formule comme celle de la feuille synthèse pour masquer les lignes qui ne sont pas utilisées car pas d'articles choisis donc avec 0.00€ dans la colonne prix.
C)voir A)
Je sais pas envoyer le fichier par Cjoint.
Papy
A)Oui en fait ,j'ai une feuille appelée" liste" dans laquelle j'ai toutes mes listes référencées par nom avec chaque fois l'article et son prix.
Dans mes feuilles devis , j'ai des listes déroulantes qui font références à une liste et une plage bien précise qui se trouve dans la feuille "liste"et suivant l'article choisi, dans la colonne A j'ai la formule recherche qui va rechercher le prix de l'article en question et qui l'indique dans la colonne B. Ca fonctionne très bien.J'ai les prix voulus et je fait la somme en fin de feuille devis et j'y ajoute aussi la Main d'œuvre.
B)Par défaut chaque feuille de devis (j'en ai 14) fait référence à un secteur d'activité : mazout , gaz , sanitaire etc.ou a des kits prédéfinis . Pour chaque feuille j'ai une vingtaine de ligne différentes qui permettent le choix d'articles et qui par défaut me donne 0.00€ dans la colonne prix pour les lignes où aucun article n'est choisi.On est là sur les lignes 9 à 26 /pages. et on pourrait utiliser une formule comme celle de la feuille synthèse pour masquer les lignes qui ne sont pas utilisées car pas d'articles choisis donc avec 0.00€ dans la colonne prix.
C)voir A)
Je sais pas envoyer le fichier par Cjoint.
Papy
Utilisateur anonyme
>
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
30 mai 2016 à 14:48
30 mai 2016 à 14:48
Merci pour tes réponses, Papy micaille, mais pour pouvoir continuer,
il faudrait vraiment que tu m'envoies ton fichier via Cjoint, ainsi :
- si ton fichier Excel est ouvert, tu dois d'abord l'enregistrer et le fermer.
- s'il ne contient aucune donnée confidentielle, tu peux le laisser tel que
et en transmettre le lien (voir ci-dessous).
- sinon, fais une copie de ton fichier, et remplace ces données privées
par des données inventées (donc bidon) : c'est pour cette copie que
tu devras mettre le lien sur le forum (donc accessible par tous).
- va sur le site cjoint.com
- ouvre le dossier où se trouve ton fichier Excel (ou sa copie anonymisée) :
ouvre une fenêtre explorateur avec < Windows >< e > ; côté gauche :
choisis « Documents » (si tu as Windows 7 ou ultérieur) ;
choisis « Mes documents » si tu as Windows XP ;
tu dois voir ton fichier Excel (ou sa copie) ; peut-être dans un sous-dossier ?
- avec la souris, glisses ton fichier Excel dans la grande case ; attendre un peu,
le temps que ça lise ton fichier ; en dessous, tu dois obligatoirement mettre ton
adresse mail (qui restera privée) ; puis cliques sur le bouton qui est plus bas :
« Créer le lien Cjoint » ; attendre un peu qu'il apparaisse dans la grande case
précédente. Tu dois alors copier / coller le lien dans ton prochain message.
A+ 😊
il faudrait vraiment que tu m'envoies ton fichier via Cjoint, ainsi :
- si ton fichier Excel est ouvert, tu dois d'abord l'enregistrer et le fermer.
- s'il ne contient aucune donnée confidentielle, tu peux le laisser tel que
et en transmettre le lien (voir ci-dessous).
- sinon, fais une copie de ton fichier, et remplace ces données privées
par des données inventées (donc bidon) : c'est pour cette copie que
tu devras mettre le lien sur le forum (donc accessible par tous).
- va sur le site cjoint.com
- ouvre le dossier où se trouve ton fichier Excel (ou sa copie anonymisée) :
ouvre une fenêtre explorateur avec < Windows >< e > ; côté gauche :
choisis « Documents » (si tu as Windows 7 ou ultérieur) ;
choisis « Mes documents » si tu as Windows XP ;
tu dois voir ton fichier Excel (ou sa copie) ; peut-être dans un sous-dossier ?
- avec la souris, glisses ton fichier Excel dans la grande case ; attendre un peu,
le temps que ça lise ton fichier ; en dessous, tu dois obligatoirement mettre ton
adresse mail (qui restera privée) ; puis cliques sur le bouton qui est plus bas :
« Créer le lien Cjoint » ; attendre un peu qu'il apparaisse dans la grande case
précédente. Tu dois alors copier / coller le lien dans ton prochain message.
A+ 😊
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
5 juin 2016 à 00:05
5 juin 2016 à 00:05
Bonsoir Albkan,
j'ai une deuxieme question en plus de mon message #49:Comment je peux faire une copie du classeur complet en PDF car par enregistrer sous:il ne fais qu'une feuille à la fois...
Merci
bonne soirée
Micaille 01 alias papy...
j'ai une deuxieme question en plus de mon message #49:Comment je peux faire une copie du classeur complet en PDF car par enregistrer sous:il ne fais qu'une feuille à la fois...
Merci
bonne soirée
Micaille 01 alias papy...
Bonjour micaille,
Dans Excel, quand tu fais Fichier / Imprimer... ça ouvre la fenêtre « Imprimer »
(logique, n'est-ce-pas ? 😉). Si tu regardes en bas, juste au-dessus du bouton
« Aperçu », le bouton radio présélectionné est : ◉ Feuilles sélectionnées ;
choisis à la place le bouton radio situé au Nord-Est : ◉ Classeur entier
et tu verras que ça marche comme tu veux (en imprimant, bien sûr,
sur ton imprimante virtuelle PDF).
----------------------------------------------------------------
Si tu es le Papy du film « Papy fait de la résistance », tu as dû connaître
les vieux récepteurs TSF pour écouter les émissions du Général De Gaulle
« Ici, Londres » qui diffusaient des messages pour la résistance française,
du genre : « Les sanglots longs des violons d’automne… bercent mon cœur
d'une langueur monotone. » (c'est un message codé, bien sûr !).
Si je t'en parle, c'est parce que sur ces très vieilles radios, enfoncer un bouton
faisait que l'autre qui était déjà enfoncé « ressortait » : un seul bouton à la fois !
C'est par rapport à cette analogie que ceux de Microsoft ont appelé les « ◉ »
des boutons radio : une seule option à la fois !
Alors qu'à l'inverse, pour plusieurs cases à cocher : ☐ et ☑ on peut en cocher
plusieurs à la fois : « c'est étudié pour », comme dirait Fernand Reynaud.
----------------------------------------------------------------
Mais revenons à nos paisibles moutons : ce qui est décrit au 1er paragraphe est
pour Excel 2003 ; dans Excel 2007, le menu fichier est devenu le bouton Office.
Avec Excel 2010 et versions ultérieures, on peut enregistrer directement
un classeur Excel au format PDF, sans passer par l'imprimante virtuelle
PDF créée par le logiciel PDFCreator.
----------------------------------------------------------------
Dis-moi si tu y est arrivé, et indiques-moi aussi :
- ta version de Windows : XP, Vista, 7, ou autre
- ta version de Excel : 2003, 2007, ou autre
Ça m'aidera pour répondre à ton message #49.
Personnellement, j'ai un PC de bureau avec Windows 7 et Excel 2003 ;
et j'ai aussi un PC portable avec Windows XP et Excel 2007.
Je peux donc te répondre par rapport à ces logiciels, mais pas sur les
spécificités des versions ultérieures.
Cordialement. 😊
Dans Excel, quand tu fais Fichier / Imprimer... ça ouvre la fenêtre « Imprimer »
(logique, n'est-ce-pas ? 😉). Si tu regardes en bas, juste au-dessus du bouton
« Aperçu », le bouton radio présélectionné est : ◉ Feuilles sélectionnées ;
choisis à la place le bouton radio situé au Nord-Est : ◉ Classeur entier
et tu verras que ça marche comme tu veux (en imprimant, bien sûr,
sur ton imprimante virtuelle PDF).
----------------------------------------------------------------
Si tu es le Papy du film « Papy fait de la résistance », tu as dû connaître
les vieux récepteurs TSF pour écouter les émissions du Général De Gaulle
« Ici, Londres » qui diffusaient des messages pour la résistance française,
du genre : « Les sanglots longs des violons d’automne… bercent mon cœur
d'une langueur monotone. » (c'est un message codé, bien sûr !).
Si je t'en parle, c'est parce que sur ces très vieilles radios, enfoncer un bouton
faisait que l'autre qui était déjà enfoncé « ressortait » : un seul bouton à la fois !
C'est par rapport à cette analogie que ceux de Microsoft ont appelé les « ◉ »
des boutons radio : une seule option à la fois !
Alors qu'à l'inverse, pour plusieurs cases à cocher : ☐ et ☑ on peut en cocher
plusieurs à la fois : « c'est étudié pour », comme dirait Fernand Reynaud.
----------------------------------------------------------------
Mais revenons à nos paisibles moutons : ce qui est décrit au 1er paragraphe est
pour Excel 2003 ; dans Excel 2007, le menu fichier est devenu le bouton Office.
Avec Excel 2010 et versions ultérieures, on peut enregistrer directement
un classeur Excel au format PDF, sans passer par l'imprimante virtuelle
PDF créée par le logiciel PDFCreator.
----------------------------------------------------------------
Dis-moi si tu y est arrivé, et indiques-moi aussi :
- ta version de Windows : XP, Vista, 7, ou autre
- ta version de Excel : 2003, 2007, ou autre
Ça m'aidera pour répondre à ton message #49.
Personnellement, j'ai un PC de bureau avec Windows 7 et Excel 2003 ;
et j'ai aussi un PC portable avec Windows XP et Excel 2007.
Je peux donc te répondre par rapport à ces logiciels, mais pas sur les
spécificités des versions ultérieures.
Cordialement. 😊
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
>
Utilisateur anonyme
5 juin 2016 à 22:02
5 juin 2016 à 22:02
Bonsoir albkan,
Merci de ta réponse.
J'ai Windows 7 et Excel 2007.
Quand je vais directement pour faire un enregistrer sous PDF il ne prend que la première feuille du classeur.
J'ai pas trouvé les boutons radio dans aperçu...
Je voudrais faire aussi une petite modification dans la macro d'impression. Je vaudrais que l'impression ne se déclenche qu'a la demande car si le devis est envoyé par mail ,pas besoin d'imprimer.
En plus si je protège le classeur pour le faire utiliser par quelqu'un d'autre, il demande le n°de Pin quand je déclenche la fermeture et ça je voudrais éviter.
Possible?
merci d'avance pour tes réponses.
Merci de ta réponse.
J'ai Windows 7 et Excel 2007.
Quand je vais directement pour faire un enregistrer sous PDF il ne prend que la première feuille du classeur.
J'ai pas trouvé les boutons radio dans aperçu...
Je voudrais faire aussi une petite modification dans la macro d'impression. Je vaudrais que l'impression ne se déclenche qu'a la demande car si le devis est envoyé par mail ,pas besoin d'imprimer.
En plus si je protège le classeur pour le faire utiliser par quelqu'un d'autre, il demande le n°de Pin quand je déclenche la fermeture et ça je voudrais éviter.
Possible?
merci d'avance pour tes réponses.
Utilisateur anonyme
>
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
5 juin 2016 à 22:54
5 juin 2016 à 22:54
1) Merci pour tes réponses sur les versions ; ça va bien simplifier les choses !
-----------------------------------------------------
2) Non, il ne faut pas aller dans Aperçu pour les boutons radio dont j'ai parlé !
Donc si tu as bien la fenêtre « Imprimer », ne clique pas sur le bouton
« Aperçu » et regarde seulement juste au-dessus : ils sont là.
Donc si tu as bien choisi ton imprimante virtuelle PDF, il te suffit de choisir :
◉ Classeur entier
dis-moi si tu le vois, cette fois, sinon je t'enverrai une copie d'écran.
Si tu choisis bien cette option, tu verras que le PDF contiendra bien toutes
les feuilles de ton classeur.
-----------------------------------------------------
3) Pour que la macro Impression ne se déclenche qu'à la demande, et pas
automatiquement à la fermeture du classeur, ouvre ThisWorkbook, et dans
la Sub Workbook_BeforeClose(..), change la dernière ligne ; au lieu de :
Call MasqLigs: Impression
mets :
MasqLigs
Le « : Impression » a été enlevé pour ne plus appeler automatiquement
la Sub Impression() à la fermeture du classeur, et comme seul reste
l'appel à MasqLigs(), sans « : » juste à droite, le Call devient inutile
et peut donc être enlevé.
-----------------------------------------------------
4) Je connais le code Pin des mobiles (téléphones portables) :
c'est un code secret à entrer pour pouvoir utiliser le téléphone.
Donc si tu as un message te demandant un code Pin, ça doit être lié
aux communications, mais ça, ce n'est pas du tout mon rayon !
D'après moi, c'est à toi de voir ça avec tes correspondants :
ou ils enlèvent leur code pin, ou ils te le communiquent !
-----------------------------------------------------
En plus de ce message, n'oublies pas de lire aussi mon message #52.
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
5 juin 2016 à 23:16
5 juin 2016 à 23:16
Merci pour la partie impression .C'est ok je vais faire un raccourci clavier pour la déclencher.
Pour le PDF j'ai coché classeur entier mais j'ai tjrs que la 1ere page en PDF...
Le code pin dont je parlais c'est en fait le code que je mets pour protéger les feuilles, c'est donc pas de la communication mais de la sécurité. Je me demande si c'est pas parce que j'ai choisi l'option de ne pouvoir mettre le curseur que sur les cases non verrouillées. or la MasqLigs demande à déprotéger ....
Pour le PDF j'ai coché classeur entier mais j'ai tjrs que la 1ere page en PDF...
Le code pin dont je parlais c'est en fait le code que je mets pour protéger les feuilles, c'est donc pas de la communication mais de la sécurité. Je me demande si c'est pas parce que j'ai choisi l'option de ne pouvoir mettre le curseur que sur les cases non verrouillées. or la MasqLigs demande à déprotéger ....
1) Tu as écrit : « Je vais faire un raccourci clavier pour la déclencher ».
Parfait ! C'est exactement ce qu'il faut faire ! Donc sur ta feuille Excel,
fais < Alt >< F8 > pour avoir la fenêtre « Macros » ; dans la liste des
macros, sélectionne ta macro Impression, puis clique sur le bouton
« Options... » ; dans la petite case, mets la lettre minuscule p, donc
ensuite, il suffira de faire < Ctrl >< p > pour lancer l'impression.
2) Le code que tu mets pour protéger une feuille (ou un classeur)
ne s'appelle pas un code Pin !!! C'est un mot de passe (en anglais :
PassWord, d'où l'abréviation PW). La Sub MasqLigs contient une
instruction ActiveSheet.Unprotect pour déprotéger la feuille, mais
ça ne le fait que pour une protection simple sans PW. Pour une
feuille protégée avec PW, ça demande à l'utilisateur d'entrer le PW,
et seulement s'il est correct, ça déprotège la feuille. Heureusement
que ça fait comme ça, sinon, à quoi servirait-il de mettre un PW ?
3) Tu as choisis l'option « ◉ Classeur entier », c'est bien,
mais ensuite, tu as bien validé par le bouton « OK » ? Si oui,
et si tu imprimes bien sur ton imprimante PDF, ça doit convertir
ton classeur Excel entier en fichier PDF (avec toutes les feuilles) ;
sinon, je ne vois pas...
4) As-tu bien lu mon message #52, ou est-ce devenu obsolète ?
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
>
Utilisateur anonyme
6 juin 2016 à 21:38
6 juin 2016 à 21:38
Bonsoir albkan,
Merci pour ces précisions claires.
Les raccourcis c'est ok.
Au niveau du code de protection j'ai résolu le problème en donnant dans les options de blocage, la possibilité à tous les utilisateurs de modifier le format des lignes. Il suffit d'éliminer la demande de PW (je m'améliore hein!) et ça permet de modifier les lignes de la feuille "synthèse" suivant la macro MasqLigs
Pour l'enregistrement en PDF ça fonctionne aussi.
Un grand merci pour tout ça.
Pour le message 52, en fait il s'agit de tester les feuilles 5 sur la case E42>0 et la feuille 7 sur la case E43>0 et cela à la place chaque fois du test prévu sur la E 39.qui lui reste pour les autres feuilles.
Mais pour l'enrichissement intellectuel si tu pouvais donner aussi dans le cas où il faut tester 2 cases sur la même feuille ça peut être intéressant aussi.
A+
Merci pour ces précisions claires.
Les raccourcis c'est ok.
Au niveau du code de protection j'ai résolu le problème en donnant dans les options de blocage, la possibilité à tous les utilisateurs de modifier le format des lignes. Il suffit d'éliminer la demande de PW (je m'améliore hein!) et ça permet de modifier les lignes de la feuille "synthèse" suivant la macro MasqLigs
Pour l'enregistrement en PDF ça fonctionne aussi.
Un grand merci pour tout ça.
Pour le message 52, en fait il s'agit de tester les feuilles 5 sur la case E42>0 et la feuille 7 sur la case E43>0 et cela à la place chaque fois du test prévu sur la E 39.qui lui reste pour les autres feuilles.
Mais pour l'enrichissement intellectuel si tu pouvais donner aussi dans le cas où il faut tester 2 cases sur la même feuille ça peut être intéressant aussi.
A+
Utilisateur anonyme
>
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
Modifié par albkan le 10/06/2016 à 02:45
Modifié par albkan le 10/06/2016 à 02:45
Bonjour micaille,
Tu t'améliores tellement que tu n'as plus besoin de moi ! 😉
Non, sérieusement, j'ai beaucoup tardé à te répondre à cause de divers
problèmes personnels à régler (rien de grave, rassures-toi, mais des
obligations du genre que tout adulte responsable se doit d'assumer).
-------------------------------------------------
Je suis bien content que tu aies pu régler par toi-même la plupart des
problèmes précédents, dont la demande de PW et l'enregistrement
en PDF du classeur Excel entier (donc toutes les feuilles).
-------------------------------------------------
Il reste donc la sub Impression(). Compte tenu de ta nouvelle demande,
je pense qu'il vaut mieux la remanier ainsi :
Le type de n est Byte, ce qui va si ton classeur Excel n'aura jamais plus de
255 feuilles ; mais si tu penses que ça peut arriver, mets « n As Integer »
au lieu de « n As Byte » !
Le « For Each FX .. Next FX » a remplacé « For NS = 1 To 12 .. Next NS »,
ce qui fait que si tu ajoutes d'autres feuille devis, elles seront prises
en compte sans que tu aies à modifier le 12. Donc dans ce sens, c'est
bien un avantage ; mais tu dois être bien conscient que ça pourra
devenir un inconvénient si par la suite tu ajoutes des feuilles que tu
n'auras pas besoin ou envie d'imprimer (quelle qu'en soit la raison,
par exemple : feuille de calcul d'un autre type, c'est-à-dire autre
qu'un devis).
De plus, tu ne devras pas oublier non plus que pour toute feuille de calcul
ajoutée (devis ou autre), elle s'imprimera seulement selon la règle générale,
c'est-à-dire selon le test [E39] > 0. Si pour une feuille ajoutée il y a une autre
cellule à tester, il faudra l'indiquer en ajoutant dans le test If, par exemple :
Or (n = 15 And .[E48] > 0).
-------------------------------------------------
C'est aussi ce qui explique pourquoi il vaut mieux avoir dès le départ une
vision globale de tout le projet VBA, pour pouvoir tenir compte d'emblée
de toutes les particularités possibles ; à l'inverse, ajouter du code par
petits bouts, au fur et à mesure des besoins s'apparente à faire du
« rafistolage », en mettant des « rustines » par-ci par-là !
Vois comment, pour éviter de faire du « rafistolage », justement, je n'ai
pas hésité à transformer la sub Impression() comme ci-dessus. 😉
Mais j'admets volontiers que selon les cas qui se présentent dans
la pratique, il n'y a parfois pas moyen de faire autrement !
Par exemple quand des clients ou des amis te demandent des devis
au fur et à mesure, et que c'est seulement alors que tu en découvres
les particularités. Je ne vois qu'une solution pour éviter ce genre de
choses : faire un devis type normalisé, qui prévoit d'avance tous
les types de particularités possibles (ou tout au moins la plupart).
-------------------------------------------------
Voici la sub Impression() supplémentaire, que tu as demandée pour
« l'enrichissement intellectuel ». Je fais ces 2 suppositions :
a) pour la feuille 5, c'est : si E39 > 0 ET si E42 > 0
b) pour la feuille 7, c'est : si E39 > 0 OU si E43 > 0
Bien sûr, il faut bien connaître la priorité des opérateurs, afin de mettre,
selon les cas, les parenthèses au bon endroit ! Sans cela... c'est comme
qui dirait « au petit bonheur la chance », et tant mieux si tu trouves par
hasard la bonne combinaison ! À toi de voir du côté Algèbre de Boole !
-------------------------------------------------
Mais si tu regardes bien, l'exemple précédent peut être simplifié ainsi :
Car sauf pour la feuille 1, c'est toujours : si .[E39] > 0 !
-------------------------------------------------
Et pour les 3 sub Impression() qui sont plus haut, on voit aussi facilement que
le cas le plus simple est seulement n = 1 : feuille n° 1 (donc feuille "Synthèse"),
cela sans aucune autre condition (non dépendant d'une ou plusieurs cellules
de cette même feuille).
Cordialement. 😊
Tu t'améliores tellement que tu n'as plus besoin de moi ! 😉
Non, sérieusement, j'ai beaucoup tardé à te répondre à cause de divers
problèmes personnels à régler (rien de grave, rassures-toi, mais des
obligations du genre que tout adulte responsable se doit d'assumer).
-------------------------------------------------
Je suis bien content que tu aies pu régler par toi-même la plupart des
problèmes précédents, dont la demande de PW et l'enregistrement
en PDF du classeur Excel entier (donc toutes les feuilles).
-------------------------------------------------
Il reste donc la sub Impression(). Compte tenu de ta nouvelle demande,
je pense qu'il vaut mieux la remanier ainsi :
Sub Impression() Dim FX As Worksheet, n as Byte For Each FX in Worksheets With FX n = .Index ' n° de la feuille de calcul If n = 1 Or (n = 5 And .[E42] > 0) Or (n = 7 And .[E43] > 0) _ Or (n <> 5 And n <> 7 And .[E39] > 0) Then .PrintOut End With Next FX End Sub
Le type de n est Byte, ce qui va si ton classeur Excel n'aura jamais plus de
255 feuilles ; mais si tu penses que ça peut arriver, mets « n As Integer »
au lieu de « n As Byte » !
Le « For Each FX .. Next FX » a remplacé « For NS = 1 To 12 .. Next NS »,
ce qui fait que si tu ajoutes d'autres feuille devis, elles seront prises
en compte sans que tu aies à modifier le 12. Donc dans ce sens, c'est
bien un avantage ; mais tu dois être bien conscient que ça pourra
devenir un inconvénient si par la suite tu ajoutes des feuilles que tu
n'auras pas besoin ou envie d'imprimer (quelle qu'en soit la raison,
par exemple : feuille de calcul d'un autre type, c'est-à-dire autre
qu'un devis).
De plus, tu ne devras pas oublier non plus que pour toute feuille de calcul
ajoutée (devis ou autre), elle s'imprimera seulement selon la règle générale,
c'est-à-dire selon le test [E39] > 0. Si pour une feuille ajoutée il y a une autre
cellule à tester, il faudra l'indiquer en ajoutant dans le test If, par exemple :
Or (n = 15 And .[E48] > 0).
-------------------------------------------------
C'est aussi ce qui explique pourquoi il vaut mieux avoir dès le départ une
vision globale de tout le projet VBA, pour pouvoir tenir compte d'emblée
de toutes les particularités possibles ; à l'inverse, ajouter du code par
petits bouts, au fur et à mesure des besoins s'apparente à faire du
« rafistolage », en mettant des « rustines » par-ci par-là !
Vois comment, pour éviter de faire du « rafistolage », justement, je n'ai
pas hésité à transformer la sub Impression() comme ci-dessus. 😉
Mais j'admets volontiers que selon les cas qui se présentent dans
la pratique, il n'y a parfois pas moyen de faire autrement !
Par exemple quand des clients ou des amis te demandent des devis
au fur et à mesure, et que c'est seulement alors que tu en découvres
les particularités. Je ne vois qu'une solution pour éviter ce genre de
choses : faire un devis type normalisé, qui prévoit d'avance tous
les types de particularités possibles (ou tout au moins la plupart).
-------------------------------------------------
Voici la sub Impression() supplémentaire, que tu as demandée pour
« l'enrichissement intellectuel ». Je fais ces 2 suppositions :
a) pour la feuille 5, c'est : si E39 > 0 ET si E42 > 0
b) pour la feuille 7, c'est : si E39 > 0 OU si E43 > 0
Sub Impression() Dim FX As Worksheet, n as Byte For Each FX in Worksheets With FX n = .Index ' n° de la feuille de calcul If n = 1 _ Or (n = 5 And .[E39] > 0 And .[E42] > 0) _ Or (n = 7 And (.[E39] > 0 Or .[E43] > 0)) _ Or (n <> 5 And n <> 7 And .[E39] > 0) Then .PrintOut End With Next FX End Sub
Bien sûr, il faut bien connaître la priorité des opérateurs, afin de mettre,
selon les cas, les parenthèses au bon endroit ! Sans cela... c'est comme
qui dirait « au petit bonheur la chance », et tant mieux si tu trouves par
hasard la bonne combinaison ! À toi de voir du côté Algèbre de Boole !
-------------------------------------------------
Mais si tu regardes bien, l'exemple précédent peut être simplifié ainsi :
Sub Impression() Dim FX As Worksheet, n as Byte For Each FX in Worksheets With FX n = .Index ' n° de la feuille de calcul If n = 1 Or .[E39] > 0 Or (n = 5 And .[E42] > 0) _ Or (n = 7 And .[E43] > 0) Then .PrintOut End With Next FX End Sub
Car sauf pour la feuille 1, c'est toujours : si .[E39] > 0 !
-------------------------------------------------
Et pour les 3 sub Impression() qui sont plus haut, on voit aussi facilement que
le cas le plus simple est seulement n = 1 : feuille n° 1 (donc feuille "Synthèse"),
cela sans aucune autre condition (non dépendant d'une ou plusieurs cellules
de cette même feuille).
Cordialement. 😊
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
>
Utilisateur anonyme
16 juin 2016 à 11:34
16 juin 2016 à 11:34
Bonjour albkan,
Pas de problème pour le retard on a tous nos impératifs familiaux.
Si si j'aurai encore bien besoin de tes services car je ne suis encore qu'un bricoleur au B A BA du VBA..
Pas mal hein :-)
Entre temps, pour solutionner mon problème, j'avais essayer une modif de rafistolage comme tu dis mais qui fonctionne et qui consiste à ajouter quelques lignes masquées à certaines pages pour que finalement toutes les cellules à tester tombent toujours sur la même ligne .Comme cela ma formule fonctionne toujours.
Oui je sais c'est du Mac Gaver mais ça fonctionne et j'ai dû modifier quelques formules.
Mais ta solution est hyper claire et je t'en remercie.
Je vais l'utiliser dès que j'envisagerai une prochaine modif.
Effectivement il vaut mieux tout prévoir d'abord pour éviter les bricolages mais quand on commence ce genre de programme on trouve toujours en cours de développement des nouvelles idées et voilà...et je ne suis toujours qu'un bricoleur en Excel...
Voici la prochaine amélioration que je voudrais faire avec ton aide:
Quand un devis est réalisé , il est enregistré dans un fichier Excell dont les macros ne sont pas enregistrées
.
Hors quand même assez souvent le client demande une modification et il faut donc reprendre le devis mais les macros ne fonctionnent plus.
Est-ce que tu as une idée pour solutionner cela?
Merci d'avance pour ta réflexion et bonne journée.
Pas de problème pour le retard on a tous nos impératifs familiaux.
Si si j'aurai encore bien besoin de tes services car je ne suis encore qu'un bricoleur au B A BA du VBA..
Pas mal hein :-)
Entre temps, pour solutionner mon problème, j'avais essayer une modif de rafistolage comme tu dis mais qui fonctionne et qui consiste à ajouter quelques lignes masquées à certaines pages pour que finalement toutes les cellules à tester tombent toujours sur la même ligne .Comme cela ma formule fonctionne toujours.
Oui je sais c'est du Mac Gaver mais ça fonctionne et j'ai dû modifier quelques formules.
Mais ta solution est hyper claire et je t'en remercie.
Je vais l'utiliser dès que j'envisagerai une prochaine modif.
Effectivement il vaut mieux tout prévoir d'abord pour éviter les bricolages mais quand on commence ce genre de programme on trouve toujours en cours de développement des nouvelles idées et voilà...et je ne suis toujours qu'un bricoleur en Excel...
Voici la prochaine amélioration que je voudrais faire avec ton aide:
Quand un devis est réalisé , il est enregistré dans un fichier Excell dont les macros ne sont pas enregistrées
.
Hors quand même assez souvent le client demande une modification et il faut donc reprendre le devis mais les macros ne fonctionnent plus.
Est-ce que tu as une idée pour solutionner cela?
Merci d'avance pour ta réflexion et bonne journée.
Utilisateur anonyme
>
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
16 juin 2016 à 15:20
16 juin 2016 à 15:20
Bonjour micaille,
Incroyable ! Tu as inventé l'informatique couteau suisse !
Je t'assure que McGyver serait très fier de toi ! 😉
En plus, tu dois être pour le moins champion de scrabble pour faire
d'aussi bons jeux de lettres que B A BA du VBA ! Très recherché,
si, si ! Ça va chercher dans les 8 (4 + 3 + 1) × 3 = 24 points si tu
arrives à le placer sur une case « Mot compte triple » ! Bravo !
Tu as gagné la partie ! 😉
----------------------------------------------
Je me rappelle que tu as Excel 2007. Si tu veux enregistrer un classeur Excel
qui contient des macros, au moment d'enregistrer ton fichier, tu ne dois pas
utiliser le type de fichier « Classeur Excel » car celui-ci est pour un classeur
Excel sans macros et produit Devis.xlsx ; à la place, tu dois utiliser le type
de fichier « Classeur Excel (prenant en charge les macros) » qui produira
Devis.xlsm ; tu peux faire ce choix dans la fenêtre « Enregistrer sous »,
qui s'ouvre automatiquement lors de la 1ère sauvegarde du fichier,
ou que tu peux ouvrir toi-même en appuyant sur la touche < F12 >.
Quand tu verras ta fenêtre « Enregistrer sous », regarde au bas de celle-ci :
la 2ème longue case est pour choisir le Type de fichier : clique sur la petite
flèche bas tout au bout à droite pour voir la liste.
Cordialement. 😊
Incroyable ! Tu as inventé l'informatique couteau suisse !
Je t'assure que McGyver serait très fier de toi ! 😉
En plus, tu dois être pour le moins champion de scrabble pour faire
d'aussi bons jeux de lettres que B A BA du VBA ! Très recherché,
si, si ! Ça va chercher dans les 8 (4 + 3 + 1) × 3 = 24 points si tu
arrives à le placer sur une case « Mot compte triple » ! Bravo !
Tu as gagné la partie ! 😉
----------------------------------------------
Je me rappelle que tu as Excel 2007. Si tu veux enregistrer un classeur Excel
qui contient des macros, au moment d'enregistrer ton fichier, tu ne dois pas
utiliser le type de fichier « Classeur Excel » car celui-ci est pour un classeur
Excel sans macros et produit Devis.xlsx ; à la place, tu dois utiliser le type
de fichier « Classeur Excel (prenant en charge les macros) » qui produira
Devis.xlsm ; tu peux faire ce choix dans la fenêtre « Enregistrer sous »,
qui s'ouvre automatiquement lors de la 1ère sauvegarde du fichier,
ou que tu peux ouvrir toi-même en appuyant sur la touche < F12 >.
Quand tu verras ta fenêtre « Enregistrer sous », regarde au bas de celle-ci :
la 2ème longue case est pour choisir le Type de fichier : clique sur la petite
flèche bas tout au bout à droite pour voir la liste.
Cordialement. 😊
micaille01
Messages postés
45
Date d'inscription
mercredi 18 mai 2016
Statut
Membre
Dernière intervention
17 juillet 2016
20 juin 2016 à 00:23
20 juin 2016 à 00:23
oui
18 mai 2016 à 17:17
je crois que cette macro va imprimer toutes les feuilles dont la case E39 ne sera pas 0
J'ai oublié de préciser que la 1ere feuille synthèse doit toujours s'imprimer et que ce sont les 6 autres qui ne doivent s'imprimer que si E39 est diffèrent de 0.
Est-ce qu'il faut modifier quelque chose?
18 mai 2016 à 18:08
Le code VBA de f894009 contient une toute petite erreur par rapport à
ce que tu veux faire : comme tu veux tester la case E39, il faut ajouter
un 3 devant le 9 de Range("E9"), ce qui donne : Range("E39")
D'autre part, dans ton énoncé initial, tu avais écrit : « ...dont la case E39
est différente de "" », et c'est bien ce qu'à mis f894009. Si tu écris
maintenant « ...que si E39 est différent de 0 », alors tu dois mettre 0
à la place, ce qui donne : Range("E39") <> 0
Enfin, tu n'as rien d'autre à changer dans le code VBA de f894009 :
il imprime systématiquement la 1ère feuille "Synthèse" et
éventuellement toutes les autres (selon le test de E39).
Cordialement. 😊
18 mai 2016 à 19:11
Merci d'avoir rectifier cette erreur de doigts car j'avais pris E9 pour tester