IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Insérer if pour choix impression


Sujet :

Macros et VBA Excel

  1. #1
    Membre éclairé Avatar de Basicnav
    Profil pro
    Inscrit en
    Février 2008
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2008
    Messages : 245
    Par défaut Insérer if pour choix impression
    Bonjour le forum,

    j'ai un bout de code qui rempli les signets d'un document word en fonction des valeurs saisies dans les textbox du USF.
    Ceci fonctionne très bien, mais aujourd'hui je souhaite insérer un IF avant mon impression :

    Si mon textbox10 est vide, alors une boite de dialogue s'ouvre pour demander le nombre d'impression (dans ce cas, les signets 9 et 10 ne seront pas à remplir)

    Le but etant de ne pas refaire bêtement un copier/coller d'une grande partie de mon code...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    Private Sub CommandButton3_Click()
    
        On Error Resume Next
            Dim WordApp As Object
            Dim WordDoc As Object
            Dim n As Integer
            Dim Client As String
            Dim Numero As String
            Dim Adress1 As String
            Dim Adress2 As String
            Dim cp As String
            Dim ville As String
            Dim ref As String
            Dim qtt As Integer
            
                          
                Client = TextBox3.Text
                Numero = TextBox4.Text
                Adresse1 = TextBox5.Text
                Adresse2 = TextBox6.Text
                cp = TextBox7.Text
                ville = TextBox8.Text
                ref = TextBox9.Text
                qtt = TextBox10.Text
                
           
                Ici je mets par exemple : if TextBox10.value <> "" then
                          
                
             For i = 1 To qtt
               
                Set WordApp = CreateObject("Word.Application")                                           'ouvre session word
                Set WordDoc = WordApp.Documents.Open("C:\Documents and Settings\mon_profil\Bureau\Etiquette.doc")                                 'ouvre document Word
                    WordApp.Visible = False                                                              'word masqué pendant l'operation
                    WordDoc.Bookmarks("Text1").Range.Text = Client                                       'Remplace Signet Texte(x) dans wd par valeur textbox
                    WordDoc.Bookmarks("Text2").Range.Text = Numero
                    WordDoc.Bookmarks("Text3").Range.Text = Adresse1
                    WordDoc.Bookmarks("Text4").Range.Text = Adresse2
                    WordDoc.Bookmarks("Text5").Range.Text = cp
                    WordDoc.Bookmarks("Text6").Range.Text = ville
                    WordDoc.Bookmarks("Text7").Range.Text = "Ref:" & ref
                    WordDoc.Bookmarks("Text9").Range.Text = "Colis :" & " " & i & " " & "/"                                      'Remplace Signet Texte(x) dans wd par valeur textbox
                    WordDoc.Bookmarks("Text10").Range.Text = qtt
                    
                  
    ' Mise en forme de la font dans word
    
    Set myRange = WordDoc.Range(Start:=WordDoc.Bookmarks("Text1").Start, End:=WordDoc.Bookmarks("Text2").End)
                  With myRange
                      .Font.Name = "Verdana"
                      .Font.Size = 22
                      .Bold = True
                      .Italic = False
                  End With
              
    Set myRange2 = WordDoc.Range(Start:=WordDoc.Bookmarks("Text2").Start, End:=WordDoc.Bookmarks("Text5").End)
                  With myRange2
                      .Font.Name = "Verdana"
                      .Font.Size = 17
                      .Bold = True
                      .Italic = False
                  End With
                   
    Set myRange3 = WordDoc.Range(Start:=WordDoc.Bookmarks("Text5").Start, End:=WordDoc.Bookmarks("Text7").End)
                  With myRange3
                      .Font.Name = "Verdana"
                      .Font.Size = 17
                      .Bold = True
                      .Italic = True
                  End With
                  
                    
                    
                    WordApp.Application.ActivePrinter = "TEC B-SX4"
                    WordApp.ActiveDocument.PrintOut
                                      
                    'WordApp.Visible = True                                                               'Affiche le doc word
                  
                    
                    WordApp.Application.ActivePrinter = "mon_imprimante"
                    WordApp.ActiveDocument.Close False                                                   'Ferme le document sans enregister
                    Next
                
                    WordApp.DisplayAlerts = wdAlertsNone
                    WordApp.Quit
                    
                    For x = 1 To 10
                Controls("TextBox" & x).Value = ""
                Next
    
       ici je met mon : else...et ci-dessous je veux pas resaisir tout mon code pour faire la même chose en fait....
            
    End Sub
    Comment m'y prendre ??

    Suis-je clair dans ma demande, voyez-vous où je veux en venir ?

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2010
    Messages
    97
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2010
    Messages : 97
    Par défaut
    Bonjour,

    En fait, si j'ai bien compris, tu sais comment coder mais ton problème est que tu ne veux pas dupliquer ton code. Dans ce cas, le mieux est d'utiliser une fonction non ?

  3. #3
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut bonjour BAsicnav, le forum
    Pas trop !

    La valeur "Qtt" ne doit pas changer sur le document Word ?

    Le problème : on demande de changer le nombre d'impression à l'intérieur d' une boucle (1 to Qtt)
    dans laquelle on fait une impression à chaque fois.

    on doit changer quoi ? "Qtt" donc avant la boucle (1 to Qtt) et pas au moment de l'affectation au signet ?



    Il y a le paramètre nombre de copie avec la méthode "PrintOut".

    ESVBA

  4. #4
    Membre éclairé Avatar de Basicnav
    Profil pro
    Inscrit en
    Février 2008
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2008
    Messages : 245
    Par défaut
    Bonjour,

    dans ce cas je ne vois pas comment...

    tu peux me donner un peux plus de précisions STP ?

  5. #5
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut
    je viens de vérifier avec Word, la méthode est la même que pour Excel donc l'argument est "Copies" :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    WordApp.ActiveDocument.PrintOut Copies:=Qtt

    ma source : msdn microsoft

    ESVBA

  6. #6
    Membre éclairé Avatar de Basicnav
    Profil pro
    Inscrit en
    Février 2008
    Messages
    245
    Détails du profil
    Informations personnelles :
    Âge : 52
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Février 2008
    Messages : 245
    Par défaut
    je vais essayer d'insérer ma condition dans ma boucle.

    tes indications vont bien m'aider ESVBA, merci

  7. #7
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut
    De retour, je me suis dit que je n'avais pas tout bien compris. Surtout avec mes digressions sur la boucle.

    En effet, copier dans VBE c'est plus compréhensible. Reste le pourquoi affecter une valeur à "Qtt" avant de faire un test sur la source de la valeur de "Qtt".


    je vais essayer d'insérer ma condition dans ma boucle.
    Je propose de supprimer la boucle, de définir le nombre d'impression nécessaire (toujours la même imprimante ?) et d'utiliser "Copies". Voici sans avoir tester (la fainéantise de faire un fichier Word) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    Private Sub CommandButton3_Click()
     
        On Error Resume Next
            Dim WordApp As Object
            Dim WordDoc As Object
            Dim n As Integer
            Dim Client As String
            Dim Numero As String
            Dim Adress1 As String
            Dim Adress2 As String
            Dim cp As String
            Dim ville As String
            Dim ref As String
            Dim qtt As Integer
     
     
                Client = TextBox3.Text
                Numero = TextBox4.Text
                Adresse1 = TextBox5.Text
                Adresse2 = TextBox6.Text
                cp = TextBox7.Text
                ville = TextBox8.Text
                ref = TextBox9.Text
     
     
                '*** MODIFICATIONS ICI ********************************************
                If Val(TextBox10.Value) = 0 Then
                    qtt = Val(InputBox("Le nombre d'impression décelé n'est pas bon (" & TextBox10.Value & ")." & Chr$(13) & "Mettre zéro pour abandonner.", "Problème nombre d'impression", 1))
                    If qtt = 0 Then Exit Sub
                Else
                    qtt = TextBox10.Value
                End If
                '*******************************************************************
     
                Set WordApp = CreateObject("Word.Application")                                           'ouvre session word
                Set WordDoc = WordApp.Documents.Open("C:\Documents and Settings\mon_profil\Bureau\Etiquette.doc")                                 'ouvre document Word
                    WordApp.Visible = False                                                              'word masqué pendant l'operation
                    WordDoc.Bookmarks("Text1").Range.Text = Client                                       'Remplace Signet Texte(x) dans wd par valeur textbox
                    WordDoc.Bookmarks("Text2").Range.Text = Numero
                    WordDoc.Bookmarks("Text3").Range.Text = Adresse1
                    WordDoc.Bookmarks("Text4").Range.Text = Adresse2
                    WordDoc.Bookmarks("Text5").Range.Text = cp
                    WordDoc.Bookmarks("Text6").Range.Text = ville
                    WordDoc.Bookmarks("Text7").Range.Text = "Ref:" & ref
                    WordDoc.Bookmarks("Text9").Range.Text = "Colis :" & " " & i & " " & "/"                                      'Remplace Signet Texte(x) dans wd par valeur textbox
                    WordDoc.Bookmarks("Text10").Range.Text = qtt
     
     
    ' Mise en forme de la font dans word
     
    Set myRange = WordDoc.Range(Start:=WordDoc.Bookmarks("Text1").Start, End:=WordDoc.Bookmarks("Text2").End)
                  With myRange
                      .Font.Name = "Verdana"
                      .Font.Size = 22
                      .Bold = True
                      .Italic = False
                  End With
     
    Set myRange2 = WordDoc.Range(Start:=WordDoc.Bookmarks("Text2").Start, End:=WordDoc.Bookmarks("Text5").End)
                  With myRange2
                      .Font.Name = "Verdana"
                      .Font.Size = 17
                      .Bold = True
                      .Italic = False
                  End With
     
    Set myRange3 = WordDoc.Range(Start:=WordDoc.Bookmarks("Text5").Start, End:=WordDoc.Bookmarks("Text7").End)
                  With myRange3
                      .Font.Name = "Verdana"
                      .Font.Size = 17
                      .Bold = True
                      .Italic = True
                  End With
     
     
     
                    WordApp.Application.ActivePrinter = "TEC B-SX4"
                    '********* Ajout de Copies ****************
                    WordApp.ActiveDocument.PrintOut Copies:=qtt
                    '**************************************
     
                    'WordApp.Visible = True                                                               'Affiche le doc word
     
     
                    WordApp.Application.ActivePrinter = "mon_imprimante"
                    WordApp.ActiveDocument.Close False                                                   'Ferme le document sans enregister
                    Next
     
                    WordApp.DisplayAlerts = wdAlertsNone
                    WordApp.Quit
     
                    For x = 1 To 10
                Controls("TextBox" & x).Value = ""
                Next
     
    End Sub
    ESVBA

Discussions similaires

  1. Réponses: 0
    Dernier message: 18/01/2011, 14h36
  2. [XL-2003] Double liste déroulante pour choix matériel et impression
    Par tony020422 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 30/07/2009, 17h14
  3. [impression] conseil pour choix d'outil
    Par trolldom dans le forum Visual Studio
    Réponses: 4
    Dernier message: 16/08/2007, 21h49
  4. [Choix] Aide pour choix de langage s.v.p
    Par Machjaghjolu dans le forum Langages de programmation
    Réponses: 12
    Dernier message: 26/06/2004, 12h26

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo