Aide pour création de combobox qui liste les zones nommées

doublenico

XLDnaute Junior
Bonjour à tous,

Comment faire pour disposer d'une combobox qui listerait l'ensemble de mes zone nommée présente dans mon fichier, le tout en VBA?

Je souhaite les lister dans un premier temps puis ensuite via une combobox inverser une liste pas une autre.

Merci d'avance.
 

bqtr

XLDnaute Accro
Re : Aide pour création de combobox qui liste les zones nommées

Bonjour doublenico,

Test ceci : Code à mettre dans le module du Userform

Code:
Private Sub UserForm_Initialize()
Dim nmes As Names, i As Integer
Set nmes = ThisWorkbook.Names
  For i = 1 To nmes.Count
    ComboBox1.AddItem nmes(i).Name
  Next
End Sub

A+
 

doublenico

XLDnaute Junior
Re : Aide pour création de combobox qui liste les zones nommées

J'avance à petit pas.
J 'ai donc maintenant un userform dans lequel je liste l'ensemble de mes zones nommées.
Code:
Private Sub UserForm_Initialize()
Dim nmes As Names, i As Integer
Set nmes = ThisWorkbook.Names
  For i = 1 To nmes.Count
    ComboBox1.AddItem nmes(i).Name
  Next
End Sub

Private Sub ComboBox1_Change()
Dim nmes As Names, i As Integer
Set nmes = ThisWorkbook.Names
  For i = 1 To nmes.Count
    ComboBox2.AddItem nmes(i).Name
  Next
End Sub

Private Sub ComboBox2_Change()
Dim nmes As Names, i As Integer
Set nmes = ThisWorkbook.Names
  For i = 1 To nmes.Count
    ComboBox2.AddItem nmes(i).Name
  Next
End Sub
Private Sub Valider_Click()
Call Nicolas2
End Sub
Private Sub Annuler_Click()
UserForm1.Hide
End Sub

Je souhaite pouvoir récuperer la valeur de mes deux combobox pour lancer un traitement (ma macro), j'ai essayé ça mais ca ne fonctionne pas.
Comment faire pour recuperer ces valeurs et les integrer dans ma macro?

Code:
Sub Nicolas2()

zoneA = UserForm1.ComboBox1.Value
ZoneB = UserForm1.ComboBox2.Value
' Soit A et B = zone

' Sélection de la A (zone a déplacer)
    Application.Goto Reference:="zoneA"
    Selection.Copy
' Copie de la zone A en zone tempporaire
    Application.Goto Reference:="zone_temp"
    ActiveSheet.Paste
'   On nettoye la zone A
    Application.Goto Reference:="zoneA"
    Application.CutCopyMode = False
    Selection.ClearContents
' Sélection de la B (zone qui va être remplacé)
    Application.Goto Reference:="zone2"
    Selection.Copy
'Sélection de la zone A pour y coller la B
    Application.Goto Reference:="zoneA"
    ActiveSheet.Paste
' Copie de la zone A qui est en temp et collage en zone B
    Application.Goto Reference:="zone_temp"
    Application.CutCopyMode = False
    Selection.Copy
    Application.Goto Reference:="zone2"
    ActiveSheet.Paste
End Sub

Merci d avance
 

doublenico

XLDnaute Junior
Re : Aide pour création de combobox qui liste les zones nommées

Je viens de comprendre mon erreur, j'ai mis des guillemets Application.Goto Reference:="zoneA"

Code:
Sub Nicolas2()

zoneA = UserForm1.ComboBox1.Value
ZoneB = UserForm1.ComboBox2.Value
' Soit A et B = zone

' Sélection de la A (zone a déplacer)
    Application.Goto Reference:="zoneA"
    Selection.Copy
' Copie de la zone A en zone tempporaire
    Application.Goto Reference:="zone_temp"
    ActiveSheet.Paste
'   On nettoye la zone A
    Application.Goto Reference:="zoneA"
    Application.CutCopyMode = False
    Selection.ClearContents
' Sélection de la B (zone qui va être remplacé)
    Application.Goto Reference:="zone2"
    Selection.Copy
'Sélection de la zone A pour y coller la B
    Application.Goto Reference:="zoneA"
    ActiveSheet.Paste
' Copie de la zone A qui est en temp et collage en zone B
    Application.Goto Reference:="zone_temp"
    Application.CutCopyMode = False
    Selection.Copy
    Application.Goto Reference:="zone2"
    ActiveSheet.Paste
End Sub
 

bqtr

XLDnaute Accro
Re : Aide pour création de combobox qui liste les zones nommées

Re,

