Valeur Contiguë à celle d'un combobox

Bonjour à tous

Dans la feuille 1, j'ai un userform contenant un combobox, celui-ci contient la liste de fichier qui se dans un répertoire....Cette liste se trouve en feuille 2(Librairies) dans la colonne A....afin de trouver le chemin pour l'imprimer qui se trouve dans colonne B, j'aimerais si possible mettre dans une variable le chemin pour imprimer en fonction du choix(combobox)

Merci d'avance pour votre aide

Oli

Bonjour,

Tes entêtes de colonnes sont inversées !

Le ComboBox possède deux colonnes dont la dernière est cachée (largeur 0) mais elle contient le nom du document correspondant au chemin. Testes pour voir mais attention, aucun lecteur n'est indiqué dans tes chemins :

Private Sub ToggleButton1_Click()
'Sub export_données_dans_signet_word()
Dim NDF As String, NDF2 As String, Rep As String
Dim WordApp As Object, WordDoc As Object
Dim chemin As String
Dim agent As String

chemin = ActiveWorkbook.Path

    Rep = MsgBox("Un ficher word va être imprimé, souhaitez-vous poursuivre ?", vbYesNo + vbQuestion, "")
    If Rep = vbYes Then

        'la colonne est cachée (largeur 0) mais elle contient une valeur
        agent = UserForm1.ComboBox1.List(UserForm1.ComboBox1.ListIndex, 1)
        chemin = UserForm1.ComboBox1.List(UserForm1.ComboBox1.ListIndex, 0)

        NDF = chemin & "\" & agent

        Set WordApp = CreateObject("Word.Application")
        Set WordDoc = WordApp.Documents.Open(NDF, ReadOnly:=False)

    End If

    WordApp.Visible = False

    Application.Dialogs(xlDialogPrinterSetup).Show

    'Si l'utilisateur confirme la configuration de l'imprimante alors...
    WordDoc.PrintOut Copies:=1, Collate:=True 'Imprime le document Word
    MsgBox "Document word imprimé"

    WordDoc.Close '-- fermer le document Word
    'WordDoc.Quit '-- fermer la session Word

End Sub

Private Sub UserForm_Initialize()

    With Sheets("Librairies")

        ComboBox1.ColumnCount = 2
        ComboBox1.ColumnWidths = ComboBox1.Width - 10 & ";0"
        ComboBox1.List = .Range("A2:B" & .Range("B65536").End(xlUp).Row).Value

    End With

End Sub

Bonsoir Theze,

Merci pour ta proposition, je dois juste adapter le chemin car effectivement j'ai un petit soucis à ce niveau....

J'ai un autre petit problème, pour imprimer chaque fichier séparément cela ne pose aucun soucis, par contre je n'arrive à imprimer le répertoire en entier...Tu peux me donner un petit coup de pouce....

Merci d'avance

Oli

Bonjour,

Une piste à adapter que tu peux attacher à un bouton. Je n'ai fais aucun test sur ce code, je te laisse ça :

Sub ImprimerTout()

    Dim WordApp As Object
    Dim WordDoc As Object
    Dim Plage As Range
    Dim Cel As Range

    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = False

    With Worksheets("Librairies"): Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    For Each Cel In Plage

        NDF = Cel.Value & "\" & Cel.Offset(, 1).Value 'je ne suis pas sûr de la nécessité du \ !!!

        Set WordDoc = WordApp.Documents.Open(NDF, ReadOnly:=False)
        WordDoc.PrintOut Copies:=1, Collate:=True
        WordDoc.Close

    Next Cel

    WordDoc.Quit
    MsgBox "Tous les documents ont été imprimés !"

End Sub

Bonjour Theze

J'ai un peu modifier le code car dans ma liste imprimer tout, ne correspond à un fichier mais bien \, donc j'ai mis un if avec avec une instruction de fin et là retour à la feuille 1 sans userform...si je mets une autre instruction , j'ai un message d'erreur.

Comment puis-je retrouver l'userform après l'arrêt de la macro....

Merci

Sub ImprimerTout()

    Dim WordApp As Object
    Dim WordDoc As Object
    Dim Plage As Range
    Dim Cel As Range
    Dim chem As String

    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = False

    With Worksheets("Librairies"): Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    chem = ActiveWorkbook.Path

    For Each Cel In Plage

        NDF = chem & Cel.Offset(, 1).Value 

         If NDF = chem & "\" Then End

        Set WordDoc = WordApp.Documents.Open(NDF, ReadOnly:=False)
        WordDoc.PrintOut Copies:=1, Collate:=True
        WordDoc.Close

     Next Cel

    WordDoc.Quit
    MsgBox "Tous les documents ont été imprimés !"

End Sub

