Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Général VBA
Général VBA Forum général VBA . Pour les logiciels spécifiques (Access, Excel, Word, ...), postez dans les bons sous forums.
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 05/01/2007, 11h01   #1
in
Membre Expert
 
Avatar de in
 
Inscription : avril 2003
Messages : 1 609
Détails du profil
Informations personnelles :
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : avril 2003
Messages : 1 609
Points : 1 564
Points : 1 564
Par défaut [Debutant] Impossible d'utiliser les noms des groupes de formes dans les macros ?

Bonjour,

c'est surement une question bete mais ...
voilà j'ai des formes automatiques avec lesquelles je forme des groupe. Ces groupes je les nomme (insertion > nom)

J'ai par exemple Infos1="Groupe 1"

Par contre, impossible d'utiliser le nom Infos1 dans ma macro :

Code :
1
2
3
listeInfo.Add Sheets(Feuille_Admin).Shapes("Groupe 1") 'ca marche
listeInfo.Add Sheets(Feuille_Admin).Shapes("Infos1") 'ca marche pas -> élément portant ce nom est introuvable
listeInfo.Add Sheets(Feuille_Admin).Shapes(Infos1) 'ca marche pas -> index en dehors de la collection
voilà ... je ne sais pas trop quoi essayer sinon. Est ce que c'est possible au moins ? (enfin sinon je vois pas à quoi ça sert de nommer)

merci d'avance pour vos suggestions
__________________
"If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/
in est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2007, 11h53   #2
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Des précisions sur ListeInfo nous aideraient à te répondre
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2007, 12h06   #3
in
Membre Expert
 
Avatar de in
 
Inscription : avril 2003
Messages : 1 609
Détails du profil
Informations personnelles :
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : avril 2003
Messages : 1 609
Points : 1 564
Points : 1 564
oups

Code :
1
2
'Liste des groupe d'infos-bulles des feuilles
Global listeInfo As New Collection
__________________
"If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/
in est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2007, 12h46   #4
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
L'erreur d'indice indique que tu n'es pas sur la bonne feuille...
Quant
Citation:
"listeInfo.Add Sheets(Feuille_Admin).Shapes("Groupe 1") 'ca marche"
J'ai fait ça en sélectionnant le shape pour simplifier...
Code :
1
2
3
4
5
6
7
8
9
Dim ListeInfo As New Collection
With Selection
    .Name = "Groupe 1"
End With
Infos1 = "Groupe 1"
Feuille_Admin = "Feuil1"
'ListeInfo.Add Sheets(Feuille_Admin).Shapes("Groupe 1") 'ca marche
'ListeInfo.Add Sheets(Feuille_Admin).Shapes("Infos1") 'ca marche pas -> élément portant ce nom est introuvable
ListeInfo.Add Sheets(Feuille_Admin).Shapes(Infos1) 'ca marche pas -> index en dehors
... et ça fonctionne
Tu dis où t'as mis ton erreur
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2007, 13h36   #5
in
Membre Expert
 
Avatar de in
 
Inscription : avril 2003
Messages : 1 609
Détails du profil
Informations personnelles :
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : avril 2003
Messages : 1 609
Points : 1 564
Points : 1 564
je sais pas si j'ai bien compris mais le Feuille_Admin a bien la bonne valeur (si je passe en mode debug).

Par contre mon erreur est peut etre que le Infos1 est "globale" au classeur et pas spécifique à la feuille Feuille_Admin ??

si oui comment je récupère le groupe de shape en passant par le nom ?

si non ... je comprend pas vraiment le
Code :
1
2
3
With Selection
    .Name = "Groupe 1"
End With
En fait ça fait un Select sur le groupe de shape ? Dans ce cas pourquoi ne pas faire
Code :
1
2
3
With Selection
    .Name = Infos1
End With
?

je suis un peu pommé désolé ...
__________________
"If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/
in est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2007, 13h43   #6
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
J'ai nommé le shape pour mon test. En donnant un nom à ma sélection, je suis sûr qu'il porte le bon nom. Ensuite, je peux l'ajouter à ma collection.
Au départ, mon shape (qui était une zone de texte) portait un autre nom
Dans une boucle for each LaShape in ActiveSheet.shapes, tu peux récupérer le nom de chaque Shapes et l'ajouter à ta collection
Désolé mais je dois y aller, pas le tps d'écrire le code
A+ et bonne chance, chuis pas le seul, quelqu'un voudra bien prendre la suite
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2007, 13h52   #7
in
Membre Expert
 
