Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Microsoft 365 Combobox dans excel

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

CortoXls

XLDnaute Nouveau
Bonjour à tous

Je suis en train de créer un formulaire (pour passer le temps, je suis nouvellement à la retraite...)

Sur la feuille Formulaire de saisie j'ai 18 combobox (pour l'instant)
J'aimerai les positionner en passant par une boucle sur des cellules définies mais problème !
L'idée de départ était d'écrire

For i = 1 To 18
With Me.ComboBox & i
.Top = Rg & i.Top
.Left = Rg & i.Left
.Width = Rg & i.Width
.Height = Rg & i.Height
End With
Next i

Mais après avoir essayé toutes les formes d'écriture possible, rien n'y fait...

Merci d'avance de votre aide
 
Solution
Bonjour,
Hello mapomme😉
En Pj
Un exemple simple avec une plage nommée "Plage" comprenant les cellules de destination
Bonjour @CortoXls et bienvenue sur XLD 😀,

Si vous nous fournissez un classeur représentatif et anonymisé, il sera beaucoup plus simple pour nous de vous répondre.

On ne sait pas ce qu'est Rg. On ne sait même pas si les combobox sont sur un Userform ou sur une feuille de calcul servant de formulaire...

A plus 😉.
 
Bonjour,
Hello mapomme😉
En Pj
Un exemple simple avec une plage nommée "Plage" comprenant les cellules de destination
 

Pièces jointes

Bonjour,
Hello mapomme😉
En Pj
Un exemple simple avec une plage nommée "Plage" comprenant les cellules de destination
Merci à tous les deux pour vos réponses !

Dans mon cas les cellules sont nommées
range("E7") est nommée Saisie_Nom

les déclarations sont faites ainsi :
Dim Rg1 as range
Set Rg1 = me.range("Saisie_Nom")

Idem pour les 18 cellules qui vont contenir les combobox qui vont aussi de 1 à 18

Le formulaire va évoluer dans sa disposition, seuls les champs de saisie sont définis (pour l'instant).
L'idée était de boucler avec i = 1 à 18 pour positionner les combobox dans les cellules correspondantes :
combobox1 dans Rg1 (c'est à dire dans la cellule Saisie_Nom)
combobox2 dans Rg2
et ainsi de suite pour tous les combobox

D'où ma tentative mais je ne parviens pas à trouver le moyen de coder çà

Sub Mise_En_Forme_Formulaire()

Dim FSaisie As Worksheet
Dim Saisie1, Saisie2, Saisie3, Saisie4, Saisie5, Saisie6, Saisie7, Saisie8, Saisie9, Saisie10, Saisie11, Saisie12 As Range
Dim i As Integer

Set FSaisie = ThisWorkbook.Sheets("Formulaire de saisie")

Set Saisie1 = FSaisie.Range("Saisie_Nom")
Set Saisie2 = Range("Saisie_Prénom")
Set Saisie3 = FSaisie.Range("Saisie_Date_Naissance")
Set Saisie4 = FSaisie.Range("Saisie_Genre")
Set Saisie5 = FSaisie.Range("Saisie_CodePostal")
Set Saisie6 = FSaisie.Range("Saisie_Ville")
Set Saisie7 = FSaisie.Range("Saisie_NomPayeur")
Set Saisie8 = FSaisie.Range("Saisie_CodeOption1")
Set Saisie9 = FSaisie.Range("Saisie_CodeOption2")
Set Saisie10 = FSaisie.Range("Saisie_CodeOption3")
Set Saisie11 = FSaisie.Range("Saisie_CodeOption4")
Set Saisie12 = FSaisie.Range("Saisie_ProfCours1")

For i = 1 To 12
With FSaisie.Shapes.Range("ComboBox" & i)
.Top = Range("Saisie" & 1).Top ==> ça coince ici évidement mais c'est pour l'exemple !
.Left = Range("Saisie" & i).Left
.Width = Range("Saisie" & i).Width
.Height = Range("Saisie" & i).Height
End With

End Sub

Je ne vois pas comment écrire le code qui permet de passer de Saisie1 à Saisie2 avec i en paramètre.

Merci
 
Dernière édition:
finalement c'était plus simple
j'ai renommé les cellules ainsi
range("E7") est nommée SaisieCB1
et ainsi de suite
Le programme est nettement plus clair 🙂

Sub Mise_En_Forme_Formulaire()

Dim FSaisie As Worksheet
Dim i As Integer

Set FSaisie = ThisWorkbook.Sheets("Formulaire de saisie")

For i = 1 To 12
With FSaisie.Shapes.Range("ComboBox" & i)
.Top = Range("SaisieCB" & i).Top
.Left = Range("SaisieCB" & i).Left
.Width = Range("SaisieCB" & i).Width
.Height = Range("SaisieCB" & i).Height
End With
Next i

End Sub
 
Bonjour à tous,
Une autre solution en supposant que les combobox sont liées à la cellule qui les contient

VB:
Option Explicit
Sub testF55()
    Dim Shp As Shape

    For Each Shp In Worksheets("Feuil1").Shapes
        Select Case True
        Case Not Shp.Type = msoOLEControlObject:                        ' pas un ActiveX
        Case Not TypeOf Shp.DrawingObject.Object Is MSForms.ComboBox:   ' pas un combobox
        Case Shp.DrawingObject.LinkedCell = ""                          ' pas de cellule liée
        Case Else
            With Range(Shp.DrawingObject.LinkedCell)
                Shp.Left = .Left
                Shp.Top = .Top
                Shp.Height = .Height
                Shp.Width = .Width
                Shp.Placement = xlMoveAndSize
            End With
        End Select
    Next
End Sub
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
68
Affichages
8 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…