XL 2016 Ne pas imprimer si 0 dans une cellule

Steven36600

XLDnaute Nouveau
Bonjour,
Je souhaiterais imprimer 2 cellules "K40 + K41" depuis un bouton rapide avec pour nombre de copies ce qui est affiché dans la cellule C2.
Le petit problème est que quand il y a un 0 dans cette cellule C2, la macro ne veut pas imprimer les autres demandes qui elles ne sont pas à 0...

Impression K40+K41 depuis C2
Impression L40+L41 depuis C4
Impression M40+M41 depuis C6
Impression N40+N41 depuis C8

Est ce que quelqu'un pourrait me donner l'astuce pour que quand il y a 0 dans une des cellules (C2/C4/C6/C8) le reste s'imprime quand même SVP

Voici ma formule d'impression pour le moment :
Sub Impression()
ActiveSheet.PageSetup.PrintArea = "$K$40:$K$41"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C2")
ActiveSheet.PageSetup.PrintArea = "$L$40:$L$41"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C4")
ActiveSheet.PageSetup.PrintArea = "$M$40:$M$41"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C6")
ActiveSheet.PageSetup.PrintArea = "$N$40:$N$41"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C8")
ActiveSheet.PageSetup.PrintArea = "$K$45:$K$46"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C10")
ActiveSheet.PageSetup.PrintArea = "$L$45:$L$46"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C12")
ActiveSheet.PageSetup.PrintArea = "$M$45:$M$46"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C14")
ActiveSheet.PageSetup.PrintArea = "$N$45:$N$46"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C16")
End Sub

Merci à ceux qui me répondront
 
