débutant VBA

lamot.w

XLDnaute Nouveau
Salut à tous,

Je débute en macros et le language VBA me semble encore bien compliqué.
Je bosse, mais j'ai besoin de votre aide.

Je dispose d'un classeur composé de 3 feuilles.
La 1ere (Memo)me sert d'interface et alimente les 2autres(enveloppe et W&B).

Voici la macro que je souhaite développer:

Si "memo"[B6] n'est pas Vide, alors impression "enveloppe" page1, copies:1
Si "memo"[B8] n'est pas Vide, alors impression "enveloppe" page2, copies:1
etc...

voici la ligne de code que j'ai tapée:
If Worksheets("Memo").[b6].Value <> "" Then
Worksheets("Enveloppe").Activate.PrintOut From:=1, To:=1, Copies:=1, Collate:=True
End If
If Worksheets("Memo").[b8].Value <> "" Then
Worksheets("Enveloppe").Activate.PrintOut From:=2, To:=2, Copies:=1, Collate:=True
End If

Bien évidement, VBE m'a renvoyé jouer aux billes:confused:

je veux ensuite poursuivre la macro telle que:

si "memo"[B6] est < 199 alors impression "W&B" page1, copies:2 et Page2, copies:1
si cette condition et fausse, impression Page1 et page2, copies:2

je vous présente mes escuses pour ce language inventé, j'espère que vous me comprendrez tout de meme.

merci pour votre aide précieuse.
 

bertgrav

XLDnaute Occasionnel
Re : débutant VBA

bonjour,

essaies ce code, il y a plus simple c'est sûr.

pour le reste, à toi de modifier par rapport à < 199 en ajoutant else ...

amicalement

chantal


Sub impression()

Sheets("memo").Select
If Range("b6").Value <> "" Then

Sheets("enveloppe").Select
ActiveWindow.SelectedSheets.PrintOut From:=1, To:=1, Copies:=1, Collate _
:=True

End If

Sheets("memo").Select
If Range("b8").Value <> "" Then
Sheets("enveloppe").Select
ActiveWindow.SelectedSheets.PrintOut From:=2, To:=2, Copies:=1, Collate _
:=True

End If


End Sub
 

porcinet82

XLDnaute Barbatruc
Re : débutant VBA

Bonsoir le fil,

Histoire de chipoter un peu, voici une petite variante de la macro de Bertgrav, qui utilise une boucle :
Code:
Sub impression_v2()
Dim i As Integer, k As Integer
k = 1
With Sheets("memo")
    For i = 6 To 8 Step 2
        If .IsEmpty(Cells(i, 2).Value) = False Then
            Sheets("enveloppe").Select
            ActiveWindow.SelectedSheets.PrintOut From:=k, To:=k, Copies:=1, Collate:=True
            k = k + 1
        End If
    Next i
End With
End Sub

@+
 

lamot.w

XLDnaute Nouveau
Re : débutant VBA

Salut porcinet,
effectivement ta formule semble plus élaboré pour moi mais c'est trés intéressant car elle devrait me permettre de gagner en légèreté dans le code.
Merci à vous deux pour ces propositions qui m'aident à doucement progresser dans l'apprentissage du VBA.

bonne soirée
 

porcinet82

XLDnaute Barbatruc
Re : débutant VBA

Bonjour a tous,

Je prefere te repondre ici plutot que sur ta bal afin que tout le monde puisse profiter de la correction. Il te suffit d'enlever la le point devant IsEmpty, ce qui donne :
If IsEmpty(Cells(i, 2).Value) = False Then

@+
 

lamot.w

XLDnaute Nouveau
Re : débutant VBA

la formule de porcinet semble plus adapté pour mon application car je répète l'opération plusieur fois.
Cependant la formule comporte une erreur 438 sur la ligne
If .IsEmpty(Cells(i, 2).Value) = False Then

Pouvez vous m'éclairer?

Désolé, porcinet vien de répondre ci-dessus, ne tenez pas compte de ce message.
merci
 
Dernière édition:

lamot.w

XLDnaute Nouveau
Re : débutant VBA

Eh bien cette fois ci VBE me trouve une erreur d'exécution '9' sur le code suivant, ligne: Sheets("memo").select

Code:
Sub impression_v2()
Dim i As Integer, k As Integer
k = 1
Sheets("memo").Select
    For i = 6 To 16 Step 2
        If IsEmpty(Cells(i, 2).Value) = False Then
            Sheets("FPL").PrintOut From:=k, To:=k + 1, Copies:=1, Collate:=True
            k = k + 2
        End If
    Next i
End Sub

Pourriez vous m'éclairer?
merci
 

lamot.w

XLDnaute Nouveau
Re : débutant VBA

