Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 18/01/2012, 09h00   #1
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Par défaut Choix de l'imprimante par userform

Bonjour,

Je suis en train de réaliser un userform qui me permet de sélectionner les feuilles que je souhaite imprimer ainsi que le choix de l'imprimante.

Pour ce faire j'ai disposé 3 OptionButton dans mon userform qui correspondent aux trois imprimantes disponibles.

Je réalise une boucle "si bouton 1 activé alors imprimer la feuille avec l'imprimante 1, si si bouton 2 activé alors imprimer la feuille avec l'imprimante 2, si si bouton 3 activé alors imprimer la feuille avec l'imprimante 3"

Cependant je ne trouve pas le code pour sélectionner telle ou telle imprimante dans ma macro

Code :
1
2
3
4
5
6
7
8
9
10
11
If CheckBox1 = True Then
    If OptionButton1 = True Then
        Worksheets("Expérience").PrintOut 'comment lui dire imprimante n°1 ?
    End If
    If OptionButton2 = True Then
        Worksheets("Expérience").PrintOut 'comment lui dire imprimante n°2 ?
    End If
    If OptionButton3 = True Then
        Worksheets("Expérience").PrintOut 'comment lui dire imprimante n°1 ?
    End If
End If
Merci pour votre aide
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 09h38   #2
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 715
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : ex Observeur CGG / Analyste prog.

Informations forums :
Inscription : juin 2006
Messages : 1 715
Points : 3 655
Points : 3 655
Salut, via l'enregistreur de macros tu devrais récupérer leur nom respectif
pour pouvoir ensuite les intégrer dans ta macro

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Dim ActivePrinter As String
Dim PrinterDefault As String
 
	PrinterDefault = Application.ActivePrinter
 
	' ta macro avec 
	Application.ActivePrinter= "loulou1"
	'	.....
	Application.ActivePrinter= "loulou2"
	' 	.....
	Application.ActivePrinter= "loulou3"
	'	.....
 
	' Rétablir l'imprimante par défaut en fin de macro
	Application.ActivePrinter = PrinterDefault
il se peut également qur tu récupères qqch comme

avec xx variable du style 03 ou autre, si c'est le cas et que ta macro doit fonctionner sur d'autres PC cet incrément peut être différent et dépend de l'ordre d'installation des pilotes sur le PC concerné

Pour obtenir sur un PC donné la liste des imprimantes ( à adapter )

Code :
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
Option Explicit
 
Private Declare Function EnumPrintersA Lib "Winspool.drv" _
                                       (ByVal flags As Long, ByVal Name As String, ByVal Level As Long, _
                                        pPrinterEnum As Long, ByVal cdBuf As Long, _
                                        pcbNeeded As Long, pcReturned As Long) As Long
 
Private Declare Function lstrlenA Lib "Kernel32" _
                                  (ByVal lpString As Any) As Long
 
Private Declare Function lstrcpyA Lib "Kernel32" _
                                  (ByVal lpString1 As String, ByVal lpString2 As Long) As Long
 
Private Function Imprimantes()
Dim PrinterEnum() As Long, Impr() As String
Dim Needed As Long, Returned As Long, I As Integer
    EnumPrintersA 2, vbNullString, 5, 0, 0, Needed, 0
 
    If Needed = 0 Then Exit Function
    ReDim PrinterEnum(Needed / 4)
    EnumPrintersA 2, vbNullString, 5, PrinterEnum(0), _
                  Needed, Needed, Returned
    ReDim Impr(1 To Returned)
    For I = 1 To Returned
        Impr(I) = Space$(lstrlenA(PrinterEnum(I * 5 - 5)))
        lstrcpyA Impr(I), PrinterEnum(I * 5 - 5)
    Next I
    Imprimantes = Impr
End Function
 
Sub ListeImprimante()
Dim Impr
    For Each Impr In Imprimantes
        Debug.Print Impr
    Next Impr