Avatar de in
 
Inscription : avril 2003
Messages : 1 609
Détails du profil
Informations personnelles :
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : avril 2003
Messages : 1 609
Points : 1 564
Points : 1 564
Citation:
Envoyé par ouskel'n'or
Dans une boucle for each LaShape in ActiveSheet.shapes, tu peux récupérer le nom de chaque Shapes et l'ajouter à ta collection
ben ça m'arrange pas trop surtout qu'en général j'ai que un groupe de shape par feuille ...

Ca veut dire que je peux pas utiliser le nom que je lui ai mis ??
__________________
"If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/
in est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2007, 13h56   #8
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Relis attentivement mes explications
A ce soir si personne n'a pu t'aider, ce qui m'étonnerait fort...
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2007, 14h40   #9
in
Membre Expert
 
Avatar de in
 
Inscription : avril 2003
Messages : 1 609
Détails du profil
Informations personnelles :
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : avril 2003
Messages : 1 609
Points : 1 564
Points : 1 564
bon ben ce que je comprends c'est que le nom Infos1 que j'ai donné au groupe 1 n'est pas "visible" depuis la feuille ? enfin l'objet n'est pas une shape de la feuille ...

Mais je suppose que je peux y accéder depuis quelque part ? le classeur lui-même ?

Par contre je sèche. Pourtant c'est tout bete. J'ai une shape que je nomme dans une feuille et j'aimerais y accéder par son nom. Est ce ma manière de nommer ma shape qui est incorrect.

Quand j'affiche le nom des shapes de ma feuille j'ai Group 1.
Par contre au niveau de l'utilisation, je ne peux/veux pas inclure toutes les shapes de la feuille dans la collection (normal quoi), seulement le groupe que j'ai défini dans la feuille ....

bref.

A+ j'espère
__________________
"If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/
in est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/01/2007, 17h42   #10
Rédacteur
 
Homme michel Tanguy
Inscription : août 2005
Messages : 3 317
Détails du profil
Informations personnelles :
Nom : Homme michel Tanguy
Localisation : France, Isère (Rhône Alpes)

Informations professionnelles :
Secteur : Industrie

Informations forums :
Inscription : août 2005
Messages : 3 317
Points : 10 706
Points : 10 706
bonsoir

Ta procédure fonctionne aussi chez moi (pour ce que tu en as montré).
Vérifie que tu indiques le bon nom de groupe dans la variable:


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
Option Explicit
 
'Liste des groupe d'infos-bulles des feuilles
Global listeInfo As New Collection
 
 
Sub RemplissageCollection()
    Dim Infos1 As String
    Dim Feuille_Admin As String
 
    Feuille_Admin = "Feuil1"
    Infos1 = "Groupe 1"
 
    listeInfo.Add Sheets(Feuille_Admin).Shapes(Infos1)
 
End Sub
 
 
 
Sub VerifContenuCollection()
    Dim Sh As Shape
    Set Sh = listeInfo(1)
 
    Sh.Fill.ForeColor.RGB = RGB(255, 0, 255)
End Sub

bon week end
michel
SilkyRoad est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 09h43   #11
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Pour placer le nom de tous tes shapes dans une collection
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Option Explicit
Public listeInfo As New Collection
 
Sub RemplissageCollection()
    Dim i As Integer
    Dim Feuille_Admin As String
    Feuille_Admin = "Feuil1"
    For i = 1 To Sheets(Feuille_Admin).Shapes.Count
        listeInfo.Add Sheets(Feuille_Admin).Shapes(i).Name
        Debug.Print listeInfo(i)
    Next
End Sub
Pour voir le nom de tes shapes dans l'éditeur VB, affiche la fenêtre Exécution -> Affichage -> Fenêtre Exécution
Ceci dit, je ne vois pas l'intérêt de la chose puisque Shapes est une collection de Shape(s)
Ainsi tu peux appeler Shapes(1) ou (2)... autant que tu en as
Juste une remarque comme ça
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/01/2007, 10h10   #12
Responsable Visual Basic
 
Avatar de bbil
 