Solution
Re
une fois que j'appuies sur la poubelle, ca me supprime toutes les quantités cumulées dans le tableau du bas..
C'est que j'ai mal compris, la formule que j'ai mise reprend les valeurs du haut, je n'avais pas compris que s'était un cumul général, je reprends cela.
Sur le sandwich, le + et le - ne se cumule pas comme les autres sur la cellule C30
Je regarde cela. (vu : la formule n'est pas la bonne !)
Est ce que tu arriverais à mettre ta formule impression dans mon fichier ?
Oui certainement, mais tu devrais peut-être essayé par toi toi-même d'abord non ? La macro n'est pas si complexe.
Et petite question : vu que c'est un test pour un évènement mais qu'il y aura surement d'autres choses à...

Steven36600

XLDnaute Nouveau
Bonjour,
Avec une variable NbCopie

Un exemple,
VB:
NbCopie = IIF(Range("C2")>0,Range("C2"),1)

A utiliser pour le reste
A+
Salut wDog66,
Je dois copier ta formule à quel niveau dans mes formules?
Je viens de faire cette formule mais si en C4 j'ai 0 ca ne veut pas m'imprimer le nombre de copies que j'ai en C6

Sub Impression()

ActiveSheet.PageSetup.PrintArea = "$K$40:$K$41"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C2")
NbCopie = IIf(Range("C2") > 0, Range("C2"), 1)

ActiveSheet.PageSetup.PrintArea = "$L$40:$L$41"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C4")
NbCopie = IIf(Range("C4") > 0, Range("C4"), 1)

ActiveSheet.PageSetup.PrintArea = "$M$40:$M$41"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C6")
NbCopie = IIf(Range("C6") > 0, Range("C6"), 1)

ActiveSheet.PageSetup.PrintArea = "$N$40:$N$41"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C8")
NbCopie = IIf(Range("C8") > 0, Range("C8"), 1)

ActiveSheet.PageSetup.PrintArea = "$K$45:$K$46"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C10")
NbCopie = IIf(Range("C10") > 0, Range("C10"), 1)

ActiveSheet.PageSetup.PrintArea = "$L$45:$L$46"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C12")
NbCopie = IIf(Range("C12") > 0, Range("C12"), 1)

ActiveSheet.PageSetup.PrintArea = "$M$45:$M$46"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C14")
NbCopie = IIf(Range("C14") > 0, Range("C14"), 1)

ActiveSheet.PageSetup.PrintArea = "$N$45:$N$46"
ActiveWindow.SelectedSheets.PrintOut Copies:=Range("C16")
NbCopie = IIf(Range("C16") > 0, Range("C16"), 1)

End Sub
 

wDog66

XLDnaute Occasionnel
Re,

Punaise soyez logique SVP :rolleyes:

Votre problème
Le petit problème est que quand il y a un 0 dans cette cellule C2, la macro ne veut pas imprimer les autres demandes qui elles ne sont pas à 0...
Donc pour vous quelle en est la raison ?

Si j'ai bien compris, vous avez le numéro de copie en C2 (par exemple), donc :
VB:
ActiveSheet.PageSetup.PrintArea = "$K$40:$K$41"
NbCopie = IIf(Range("C2") > 0, Range("C2"), 1)
ActiveWindow.SelectedSheets.PrintOut Copies:=NbCopie

A+
 

Steven36600

XLDnaute Nouveau
Je viens de copier votre formule et ca ne fonctionne pas plus que ca...

En C2 j'ai le chiffre 2, ca m'imprime bien 2 copies des cellules associées, en C4 j'ai le chiffre 0 et ca m'imprime quand même une page avec les cellules qui lui sont associées aussi et ainsi de suite...

Ma demande étant de ne pas imprimer C4 vu que le chiffre est 0
 

AtTheOne

XLDnaute Accro
Supporter XLD
Bonjour à toutes & à tous, bonjour @Steven36600 , @wDog66
vous pédalez un peu vite pour moi !
voilà ce que je propose :
VB:
Sub Impression()

     With Sh2Print 'nom VB de la feuille à imprimer (voir dans la fenêtre Propriété)
          If .[C2] > 0 Then .PageSetup.PrintArea = "$K$40:$K$41": .PrintOut Copies:=.[C2]
          If .[C4] > 0 Then .PageSetup.PrintArea = "$L$40:$L$41": .PrintOut Copies:=.[C4]
          If .[C6] > 0 Then .PageSetup.PrintArea = "$M$40:$M$41": .PrintOut Copies:=.[C6]
          If .[C8] > 0 Then .PageSetup.PrintArea = "$N$40:$N$41": .PrintOut Copies:=.[C8]
          If .[C10] > 0 Then .PageSetup.PrintArea = "$K$45:$K$46": .PrintOut Copies:=.[C10]
          If .[C12] > 0 Then .PageSetup.PrintArea = "$L$45:$L$46": .PrintOut Copies:=.[C12]
          If .[C14] > 0 Then .PageSetup.PrintArea = "$M$45:$M$46": .PrintOut Copies:=.[C14]
          If .[C16] > 0 Then .PageSetup.PrintArea = "$N$45:$N$46": .PrintOut Copies:=.[C16]
     End With
    
End Sub

voir le fichier joint (je n'ai pas encore regarder le fichier du post #7)
 

Pièces jointes

  • Ne pas imprimer si 0 dans une cellule.xlsm
    34.7 KB · Affichages: 2

AtTheOne

XLDnaute Accro
Supporter XLD
Re
Voilà ce que j'ai fait avec ton fichier :
j'ai nommé toutes les images :
Sandwich plusSandwich moins
Menu_Enfant plusMenu_Enfant moins
Frites plusFrites moins
Chips plusChips moins
Soft plusSoft moins
Eau plusEau moins
Vin plusVin moins
Bière plusBière moins
Btn RàZ
Btn Imprimer

J'ai modifier ta macro d'impression (cf celle de mon post précédent) :
VB:
Sub Impression()

     With Sh2Print 'nom VB de la feuille à imprimer (voir dans la fenêtre Propriété de la feuille)
          If .[C2] > 0 Then .PageSetup.PrintArea = "$K$40:$K$41": .PrintOut Copies:=.[C2]
          If .[C4] > 0 Then .PageSetup.PrintArea = "$L$40:$L$41": .PrintOut Copies:=.[C4]
          If .[C6] > 0 Then .PageSetup.PrintArea = "$M$40:$M$41": .PrintOut Copies:=.[C6]
          If .[C8] > 0 Then .PageSetup.PrintArea = "$N$40:$N$41": .PrintOut Copies:=.[C8]
          If .[C10] > 0 Then .PageSetup.PrintArea = "$K$45:$K$46": .PrintOut Copies:=.[C10]
          If .[C12] > 0 Then .PageSetup.PrintArea = "$L$45:$L$46": .PrintOut Copies:=.[C12]
          If .[C14] > 0 Then .PageSetup.PrintArea = "$M$45:$M$46": .PrintOut Copies:=.[C14]
          If .[C16] > 0 Then .PageSetup.PrintArea = "$N$45:$N$46": .PrintOut Copies:=.[C16]
     End With
   
End Sub

J'ai supprimé toutes tes macros "lepousse" que j'ai remplacées par une seule :
VB:
Sub Change()
   
     Const col = 3
     Dim Cible As Range
   
     Btn = Application.Caller
     lgn = Sh2Print.Shapes(Btn).TopLeftCell.Row
     tb = Split(Btn, " ")
   
     Set Cible = Sh2Print.Cells(lgn, col)
     If tb(1) = "plus" Then Cible = Cible + 1
     If tb(1) = "moins" Then Cible = WorksheetFunction.Max(0, Cible - 1)
   
End Sub
En mettant un planché =0 au nombre contenu dans les cellules Ci (pas de commande négative)

J'ai réécrit ta macro RàZ :
VB:
Sub RaZ()
     With Sh2Print
          Union(.[C2], .[C4], .[C6], .[C8], .[C10], .[C12], .[C14], .[C16]).Value = 0
     End With
End Sub

j'ai modifié le contenu des cellules B reprenant les nombres commandés avec la formule :

Enrichi (BBcode):
=RECHERCHEV($A30;$A$2:$C$16;3;FAUX)
tirée vers le bas de B30 à B37

remarque : ne faudrait-il pas créer un seul ticket avec tous les produits de la commande plutôt que n tickets ?
mais ça c'est toi qui vois ...

voir le fichier joint
À bientôt
 

Pièces jointes

  • TEST TICKETS AtTheOne.xlsm
    92.4 KB · Affichages: 2
Dernière édition:

Steven36600

XLDnaute Nouveau
Re,

Je sais pas comment te dire merci la!!!!!!
Il y aura plusieurs tickets car la buvette et la tente repas ne seront pas au même endroit.
C'est parfait, il y a juste un tout petit soucis que je n'arriverais jamais à régler dans tes lignes de commandes...
Sur le sandwich, le + et le - ne se cumule pas comme les autres sur la cellule C30 et une fois que j'appuies sur la poubelle, ca me supprime toutes les quantités cumulées dans le tableau du bas...

Et petite question : vu que c'est un test pour un évènement mais qu'il y aura surement d'autres choses à rajouter, je fais comment? 🤣
 

AtTheOne

XLDnaute Accro
Supporter XLD
Re
une fois que j'appuies sur la poubelle, ca me supprime toutes les quantités cumulées dans le tableau du bas..
C'est que j'ai mal compris, la formule que j'ai mise reprend les valeurs du haut, je n'avais pas compris que s'était un cumul général, je reprends cela.
Sur le sandwich, le + et le - ne se cumule pas comme les autres sur la cellule C30
Je regarde cela. (vu : la formule n'est pas la bonne !)
Est ce que tu arriverais à mettre ta formule impression dans mon fichier ?
Oui certainement, mais tu devrais peut-être essayé par toi toi-même d'abord non ? La macro n'est pas si complexe.
Et petite question : vu que c'est un test pour un évènement mais qu'il y aura surement d'autres choses à rajouter, je fais comment?
Il n'y a que 3 macros à adapter, et à nommer les nouvelles images que tu ajouteras en respectant le principe que j'ai adopté (Nom_Du_Produit_sans_espacesespaceplus ou moins) et leur affecter la macro "Change"

Voilà une version qui prend en compte les deux 1er points, j'ai commenté les macros pour démystifier tout cela.

Macro d'impression :
VB:
Sub Impression()
    
'J'ai modifié le nom VB de la feuille à imprimer dans la fenêtre Propriété de cette feuille
'voir en bas à gauche la 1ère propriété "(name)" son nom est "Sh2Print"
    
'Pour chacune des cellules "C2", "C4", "C6", "C8", "C10", "C12", "C14", "C16" de la feuille Sh2Print
'si la cellule contient un nombre positif, on définit la zone d'impression et on imprime
     With Sh2Print
    
          If .[C2] > 0 Then .PageSetup.PrintArea = "$K$40:$K$41": .PrintOut Copies:=.[C2]      ', Preview:=True 'Si aperçu avant impression
          If .[C4] > 0 Then .PageSetup.PrintArea = "$L$40:$L$41": .PrintOut Copies:=.[C4]      ', Preview:=True
          If .[C6] > 0 Then .PageSetup.PrintArea = "$M$40:$M$41": .PrintOut Copies:=.[C6]      ', Preview:=True
          If .[C8] > 0 Then .PageSetup.PrintArea = "$N$40:$N$41": .PrintOut Copies:=.[C8]      ', Preview:=True
          If .[C10] > 0 Then .PageSetup.PrintArea = "$K$45:$K$46": .PrintOut Copies:=.[C10]    ', Preview:=True
          If .[C12] > 0 Then .PageSetup.PrintArea = "$L$45:$L$46": .PrintOut Copies:=.[C12]    ', Preview:=True
          If .[C14] > 0 Then .PageSetup.PrintArea = "$M$45:$M$46": .PrintOut Copies:=.[C14]    ', Preview:=True
          If .[C16] > 0 Then .PageSetup.PrintArea = "$N$45:$N$46": .PrintOut Copies:=.[C16]    ', Preview:=True
          
     End With

End Sub
(Si tu veux un aperçu avant impression enlève le ' juste avant Preview:=True)

Macro de modification Plus ou Moins :
VB:
Sub Change()
    
     Const col = 3 'N° de la colonne "C"
    
     Dim Cible As Range, Plage_Cumul As Range, Cumul As Range
     Dim Produit$, tb
    
     'Plage des cumuls (titres de ligne et cumuls inclus) à adapter si plus de produits :
     Set Plage_Cumul = Sh2Print.[A30:B37]
    
     'Nom du Bouton (image) ayant lancer la macro
     Btn = Application.Caller
    
     'N° de la ligne contenant le bouton appelant
     lgn = Sh2Print.Shapes(Btn).TopLeftCell.Row
    
     'Hachage du nom du bouton dans le tableau tb (séparateur espace)
     tb = Split(Btn, " ")     '(élément 0 = produit avec espaces remplacés par des _, élément 1 = "plus" ou "moins")
    
     'Cellule cible du haut
     Set Cible = Sh2Print.Cells(lgn, col)
    
     'Cellule cible du bas
          'on remplace dans tb(0) les _ par des espaces
     Produit = Replace(tb(0), "_", " ")
          'on recherche le résultat dans la 1ère colonne de la plage "Plage_Cumul"
     lgn = WorksheetFunction.Match(Produit, Plage_Cumul.Columns(1), 0)
          'on récupére la cellule corespondante dans la 2ème colonne)
     Set Cumul = Plage_Cumul.Cells(lgn, 2)
    
     'Actions en fonction du type de bouton appelant
     Select Case tb(1)
          Case "plus"    'il s'agit d'un bouton "plus"
               Cible = Cible + 1
               Cumul = Cumul + 1
          Case "moins"   'il s'agit d'un bouton "moins
               Cible = WorksheetFunction.Max(0, Cible - 1)
               Cumul = WorksheetFunction.Max(0, Cumul - 1)
          Case Else      'type de bouton inconnu
              
     End Select
    
End Sub

Macro de RàZ :
VB:
Sub RaZ()
     'pour l'ensemble des cellules "C2", "C4", "C6" ,"C8", "C10", "C13", "C14", "C16" de la feuille Sh2Print
     'mettre une valeur nulle
     With Sh2Print
    
          Union(.[C2], .[C4], .[C6], .[C8], .[C10], .[C12], .[C14], .[C16]).Value = 0
          
     End With
    
End Sub

Comme tu le vois, il n'y a pas beaucoup de changement à part la prise en compte du cumul général (cellules du bas) et les commentaires.

Essaie de faire des modifications en ajoutant des produits.

À bientôt
 

Pièces jointes

  • TEST TICKETS AtTheOne 2.xlsm
    94.8 KB · Affichages: 1

Discussions similaires

Statistiques des forums

Discussions
313 865
Messages
2 103 078
Membres
108 521
dernier inscrit
manouba