Salut à tous,
voici le code final qui marche parfaitement.
Code:
Sub impression_v2()

Dim i As Integer, k As Integer
k = 1
Sheets("Memo").Select
    For i = 6 To 16 Step 2
        If Not IsEmpty(Cells(i, 2).Value) = True Then
                Sheets("Enveloppe").PrintOut From:=k, To:=k + 1, Copies:=1, Collate:=True
                k = k + 1
            Else: k = k + 1
        End If
    Next i
End Sub

La macros que je souhaite obtenir est maintenant finit à 90%.

Ma derniere problématique est la suivante.
Je souhaite imprimer la page k en double (copies:=2) à chaque fois et imprimer la page k+1, 1 fois (copies: =1) si la valeur de cells(i,2) est inférieur à 199 et 2 fois (copies:=2) si cells(i,2) est supérieur à 199.

J'ai essayé de nombreuses combinaisons de code mais sans jamais arriver au résultat souhaité. En effet une fois la nouvelle condition insérée, je perds, les proriétées de la précédentes, a savoir, n'imprimer que si cells(i,2) contient une valeur.

merci pour votre aide!
bonne soirée
 

porcinet82

XLDnaute Barbatruc
Re : débutant VBA

Bonsoir Lamot (ou bonjour),

Voila le code que je te propose, mais etant donné que tu as une boucle, et ne sachant pas exactement ce que tu veux faire (pas sur non plus d'avoir compris etant donné l'heure...), je dirais peut etre quelque chose de ce genre (j'ai mis les Exit Sub entre parenthèse, donc a toi d'adapter) :
Code:
Sub impression_v2()
Dim i As Integer, k As Integer
k = 2
Sheets("Memo").Select
    For i = 6 To 16 Step 2
        If Not IsEmpty(Cells(i, 2).Value) = True Then
            Sheets("Enveloppe").PrintOut From:=k, Copies:=2, Collate:=True
            If Cells(i, 2).Value < 199 Then
                Sheets("Enveloppe").PrintOut From:=k + 1, Copies:=1, Collate:=True
                'Exit Sub
            Else
                Sheets("Enveloppe").PrintOut From:=k + 1, Copies:=2, Collate:=True
                'Exit Sub
            End If
            k = k + 1
        End If
    Next i
End Sub

@+
 

lamot.w

XLDnaute Nouveau
Re : débutant VBA

Salut porcinet,
voici un exemple ci-joint pour etre un peu plus claire sur ce que je souhaite obtenir.
si Memo (cells i,2) contient une valeur alor impression W&B page1 en double (copies:=2) et pages 2 en double si (cells i,2)>199 sinon en simple (copies:=1).
et on recommence, pour i=8 avec les pages 3 et 4 de W&B
pour i=10 avec les pages 5 et 6 etc...

voici le code que j'ai essayé, mais il ne fonctionne pas.
Code:
Sub impression_v2()

Dim i As Integer, k As Integer
k = 1
Sheets("Memo").Select
    For i = 6 To 16 Step 2
        If Not IsEmpty(Cells(i, 2).Value) = True Then
            Sheets("W&B").PrintOut From:=k, To:=k, Copies:=2, Collate:=True
            k = k + 2
                If (Cells(i, 2) > 199) = True Then
                    Sheets("W&B").PrintOut From:=k + 1, To:=k + 1, Copies:=2, Collate:=True
                    Else: Sheets("W&B").PrintOut From:=k + 1, To:=k + 1, Copies:=1, Collate:=True
                End If
            Else: k = k + 2
        End If
    Next i
End Sub
 

Pièces jointes

  • Exemple xld.zip
    7.3 KB · Affichages: 32

porcinet82

XLDnaute Barbatruc
Re : débutant VBA

Salut Lamot,

j'ai modifier la macro de la manière suivante, je n'ai pas tester, mais il me semble que ca doit pas tres loin de ce que tu souhaites :
Code:
Sub impression_v3()
Dim i As Integer, k As Integer
Sheets("Memo").Select
    For i = 6 To 17 Step 2
        If IsEmpty(Cells(i, 2).Value) = False Then
            Sheets("W&B").PrintOut From:=i - 5, To:=i - 5, Copies:=2, Collate:=True
            If Cells(i, 2).Value > 199 Then
                Sheets("W&B").PrintOut From:=i - 4, To:=i - 4, Copies:=2, Collate:=True
            Else
                Sheets("W&B").PrintOut From:=i - 4, To:=i - 4, Copies:=1, Collate:=True
            End If
        End If
    Next i
End Sub

@+
 

Discussions similaires

Réponses
6
Affichages
286

Statistiques des forums

Discussions
312 492
Messages
2 088 914
Membres
103 983
dernier inscrit
AlbertCouillard