Tu veux faire quoi au juste ? Intervertir les valeurs de tes plages nommées.
Elles sont identiques, par exemple plage1 = A1:A10, plage2 = C1:C10.
Si c'est le cas il n'y aura pas de problème, sinon tu auras une erreur dans tes cellules (#N/A) de la plage la plus longue.

Peux tu mettre un fichier en exemple, ce sera plus facile.

A+
 

doublenico

XLDnaute Junior
Re : Aide pour création de combobox qui liste les zones nommées

Merci pour ta réponse.
Oui je souhaite intervertir des valeurs de plages. Il faut lancer le userform.
Mais dans ces plages j ai des images et lorsque je les interverti, les images ne s'effacent pas mais se rajoutent les unes sur les autres.
Pour déplacer mes zones, j ai créé une zone temporaire.
Voici mon fichier
http://cjoint.com/?bpmg5vLtON
 
Dernière édition:

doublenico

XLDnaute Junior
Re : Aide pour création de combobox qui liste les zones nommées

J'avance pas à pas mais je bloque encore.
pour éviter la superposition d'image je souhaite pouvoir supprimer une image (shape?) dans ma selection qui est une zone nomée mais j ai un problème de syntaxe.
Voici mon bout d code :
Code:
Dim titi
Dim reference
    Application.Goto reference:="zone2"
    
    Dim Obj As Shape
For Each Obj In Selection '==> comment ecrire ici ma zone2
Obj.Delete
Next Obj
End Sub

Merci d avance
 

bqtr

XLDnaute Accro
Re : Aide pour création de combobox qui liste les zones nommées

Re,

Désolé, mais là je ne sais pas faire.
J'ai essayé avec Cut, PictureCopy, Pictures.Delete ... y a rien à faire.
Dans le meilleur des cas les images se superposent.

A+
 

bqtr

XLDnaute Accro
Re : Aide pour création de combobox qui liste les zones nommées

Re,

Bon j'ai trouvé comment faire, c'est peut-être pas trop top mais ca fonctionne.

En faisant une recherche j'ai trouvé cette Discussion avec une réponse de MichelXLD

Voici le code du bouton Valider de l'Userform.

Code:
Private Sub Valider_Click()

Dim Sh As Shape
Dim Cible As Range

Application.ScreenUpdating = False
Range(ComboBox1.Value).Copy Range("zone_temp")
Set Cible = ActiveSheet.Range(ComboBox1.Value).Range("A1")
'Boucle sur les forme dans la feuille
For Each Sh In ActiveSheet.Shapes
    If Sh.Type = msoPicture Then
        If Not Intersect(Cible, Sh.TopLeftCell) Is Nothing Then
            Sh.Delete
            Exit For
        End If
    End If
Next Sh
Set Cible = Nothing

Range(ComboBox2.Value).Copy Range(ComboBox1.Value)
Set Cible = ActiveSheet.Range(ComboBox2.Value).Range("A1")
'Boucle sur les forme dans la feuille
For Each Sh In ActiveSheet.Shapes
    If Sh.Type = msoPicture Then
        If Not Intersect(Cible, Sh.TopLeftCell) Is Nothing Then
            Sh.Delete
            Exit For
        End If
    End If
Next Sh
Set Cible = Nothing

Range("zone_temp").Copy Range(ComboBox2.Value)
Set Cible = ActiveSheet.Range("zone_temp").Range("A1")
'Boucle sur les forme dans la feuille
For Each Sh In ActiveSheet.Shapes
    If Sh.Type = msoPicture Then
        If Not Intersect(Cible, Sh.TopLeftCell) Is Nothing Then
            Sh.Delete
            Exit For
        End If
    End If
Next Sh
Set Cible = Nothing
Range("zone_temp").ClearContents
Application.ScreenUpdating = True

End Sub

Attention les images doivent être positionnées au millimètre sur la cellule.

Bonne journée
 
Dernière édition:

doublenico

XLDnaute Junior
Re : Aide pour création de combobox qui liste les zones nommées

Merci beaucoup bqtr, mon projet avance pas mal du tout.
Ta macro fonctionne bien cependant j'ai ui un soucis avec mes formes ovales, il y a une superposition de ces images alors que les autres images non.

J'ai ai ajouté d'autre traitements dans mon fiichier pour supprimer toutes images qui se trouvent en zone_temp avant de lancer une inversion de bloc (user form /valider)
Code:
Sub supprimer_zone_temp1()
Dim Sh As Shape

For Each s In ActiveSheet.Shapes
     If s.TopLeftCell.Address = "$AJ$11" Then s.Delete
  Next s
End Sub
Parcontre je suis obligé de la répéter plusieurs fois or je souhaiterais pouvoir supprimer les images de la zone AJ11 à AR11, une idée?

Je joins la nouvelle version du document.
http://cjoint.com/?brrgVv3bmq

Merci
 

bqtr

XLDnaute Accro
Re : Aide pour création de combobox qui liste les zones nommées

Bonsoir,

Essaye ceci

Code:
Sub Supp_Shpe()

Dim plg As Range, cell As Range, sh As Shape
Set plg = Union(Range("AJ11"), Range("AK11"), Range("AL11"), Range("AM11"), Range("AN11"), Range("AO11"), _
Range("AP11"), Range("AQ11"), Range("AR11"))
For Each cell In plg
    For Each sh In ActiveSheet.Shapes
       If sh.TopLeftCell.Address = cell.Address Then sh.Delete
    Next sh
Next cell
End Sub

A+
 

Discussions similaires

Membres actuellement en ligne

Statistiques des forums

Discussions
312 206
Messages
2 086 210
Membres
103 158
dernier inscrit
laufin