Pb End If
Bonjour à tous,
J'ai encore besoin de vos lumières car j'ai un problème de End if et je ne comprend pas pourquoi
Voici mon code
Sub PrintEtiq()
Dim b As Integer
Application.Dialogs(xlDialogPrinterSetup).Show
a = Range("A1048576").End(xlUp).Row
For m = 1 To a Step 29
k = m + 28
b = (a + 14) / 30
If b <= 1 Then Select Case MsgBox("Veuillez préparer " & b & " planche de 16 étiquettes,A4", vbYesNoCancel + vbQuestion, "Impréssion des adresses")
If b > 1 Then Select Case MsgBox("Veuillez préparer " & b & " planches de 16 étiquettes,A4", vbYesNoCancel + vbQuestion, "Impréssion des adresses")
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.436220472440945)
.RightMargin = Application.InchesToPoints(3.93700787401575E-02)
.TopMargin = Application.InchesToPoints(0)
.BottomMargin = Application.InchesToPoints(0)
.PrintComments = xlPrintNoComments
.Orientation = xlPortrait
.PaperSize = xlPaperA4
End With
Application.PrintCommunication = True
Rows(m & ":" & k).PrintOut
Next m
End SubSi je retire les deux "If b" mon code fonctionne parfaitement, mais impossible de démarrer la macro si j'ajoute mes msgbox en fonction de la valeur de b.
Je bloque dessus depuis deux jours si quelqu'un à une idée lumineuse me solutionner ce point de détail,
Merci
Bonjour edlede ,
Si tu as 2 conditions If, tu dois retrouver également 2 End IF dans ton code.
A tester :
Sub PrintEtiq()
Dim b As Integer
Application.Dialogs(xlDialogPrinterSetup).Show
a = Range("A1048576").End(xlUp).Row
For m = 1 To a Step 29
k = m + 28
b = (a + 14) / 30
If b <= 1 Then Select Case MsgBox("Veuillez préparer " & b & " planche de 16 étiquettes,A4", vbYesNoCancel + vbQuestion, "Impréssion des adresses")
End If
If b > 1 Then Select Case MsgBox("Veuillez préparer " & b & " planches de 16 étiquettes,A4", vbYesNoCancel + vbQuestion, "Impréssion des adresses")
End If
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.436220472440945)
.RightMargin = Application.InchesToPoints(3.93700787401575E-02)
.TopMargin = Application.InchesToPoints(0)
.BottomMargin = Application.InchesToPoints(0)
.PrintComments = xlPrintNoComments
.Orientation = xlPortrait
.PaperSize = xlPaperA4
End With
Application.PrintCommunication = True
Rows(m & ":" & k).PrintOut
Next m
End SubCordialement,
Oui merci, j'ai bien essayé :
If b <= 1 Then
Select Case MsgBox("Veuillez préparer " & b & " planche de 16 étiquettes,A4", vbYesNoCancel + vbQuestion, "Impréssion des adresses")
End If
If b > 1 Then
Select Case MsgBox("Veuillez préparer " & b & " planches de 16 étiquettes,A4", vbYesNoCancel + vbQuestion, "Impréssion des adresses")
End IfMême probleme ...Je me demande si le pb ne vien pas du select Case
If b <= 1 Then
Select Case MsgBox("Veuillez préparer " & b & " planche de 16 étiquettes,A4", vbYesNoCancel + vbQuestion, "Impréssion des adresses")
Else
Select Case MsgBox("Veuillez préparer " & b & " planches de 16 étiquettes,A4", vbYesNoCancel + vbQuestion, "Impréssion des adresses")
End IfIdem...
Bon en fait le probleme venais bien du select Case ou il fallait faire un End Select le code est donc
If b <= 1 Then
Select Case MsgBox("Veuillez préparer " & b & " planche de 16 étiquettes,A4", vbYesNoCancel + vbQuestion, "Impréssion des adresses")
End Select
End If
If b > 1 Then
Select Case MsgBox("Veuillez préparer " & b & " planches de 16 étiquettes,A4", vbYesNoCancel + vbQuestion, "Impréssion des adresses")
End Select
End Ifbonjour,
pourquoi pas simplement ceci ?
Sub PrintEtiq()
Dim b
Application.Dialogs(xlDialogPrinterSetup).Show
a = Range("A1048576").End(xlUp).Row
b = a/16
if b-int(b)<>0 then b=int(b+1)
if MsgBox("Veuillez préparer " & b & " planche de 16 étiquettes,A4", vbYesNoCancel + vbQuestion, "Impréssion des adresses")=vbyes then
For m = 1 To a Step 29
k = m + 28
Application.PrintCommunication = False
With ActiveSheet.PageSetup
.LeftMargin = Application.InchesToPoints(0.436220472440945)
.RightMargin = Application.InchesToPoints(3.93700787401575E-02)
.TopMargin = Application.InchesToPoints(0)
.BottomMargin = Application.InchesToPoints(0)
.PrintComments = xlPrintNoComments
.Orientation = xlPortrait
.PaperSize = xlPaperA4
End With
Application.PrintCommunication = True
Rows(m & ":" & k).PrintOut
Next m
end if
End SubMerci Acide S,
if b-int(b)<>0 then b=int(b+1)
if MsgBox("Veuillez préparer " & b & " planche de 16 étiquettes,A4", vbYesNoCancel + vbQuestion, "Impréssion des adresses")=vbyes thenCa veux dire quoi le b-int(b)<> 0 then b=int(b+1) ?
et du coup j'ai pas la correction du pluriel dans le cas ou il y a plus qu'une planche
bonjour,
au temps pour moi, je n'avais pas vu ce pluriel.
if b-int(b)<>0 then b=int(b+1)
if MsgBox("Veuillez préparer " & b & " planche" & iif(b>1,"s","") & " de 16 étiquettes,A4", vbYesNoCancel + vbQuestion, "Impréssion des adresses")=vbyes thenb-int(b) =signifie s'il te faut 2,5 planches, il te faudra 3 planches et non 2, b-int(B) permet de détecter qu'il y a des décimales
Le int définie la notion d'integer pour la valeur b c'est bien ca? cela dispense t il de déclarer "b as integer "en début de macro ?
bonjour,
int(b) donne la partie entière du nombre b (par exemple si b contient 2,56, int(b) vaudra 2)
a=nombre d'étiquettes à imprimer
b=a/16 nombre de planches de 16 étiquettes nécessaires (peut être un nombre avec des décimales)
s'il y a des décimales il faut ajouter 1 planche, s'il n'y a pas de décimale b contient le nombre de planches nécessaires.
pour savoir s'il y a des décimales on prend le nombre avec les décimales B et on lui soustrait sa partie sans décimales INT(B).
b-int(b)
pour que b puisse contenir un nombre avec des décimales il ne peut pas être défini comme integer.
Ok merci c'est beaucoup plus claire ainsi!
C'est pour ca que je suis obliger, en définissant b en integer, de faire une formule du type b = (a + 15) / 30 ( en nombre de ligne) pour ajouter +0,5 pour que l'arrondi passe au chiffre supérieur ( c'est un peu de la bricole)
Du coup ta méthode est plus souple car joue directement sur la variable.
Je vais pouvoir me coucher moins bête ce soir,( c'est pas très dure diront certain
Encore merci pour ces précisions sulfureuses
A bientôt