Inscription : juin 2003
Messages : 11 774
Détails du profil
Informations personnelles :
Âge : 45
Localisation : France, Ariège (Midi Pyrénées)

Informations forums :
Inscription : juin 2003
Messages : 11 774
Points : 16 855
Points : 16 855
Envoyer un message via Skype™ à bbil
en fait lorsque tu groupe des objets graphiques sous excel... ceux-ci forment un nouveau "shape" ... et comme l'as écrit plus haut SilkyRoad, tu y accéde comme tu accéde a tout autre "shape"...




bbil est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 09h59   #13
in
Membre Expert
 
Avatar de in
 
Inscription : avril 2003
Messages : 1 609
Détails du profil
Informations personnelles :
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : avril 2003
Messages : 1 609
Points : 1 564
Points : 1 564
Citation:
Envoyé par bbil
en fait lorsque tu groupe des objets graphiques sous excel... ceux-ci forment un nouveau "shape" ... et comme l'as écrit plus haut SilkyRoad, tu y accéde comme tu accéde a tout autre "shape"...
Ben oui. C'est bien ce que j'essaie de faire non ? J'essaie d'accéder à cette nouvelle shape par le nom que je lui ai attribué ...

Citation:
Envoyé par bbil
PS: Ousk.... merci de revoir ton code où tu mélange le activeSheet et les sheets("feui1") dans la même boucle..!
Ok je continue à regarder ...
__________________
"If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/
in est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 10h17   #14
in
Membre Expert
 
Avatar de in
 
Inscription : avril 2003
Messages : 1 609
Détails du profil
Informations personnelles :
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : avril 2003
Messages : 1 609
Points : 1 564
Points : 1 564
je n'ai rien dans la fenêtre Exécution -> Affichage -> Fenêtre Exécution ...

Citation:
Envoyé par ouskel'n'or
Ceci dit, je ne vois pas l'intérêt de la chose puisque Shapes est une collection de Shape(s)
ben moi non plus , justement je ne veux/peux pas faire ça ...

par contre, chose intéressante qui va surement faire avancer le schmilblick, lorsque j'affiche tous les noms des shapes, je n'ai pas Infos1 mais Groupe 1.

j'en conclue qu'on ne peux pas utiliser les noms qu'on donne dans une macro ?! ce qui me parait bizarre ...

Du coup ma question revient à :
Comment récupère t'on le nom donné à une shape ? Peut on s'en servir pour accéder à cette shape ?

merci de votre aide en tout cas
__________________
"If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/
in est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 10h21   #15
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Comment nommes-tu tes shapes ? Par soft ?
Option Explicit
Code :
1
2
3
4
5
6
7
8
9
10
11
12
Public listeInfo As New Collection 
 
Sub RemplissageCollection()
    Dim i As Integer
    Dim Feuille_Admin As String
    Feuille_Admin = "Feuil1"
    For i = 1 To Sheets(Feuille_Admin).Shapes.Count
        Sheets(Feuille_Admin).Shapes(i).Name = "Groupe " & i 'Nomme tes shapes
        listeInfo.Add Sheets(Feuille_Admin).Shapes(i).Name
        Debug.Print listeInfo(i)
    Next
End Sub
Là tu nommes tes Shapes et tu places les objets dans une collection
Précise tes besoins
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 10h28   #16
in
Membre Expert
 
Avatar de in
 
Inscription : avril 2003
Messages : 1 609
Détails du profil
Informations personnelles :
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : avril 2003
Messages : 1 609
Points : 1 564
Points : 1 564
Citation:
Envoyé par ouskel'n'or
Comment nommes-tu tes shapes ? Par soft ?
Citation:
Envoyé par in, à la 3ème ligne du 1er post
Ces groupes je les nomme (insertion > nom)
Oui je les nomme dans Excel, pas dans le code.
Je sélectionne les shapes désirées, je les groupe et j'attribue un nom au groupe que je viens de créer.