End Sub
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/01/2012, 09h55   #3
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Bonjour ai je faux dans ma syntaxe car lorsque j'exécute il m'indique :
si uniquement la checkbox2 est sélectionné j'ai le message d'erreur suivant et la ligne checkbox2 est surligné en bleu
"l'indice n'appartient pas à la sélection"
Pour info la feuille est en fait un graphique

Code :
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
If OptionButton1 = True Then 'impression sur ISIMP116
        Application.ActivePrinter = "\\isnts37\ISIMP116 sur Ne03:"
        If CheckBox1 = True Then
            Worksheets("Expérience").PrintOut 'impression de la feuille Expérience
        End If
        If CheckBox2 = True Then
            Worksheets("Données brutes").PrintOut 'impression de la feuille Données brutes
        End If
        If CheckBox3 = True Then
            Worksheets("Soustraction").PrintOut 'impression de la feuille Soustraction
        End If
        If CheckBox4 = True Then
            Worksheets("Correction ligne de base").PrintOut 'impression de la feuille Correction ligne de base
        End If
        If CheckBox5 = True Then
            Worksheets("N-(N-1)").PrintOut 'impression de la feuille N-(N-1)
        End If
        If CheckBox6 = True Then
            Worksheets("Dérivée première").PrintOut 'impression de la feuille Dérivée première
        End If
        If CheckBox7 = True Then
            Worksheets("Dérivée seconde").PrintOut 'impression de la feuille Dérivée seconde
        End If
        If CheckBox8 = True Then
            Worksheets("Correction masse").PrintOut 'impression de la feuille Correction masse
        End If
        If CheckBox9 = True Then
            Worksheets("Correction surface").PrintOut 'impression de la feuille Correction surface
        End If
        If CheckBox10 = True Then
            Worksheets("Correction masse et surface").PrintOut 'impression de la feuille Correction masse et surface
        End If
        MsgBox ("Impression couleur réalisée sur ISIMP116 (Bloc F)")
    End If
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 10h51   #4
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 715
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : ex Observeur CGG / Analyste prog.

Informations forums :
Inscription : juin 2006
Messages : 1 715
Points : 3 655
Points : 3 655
Salut, si la feuille n'existe pas
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 10h56   #5
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Les deux existent !!!

Je ne comprends pas !
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 18/01/2012, 11h06   #6
Expert Confirmé
 
Homme Philippe
ex Observeur CGG / Analyste prog.
Inscription : juin 2006
Messages : 1 715
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Localisation : France, Finistère (Bretagne)

Informations professionnelles :
Activité : ex Observeur CGG / Analyste prog.

Informations forums :
Inscription : juin 2006
Messages : 1 715
Points : 3 655
Points : 3 655
Salut, pour un Graphe utilise Sheets et non WorkSheets

Extrait de l'aide en ligne
Citation:
Worksheets
cette propriété renvoie une collection Sheets qui représente toutes les feuilles de calcul contenues dans le classeur actif

Sheets
Cette propriété renvoie une collection Sheets qui représente toutes les feuilles contenues dans le classeur actif
__________________
Pensez à Voter, d'avance merci. ( Pouces en bas à la droite de Citer )
Balisez votre code après l'avoir indenté sous Excel via Smart Indenter
Autre utilitaire : MZ Tools 3.0 VBA

Contribution : Excel / Word / PDF avec Adobe Acrobat Pro / PDFCreator 1 2
kiki29 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 18/01/2012, 11h49   #7
Membre régulier
 
Homme Vincent Vincent
Inscription : octobre 2010
Messages : 246
Détails du profil
Informations personnelles :
Nom : Homme Vincent Vincent
Localisation : France, Rhône (Rhône Alpes)

Informations forums :
Inscription : octobre 2010
Messages : 246
Points : 83
Points : 83
Merci beaucoup,

ça fonctionne correctement
__________________
Bonne journée,

Cordialement,

Vincent
Vincent32 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 06h36.


 
 
 
 
Partenaires

Hébergement Web