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 Sub

Si 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 Sub

Cordialement,

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 If

Mê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 If

Idem...

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 If

bonjour,

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 Sub

Merci 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 then

Ca 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 then

b-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

Rechercher des sujets similaires à "end"