Je désire ensuite utiliser ce nom pour accéder au groupe depuis les macros ...
__________________
"If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/
in est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 11h03   #17
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Ok. Mais comme tu as aussi dit :
Citation:
voilà j'ai des formes automatiques
je pensais que tu les nommais par soft
Tu ne t'es pas facilité la tâche. Je te suggère une autre méthode pour former tes groupes.
- Tu crées pour chaque groupe un tableau des objets le composant
Groupe(1) = array("","Objet1", "Objet2", "Objet3", "Objet4", "Objet5", ...)
où Objet1, 2, 3, 4 sont les vrais noms que tu as donnés aux objets du groupe1 dans Excel
Groupe(2) = array("","Objet5", "Objet6","Objet7","Objet8","Objet9", ...)
etc.
Et si tu tiens aux collections, il ne te reste plus qu'à les placer dedans
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Sub CréerDesGroupe()
Dim Listinfo1 As New Collection
Dim Listinfo2 As New Collection
Dim Groupe1, Groupe2
    Groupe1 = Array("", "Objet1", "Objet2")
    'où Objet1, 2, 3, 4 sont les vrais noms que tu as donnés _
     aux objets du groupe1 dans Excel
    Groupe2 = Array("", "Objet3", "Objet4")
    'où Objet5, 6, 7... idem
'En supposant que tu aies le même nombre d'objets dans chaque groupe
    For i = 1 To UBound(Groupe1)
        Listinfo1.Add Groupe1(i)
        Listinfo2.Add Groupe2(i)
    Next
    Debug.Print Listinfo1(1) & "   " & Listinfo2(2)
End Sub
Mais tu peux plus simplement utiliser directement les tableaus, c'est toi qui vois
Si tu as un pb avec ça, précise-le
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 11h17   #18
in
Membre Expert
 
Avatar de in
 
Inscription : avril 2003
Messages : 1 609
Détails du profil
Informations personnelles :
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : avril 2003
Messages : 1 609
Points : 1 564
Points : 1 564
Citation:
Envoyé par ouskel'n'or
- Tu crées pour chaque groupe un tableau des objets le composant
Groupe(1) = array("","Objet1", "Objet2", "Objet3", "Objet4", "Objet5", ...)
où Objet1, 2, 3, 4 sont les vrais noms que tu as donnés aux objets du groupe1 dans Excel
Je n'ai pas donné de nom aux objets qui composent le groupe. Si j'avais fait ça, ça aurait été exactement la même chose ! j'aurais ajouté aux collections les shapes en essayant d'y accéder par leur nom !

Justement, je groupe/nomme dans Excel pour ne pas avoir à me préoccuper des formes qui composent le groupe ...

Du coup je repose ma question :
Comment récupère t'on le nom donné à une shape ? Peut on s'en servir pour accéder à cette shape ?

je peux pas par exemple faire
"msgbox Infos1" qui me renvoie rien. Comment puis-je accéder à cette valeur dans ma macro ? Ou alors on ne peux pas ?

C'est tout ce que je demande en fait ...


PS : en fait mes shapes sont des formes automatiques, c'est ptet à cause de ça ?
__________________
"If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/
in est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 11h52   #19
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
pendant que je cherche, qu'appelles-tu "mes shapes sont des formes automatiques" ?
A+
ouskel'n'or est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 12h17   #20
Inactif
 
Avatar de ouskel'n'or
 
Inscription : février 2005
Messages : 12 466
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 12 466
Points : 11 930
Points : 11 930
Bien, je viens de faire un essai
Citation:
Envoyé par Tu
Ces groupes je les nomme (insertion > nom)
Si tu fais ça, Excel ne sait pas distinguer le nom d'un groupe qui regroupe plusieurs objets d'un groupe qui n'en possède qu'un. Résultat : si tu fais ça pour obtenir le nom de tes groupes, tu as le nom de tes groupes et le nom de tes objets au même niveau
Code :
1
2
3
For i = 1 To ActiveWorkbook.Names.Count
        MsgBox ActiveWorkbook.Names(i)
Next
Mais ce n'est pas perdu
Si tu fais
Code :
1
2
3
4
5
6
7
8
9
10
Sub DécortiquerLesGroupes()
For i = 1 To ActiveWorkbook.Names.Count
        If InStr(ActiveWorkbook.Names(i), ",") <> 0 Then
            ListInFo = Split(ActiveWorkbook.Names(i), ",")
        End If
Next
For i = 0 To UBound(ListInFo)
    MsgBox ListInFo(i)
Next
End Sub
Tu récupères tes objets dans listInfo
Est-ce que cette solution te conviendrait
Si oui, on verra pour la suite
A+
ouskel'n'or 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 19h29.


 
 
 
 
Partenaires

Hébergement Web