XL 2019 [Résolu] VBA inputbox sélection d'une plage de cellulle

grodep

XLDnaute Occasionnel
Bonjour à tous,
je bute sur un problème qui vous sera sans doute évident : j'ai pour objectif d'automatiser la production de documents : j'ai donc une feuille excel avec une macro qui me crée un tableau dans lequel je peux trouver toutes les données nécessaires à la production de ces documents sur la base d'un modele word (fichier anony.dotx).
L'idée est que mon inputbox me permette de désigner, dans la feuille TestEnvoi une cellule contenant un nom ou une plage de cellule d'une seule colonne (celle contenant les noms) et qu'elle traite ensuite cette sélection pour produire les documents. en utilisant les données du tableau correspondant aux noms sélectionnés.
Si je sélectionne une seule cellule, aucun problème, la macro tourne et me délivre un .docx et un pdf.
En revanche, dès que j'essaye de sélectionner plusieurs cellules, j'ai beau tourné le code dans tous les sens, cela me crée régulièrement des problèmes d'objet..
Dans le fichier joint, vous trouverez deux macros pour générer ces docs, qui sont deux essais sur le meme thème, avec le meme insuccès, à chaque fois. J'esperai joindre mon fichier modele, mais ce n'est pas possible ici. je l'ai mis sur wetransfer: https://we.tl/t-ixgpDKUzpI
Merci d'avance à tous ceux qui se pencheront sur ce sujet!.
L'erreur générée est donc une erreur 9 L'indice n'appartient pas à la sélection sur la dernière ligne du bout de code fourni ci dessous. nom = noms_selectionnes(i)
VB:
Dim noms_selectionnes As Variant
    noms_selectionnes = Application.InputBox(prompt:="Sélectionnez les noms pour lesquels générer le document:", Type:=64)
 
    'Vérifier si l'utilisateur a appuyé sur Annuler ou n'a rien sélectionné
    If VarType(noms_selectionnes) = vbBoolean Then
        MsgBox "Aucune sélection n'a été faite. La macro s'arrête."
        Exit Sub
    ElseIf UBound(noms_selectionnes) - LBound(noms_selectionnes) < 0 Then
        MsgBox "Aucun nom n'a été sélectionné. La macro s'arrête."
        Exit Sub
    End If
 
    'Boucle à travers les noms sélectionnés et modifier le document Word pour chaque nom
 
    'Si noms_selectionnes est un tableau, boucler à travers chaque nom
            If IsArray(noms_selectionnes) Then
                For i = LBound(noms_selectionnes) To UBound(noms_selectionnes)
                    nom = noms_selectionnes(i)
 

Pièces jointes

  • anonyplann.xlsm
    46.6 KB · Affichages: 2
Dernière édition:
Solution
Bonjour à toutes & à tous,
bonjour @grodep
Essaie le type 8 dans application.inputbox, qui te renverra un booléen en cas d'annulation et un range en cas de sélection.
Ensuite tu n'as qu'à parcourir l'objet range renvoyé
VB:
Sub SélUnePlage()
    Dim monRange As Range, c As Range
    On Error Resume Next
    Set monRange = Application.InputBox(Prompt:="sélectionnez une plage", Type:=8)
    On Error GoTo 0
    If monRange Is Nothing Then Exit Sub
    For Each c In monRange.Cells
        MsgBox c.Value
    Next
End Sub


Je suis sur mon téléphone, pas possible de joindre un exemple

AtTheOne

XLDnaute Impliqué
Supporter XLD
Bonjour à toutes & à tous,
bonjour @grodep
Essaie le type 8 dans application.inputbox, qui te renverra un booléen en cas d'annulation et un range en cas de sélection.
Ensuite tu n'as qu'à parcourir l'objet range renvoyé
VB:
Sub SélUnePlage()
    Dim monRange As Range, c As Range
    On Error Resume Next
    Set monRange = Application.InputBox(Prompt:="sélectionnez une plage", Type:=8)
    On Error GoTo 0
    If monRange Is Nothing Then Exit Sub
    For Each c In monRange.Cells
        MsgBox c.Value
    Next
End Sub


Je suis sur mon téléphone, pas possible de joindre un exemple
 
Dernière édition:

Discussions similaires

Statistiques des forums

Discussions
312 210
Messages
2 086 277
Membres
103 170
dernier inscrit
HASSEN@45