Le code que je t'ai donné est soit à mettre dans la procédure événementielle d'un bouton (ce que j'ai fais ci-dessous) soit à appeler depuis cette procédure événementielle.

Sur ton UserForm, tu poses un bouton de commande (CommandButton) et tu colles ce code dans le module :

Private Sub CommandButton1_Click()

    Dim WordApp As Object
    Dim WordDoc As Object
    Dim Plage As Range
    Dim Cel As Range
    Dim NDF As String
    Dim chem As String
    Dim Nb As Integer

    Set WordApp = CreateObject("Word.Application")
    WordApp.Visible = False

    With Worksheets("Librairies"): Set Plage = .Range(.Cells(2, 1), .Cells(.Rows.Count, 1).End(xlUp)): End With

    chem = ActiveWorkbook.Path & "\" '<---Path ne retourne pas le dernier anti-slash, il faut le rajouter !

    For Each Cel In Plage

        'seulement si la cellule n'est pas vide
        If Cel.Value <> "" Then

            NDF = chem & Cel.Offset(, 1).Value

            Set WordDoc = WordApp.Documents.Open(NDF, ReadOnly:=False)
            WordDoc.PrintOut Copies:=1, Collate:=True
            WordDoc.Close
            Nb = Nb + 1

        End If

     Next Cel

    WordDoc.Quit
    MsgBox Nb & " documents ont été imprimés sur " & Plage.Count & " !"

End Sub

re,

Merci je vais tester cela....

J'ai une autre petite question, je vais avoir plusieurs combobox(environ 5), afin de ne pas recopier la macro à chaque fois et savoir quel combobox est actif et enclencher la macro (au niveau de l'impression)...

Merci d'avance

Oli

Tu peux utiliser l'événement "Click()" des ComboBox et les passer en argument à la procédure, exemple :

Private Sub ComboBox1_Click()
    Imprimer ComboBox1
End Sub

Private Sub ComboBox2_Click()
    Imprimer ComboBox2
End Sub

Private Sub ComboBox3_Click()
    Imprimer ComboBox3
End Sub

'etc...

Sub Imprimer(Cmb As MSForms.ComboBox)

    'Sub export_données_dans_signet_word()
    Dim NDF As String, NDF2 As String, Rep As String
    Dim WordApp As Object, WordDoc As Object
    Dim chemin As String
    Dim agent As String

    chemin = ActiveWorkbook.Path

    Rep = MsgBox("Un ficher word va être imprimé, souhaitez-vous poursuivre ?", vbYesNo + vbQuestion, "")
    If Rep = vbYes Then

    agent = Cmb.List(Cmb.ListIndex, 0)

    Rep = chemin
    NDF = Rep & "\" & agent & ".doc" '"\FR1-1.doc"

    Set WordApp = CreateObject("Word.Application")
    Set WordDoc = WordApp.Documents.Open(NDF, ReadOnly:=False)
    End If

    WordApp.Visible = False

    Application.Dialogs(xlDialogPrinterSetup).Show
    'Si l'utilisateur confirme la configuration de l'imprimante alors...
        WordDoc.PrintOut Copies:=1, Collate:=True 'Imprime le document Word
        MsgBox "Document word imprimé"

    WordDoc.Close '-- fermer le document Word
    'WordDoc.Quit '-- fermer la session Word

End Sub

Bonsoir Thèse,

j'ai un soucis d'erreur de compilation : argument non facultatif quand j'appelle la macro Imprimer a partir du combobox2...

capture

Bonjour,

Si tu appelles une procédure qui appelle elle même une autre procédure et que cette dernière demande un argument, il te faut faire suivre cet argument et ici, c'est un ComboBox donc, ta procédure "MsgBoxSmile()" doit demander aussi ce dernier afin de le passer à la Sub "Imprimer()" :

Public Sub MsgBoxSmile(Cmb As MSForms.ComboBox) '<--- demande d'argument obligatoire...

    Dim rep2 As Integer

    ' Set Hook
    hHook = SetWindowsHookEx(WH_CBT, _
                             AddressOf MsgBoxHookProc, _
                             0, _
                             GetCurrentThreadId)

    ' Run MessageBox
    'MsgBox "Voulez-vous Rédiger ou Imprimer ce document ?", vbYesNoCancel, "Gestion Administrative Professeur"
    rep2 = MsgBox("Voulez-vous Rédiger ou Imprimer ce document ?", vbYesNoCancel, "Gestion Administrative Professeur")
    If rep2 = 6 Then

        Imprimer Cmb '... car demandé ici !

    Else
        MsgBox ("perdu")
    End If

End Sub

et dans ton UserForm, c'est :

Private Sub ComboBox2_Click()

    MsgBoxSmile ComboBox2

End Sub

Bonjour Theze,

Grand merci pour la solution, j'apprends beaucoup.....

Maintenant quand je sélectionne le combobox2, le msgbox apparait et quand je veux cliquer sur imprimer ou rédiger, la sélection du combobox bouge.... y a t-il moyen de la fixer pour éviter les erreurs....

Oli

Tu as supprimé ton second classeur ? Il me semble que ce matin tu en avais mis un avec ta capture d'écran ?

Là, je suis chez moi et comme demain je ne serais pas au bureau, je ne peux pas faire de test !

Bonsoir Theze,

Oui, il y avait des informations que je pouvais pas laisser, je poste un nouveau, avec les dernières corrections que tu as apporté..

Maintenant quand je sélectionne le combobox2, le msgbox apparait et quand je veux cliquer sur imprimer ou rédiger, la sélection du combobox bouge....

Je ne constate rien d'anormal chez moi !

Pourquoi te compliquer la vie avec cette boîte de message alors qu'un simple formulaire fait très bien l'affaire et t'affranchi de ces Api Windows qui peuvent justement créer ces désagréments ?

Je te retourne ton fichier avec un UserForm qui ressemble à la tienne mais sans Api :

re Theze,

oui, effectivement c'est beaucoup simple et me causeras moins de soucis....je continue le développement..et je reviens vers toi

Encore merci ....

Oli

Rechercher des sujets similaires à "valeur contigue celle combobox"