Gestion des shapes (affichage, grouper...)
Fermé
Lalalathuile
Messages postés
8
Date d'inscription
mercredi 31 mai 2017
Statut
Membre
Dernière intervention
2 juin 2017
-
31 mai 2017 à 14:41
yg_be Messages postés 22744 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 mai 2024 - 2 juin 2017 à 19:45
yg_be Messages postés 22744 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 1 mai 2024 - 2 juin 2017 à 19:45
A voir également:
- Gestion des shapes (affichage, grouper...)
- Logiciel gestion photos - Guide
- Affichage double ecran - Guide
- Windows 11 affichage classique - Guide
- Les paramètres d'affichage nvidia ne sont pas disponibles ✓ - Forum Carte graphique
- Hdmi gestion alim ✓ - Forum Matériel & Système
6 réponses
yg_be
Messages postés
22744
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
1 mai 2024
1 477
31 mai 2017 à 23:13
31 mai 2017 à 23:13
bonsoir, peux-tu partager ton fichier?
yg_be
Messages postés
22744
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
1 mai 2024
1 477
31 mai 2017 à 23:20
31 mai 2017 à 23:20
cette partie-ci devrait être facile:
ActiveSheet.Shapes(i&j).Visible = True (si i = 1 et j = 2, activer le connecteur 12)
tu peux faire
ActiveSheet.Shapes(i&j).Visible = True (si i = 1 et j = 2, activer le connecteur 12)
tu peux faire
ActiveSheet.Shapes(cstr(10*i+j).Visible = True
Lalalathuile
Messages postés
8
Date d'inscription
mercredi 31 mai 2017
Statut
Membre
Dernière intervention
2 juin 2017
1 juin 2017 à 08:29
1 juin 2017 à 08:29
Merci beaucoup, ça fonctionne bien,
Je n'arrive juste pas à regrouper mes shapes et leur donner le nom que je souhaite ? Grouper deux connecteurs et leur données un nom (12 par exemple) pour pouvoir le mettre dans une boucle ? Je sais pas si on peut faire ça manuellement ou on est obligé de passer par VBA.
Faut que je fasse un fichier exemple si je veux le partager car c'est un fichier confidentielle. Il faut utiliser quoi pour partager un fichier ?
Merci d'avance
Lalalathuile
Je n'arrive juste pas à regrouper mes shapes et leur donner le nom que je souhaite ? Grouper deux connecteurs et leur données un nom (12 par exemple) pour pouvoir le mettre dans une boucle ? Je sais pas si on peut faire ça manuellement ou on est obligé de passer par VBA.
Faut que je fasse un fichier exemple si je veux le partager car c'est un fichier confidentielle. Il faut utiliser quoi pour partager un fichier ?
Merci d'avance
Lalalathuile
yg_be
Messages postés
22744
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
1 mai 2024
1 477
>
Lalalathuile
Messages postés
8
Date d'inscription
mercredi 31 mai 2017
Statut
Membre
Dernière intervention
2 juin 2017
Modifié le 1 juin 2017 à 09:00
Modifié le 1 juin 2017 à 09:00
je pense que tu peux faire cela manuellement. tu peux renommer les shapes en utilisant le volet sélection.
ceci te sera peut-être utile:
https://support.microsoft.com/fr-fr/office/g%c3%a9rer-les-objets-%c3%a0-l-aide-du-volet-s%c3%a9lection-a6b2fd3e-d769-46c1-9b9c-b94e04a72550?ui=fr-fr&rs=fr-fr&ad=fr
ceci te sera peut-être utile:
https://support.microsoft.com/fr-fr/office/g%c3%a9rer-les-objets-%c3%a0-l-aide-du-volet-s%c3%a9lection-a6b2fd3e-d769-46c1-9b9c-b94e04a72550?ui=fr-fr&rs=fr-fr&ad=fr
Lalalathuile
Messages postés
8
Date d'inscription
mercredi 31 mai 2017
Statut
Membre
Dernière intervention
2 juin 2017
>
yg_be
Messages postés
22744
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
1 mai 2024
1 juin 2017 à 09:14
1 juin 2017 à 09:14
Merci pour le lien,
ci-joint le fichier :
https://www.cjoint.com/c/GFbhmRT4DLb
Merci d'avance,
Lalalathuile
ci-joint le fichier :
https://www.cjoint.com/c/GFbhmRT4DLb
Merci d'avance,
Lalalathuile
yg_be
Messages postés
22744
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
1 mai 2024
1 477
>
Lalalathuile
Messages postés
8
Date d'inscription
mercredi 31 mai 2017
Statut
Membre
Dernière intervention
2 juin 2017
1 juin 2017 à 09:26
1 juin 2017 à 09:26
si je vois bien, tu as un connecteur (le 57) qui participe à deux trajets.
comment vas-tu faire?
je pense à deux options:
- créer un connecteur supplémentaire, pour que chaque connecteur ne fasse partie que d'un trajet
- laisser tomber l'idée de shape, et travailler sur les connecteurs, en ayant une table qui fait le lien entre les trajets et les connecteurs
sinon, en utilisant ton fichier, j'ai pu facilement créer un groupe avec des connecteurs
je pense à autre chose: ta convention pour nommer les shapes (12 entre 1 et 2), tu dois obtenir 12 aussi entre 2 et 1?
comment vas-tu faire?
je pense à deux options:
- créer un connecteur supplémentaire, pour que chaque connecteur ne fasse partie que d'un trajet
- laisser tomber l'idée de shape, et travailler sur les connecteurs, en ayant une table qui fait le lien entre les trajets et les connecteurs
sinon, en utilisant ton fichier, j'ai pu facilement créer un groupe avec des connecteurs
je pense à autre chose: ta convention pour nommer les shapes (12 entre 1 et 2), tu dois obtenir 12 aussi entre 2 et 1?
Lalalathuile
Messages postés
8
Date d'inscription
mercredi 31 mai 2017
Statut
Membre
Dernière intervention
2 juin 2017
1 juin 2017 à 09:44
1 juin 2017 à 09:44
-Oui, il y a bien des connecteurs utilisé pour faire le même trajet et créer des doubles est un peu fastidieux lorsqu'on a un grand ensemble de noeud, le nombre de trajet augmente en 2^n.
Je pensais faire :
1) Si le trajet entre deux noeud est effectué activé le ou les connecteur (ou changer de couleur), de ce fait si un connecteur est utilisé deux fois, il n'y a pas de problème.
et ne pas s'occuper des trajets qui ne sont pas effectués.
2) Faire disparaître tout les connecteur qui ne sont pas rouge (je ne sais pas si c'est rouge)
-Travailler sur les connecteur c'est à dire ? Créer une liaison entre le noeud et l'arc ?
-Oui, 12 doit être obtenu dans les deux cas, il n'y a pas sens de trajet.
Merci d'avance,
Lalalathuile
Je pensais faire :
1) Si le trajet entre deux noeud est effectué activé le ou les connecteur (ou changer de couleur), de ce fait si un connecteur est utilisé deux fois, il n'y a pas de problème.
et ne pas s'occuper des trajets qui ne sont pas effectués.
2) Faire disparaître tout les connecteur qui ne sont pas rouge (je ne sais pas si c'est rouge)
-Travailler sur les connecteur c'est à dire ? Créer une liaison entre le noeud et l'arc ?
-Oui, 12 doit être obtenu dans les deux cas, il n'y a pas sens de trajet.
Merci d'avance,
Lalalathuile
yg_be
Messages postés
22744
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
1 mai 2024
1 477
Modifié le 1 juin 2017 à 15:39
Modifié le 1 juin 2017 à 15:39
juste pour t'inspirer, ceci désactive toutes les formes:
cela te montre aussi comment du code vba peut faire le tour de tous les shapes, découvrir leur noms, et agir sur chacun.
Option Explicit Sub testlalala() Dim uneshape As Shape Dim monsheet As Worksheet Set monsheet = ActiveSheet For Each uneshape In monsheet.Shapes Debug.Print uneshape.Name Next uneshape For Each uneshape In monsheet.Shapes uneshape.Visible = False Next uneshape End Sub
cela te montre aussi comment du code vba peut faire le tour de tous les shapes, découvrir leur noms, et agir sur chacun.
Lalalathuile
Messages postés
8
Date d'inscription
mercredi 31 mai 2017
Statut
Membre
Dernière intervention
2 juin 2017
1 juin 2017 à 16:32
1 juin 2017 à 16:32
Merci yg_be, j'ai résussie à masquer les shapes souhaité mais je ne n'arrive pas à afficher ceux voulue.
Pour la question 1 j'ai fait :
Sub MasquerObj()
Dim i As Integer
Dim n As Integer
Dim Nbarc As Integer
Nbarc = 18
n = 10
With Sheets("Affichage")
For Each sh In .Shapes
For i = 0 To Nbarc
If sh.Name = "A" & i Then
sh.Visible = True
End If
If sh.Name = "N" & i Then
sh.Visible = True
End If
Next i
Next sh
End With
End Sub
Mais j'arrive pas à faire la deuxième partie
Sub Affichage()
Dim Tabl()
ReDim Tabl(Nbarc, 5)
Dim i As Integer
Dim j As Integer
Dim n As Integer 'Nombre de noeud
Dim Nbarc 'Nombre de connecteur
For i = 1 to Nb arc
For j = 1 to 5
Tabl(i,j).Value = Cells(i, j).Value 'Remplissage des la table des connecteurs
Next j
Next i
For i = 1 to n 'Visite de la matrice des trajets
For j = 1 to n
If Cells(i,j).Value = 1 Then
ActiveSheet.Shape(cstr(A&cstr(i))) =True 'Activer les Ai présente dans tabl mais je
ne sais pas comment faire
Next j
Next i
en Sub
Je ne vois pas et trouve pas comment récupérer les connecteurs présent dans ma table
Merci d'avance :), j'ai déjà appris quelque truc mais j'en suis encore loin ...
Lalalathuile
Pour la question 1 j'ai fait :
Sub MasquerObj()
Dim i As Integer
Dim n As Integer
Dim Nbarc As Integer
Nbarc = 18
n = 10
With Sheets("Affichage")
For Each sh In .Shapes
For i = 0 To Nbarc
If sh.Name = "A" & i Then
sh.Visible = True
End If
If sh.Name = "N" & i Then
sh.Visible = True
End If
Next i
Next sh
End With
End Sub
Mais j'arrive pas à faire la deuxième partie
Sub Affichage()
Dim Tabl()
ReDim Tabl(Nbarc, 5)
Dim i As Integer
Dim j As Integer
Dim n As Integer 'Nombre de noeud
Dim Nbarc 'Nombre de connecteur
For i = 1 to Nb arc
For j = 1 to 5
Tabl(i,j).Value = Cells(i, j).Value 'Remplissage des la table des connecteurs
Next j
Next i
For i = 1 to n 'Visite de la matrice des trajets
For j = 1 to n
If Cells(i,j).Value = 1 Then
ActiveSheet.Shape(cstr(A&cstr(i))) =True 'Activer les Ai présente dans tabl mais je
ne sais pas comment faire
Next j
Next i
en Sub
Je ne vois pas et trouve pas comment récupérer les connecteurs présent dans ma table
Merci d'avance :), j'ai déjà appris quelque truc mais j'en suis encore loin ...
Lalalathuile
yg_be
Messages postés
22744
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
1 mai 2024
1 477
>
Lalalathuile
Messages postés
8
Date d'inscription
mercredi 31 mai 2017
Statut
Membre
Dernière intervention
2 juin 2017
1 juin 2017 à 16:58
1 juin 2017 à 16:58
ajoute option explicit au début de ton code, pour détecter les variables non déclarées.
je trouve ceci bizarre:
si tab est une table, tu ne peux pas faire .value, fais simplement Tabl(i,j) = Cells(i, j).Value
cells(i,j) est certainement faux, tu veux sans doute faire cells(i+3,11=j) ou bien cells(i+15, j+11), je suppose, en effet, que tu veux parcourir tes tables "xij" et "connecteurs".
je trouve ceci bizarre:
For i = 1 to Nb arc For j = 1 to 5 Tabl(i,j).Value = Cells(i, j).Value 'Remplissage des la table des connecteurs
si tab est une table, tu ne peux pas faire .value, fais simplement Tabl(i,j) = Cells(i, j).Value
cells(i,j) est certainement faux, tu veux sans doute faire cells(i+3,11=j) ou bien cells(i+15, j+11), je suppose, en effet, que tu veux parcourir tes tables "xij" et "connecteurs".
Lalalathuile
Messages postés
8
Date d'inscription
mercredi 31 mai 2017
Statut
Membre
Dernière intervention
2 juin 2017
>
yg_be
Messages postés
22744
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
1 mai 2024
2 juin 2017 à 08:31
2 juin 2017 à 08:31
Merci yg_be,
J'ai rectifié mes erreurs
Pour le moment j'ai :
Sub Affichage()
Dim i As Integer
Dim j As Integer
Dim n As Integer 'Nombre de noeud
Dim traj As Integer 'Nombre de connecteur
n = 10
traj = 45
Dim Tabl()
ReDim Tabl(traj, 5)
Dim x()
ReDim x(n, n)
For i = 1 To traj
For j = 1 To 5
Tabl(i, j) = Cells(i + 15, j + 11).Value 'Remplissage des la table des connecteurs
Next j
Next i
For i = 1 To n
For j = 1 To n
x(i, j) = Cells(i + 3, j + 11).Value
Next j
Next i
End Sub
Je bloque un peu pour afficher les connecteurs en fonction de Tabl(i,j) et x(i,j)...
As-tu des idées à m'apporter pour avancer ma macro ?
Merci d'avance,
Lalalathuile
J'ai rectifié mes erreurs
Pour le moment j'ai :
Sub Affichage()
Dim i As Integer
Dim j As Integer
Dim n As Integer 'Nombre de noeud
Dim traj As Integer 'Nombre de connecteur
n = 10
traj = 45
Dim Tabl()
ReDim Tabl(traj, 5)
Dim x()
ReDim x(n, n)
For i = 1 To traj
For j = 1 To 5
Tabl(i, j) = Cells(i + 15, j + 11).Value 'Remplissage des la table des connecteurs
Next j
Next i
For i = 1 To n
For j = 1 To n
x(i, j) = Cells(i + 3, j + 11).Value
Next j
Next i
End Sub
Je bloque un peu pour afficher les connecteurs en fonction de Tabl(i,j) et x(i,j)...
As-tu des idées à m'apporter pour avancer ma macro ?
Merci d'avance,
Lalalathuile
yg_be
Messages postés
22744
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
1 mai 2024
1 477
Modifié le 2 juin 2017 à 09:41
Modifié le 2 juin 2017 à 09:41
je vois que tu as une matrice, xij, qui représente probablement si deux nœuds doivent être reliés ou pas.
et une autre matrice, connecteurs, qui définit des trajets, qui sont en fait des ensembles de connecteurs.
je suppose que les noms des connecteurs détermine la paire de nœuds que le trajet relie.
ai-je bien compris?
si oui, tu y étais presque:
attention à mettre une valeur négative dans tab quand tu fais ceci :
et une autre matrice, connecteurs, qui définit des trajets, qui sont en fait des ensembles de connecteurs.
je suppose que les noms des connecteurs détermine la paire de nœuds que le trajet relie.
ai-je bien compris?
si oui, tu y étais presque:
For i = 1 to n 'Visite de la matrice des trajets For j = 1 to n If x(i,j) = 1 Then if i<j then ntrajet=10*(i-1)+(j-1) else ntrajet=10*(j-1)+(i-1 end if ' pas encore fait: ' il faut calculer ou chercher lignetrajet, la ligne dans Tab où se trouve le trajet ntrajet ' ensuite: for k = 2 to 8 nconnecteur=Tab(lignetrajet,k) if nconnecteur >=0 ActiveSheet.Shape(cstr(nconnecteur)) =True end if next k end if Next j Next i
attention à mettre une valeur négative dans tab quand tu fais ceci :
Tabl(i, j) = Cells(i + 15, j + 11).Value 'Remplissage des la table des connecteurs, si la valeur n'est pas numérique
yg_be
Messages postés
22744
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
1 mai 2024
1 477
Modifié le 2 juin 2017 à 09:41
Modifié le 2 juin 2017 à 09:41
il y a moyen de faire plus simple et plus rapide: parcourir la table des trajets plutôt que la matrice des nœuds..
je ferai une proposition plus tard.
je ferai une proposition plus tard.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
yg_be
Messages postés
22744
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
1 mai 2024
1 477
Modifié le 2 juin 2017 à 10:11
Modifié le 2 juin 2017 à 10:11
je propose de remplacer ceci
par
ce qui permet d'utiliser ntrajet au lieu de lignetrajet.
il faut aussi changer le redim de Tabl: ReDim Tabl(99, 7)
as-tu mis option explicit, pour être forcé de déclarer toutes tes variables?
For i = 1 To traj For j = 1 To 5 Tabl(i, j) = Cells(i + 15, j + 11).Value 'Remplissage des la table des connecteurs Next j Next i
par
For i = 1 To traj For j =1 To 7 if isnum(Cells(i + 15, j + 11).Value) then nconn=Cells(i + 15, j + 11).Value else nconn=-1 end if Tabl( Cells(i + 15, 11), j) = nconn 'Remplissage des la table des connecteurs Next j Next i
ce qui permet d'utiliser ntrajet au lieu de lignetrajet.
il faut aussi changer le redim de Tabl: ReDim Tabl(99, 7)
as-tu mis option explicit, pour être forcé de déclarer toutes tes variables?
yg_be
Messages postés
22744
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
1 mai 2024
1 477
2 juin 2017 à 19:45
2 juin 2017 à 19:45
ceci suppose que tu supprimes les zéros des noms des connecteurs 01 à 09.
option explicit Sub Affichage() Dim i As Integer Dim j As Integer dim k as integer Dim n As Integer 'Nombre de noeud Dim traj As Integer 'Nombre de connecteur dim nconnecteur as integer, ntrajet as integer n = 10 traj = n*(n-1)/2 Dim Tabl() as integer ReDim Tabl(n*(n-1), 7) as integer Dim x() as integer ReDim x(n, n) For i = 1 To traj For j =1 To 7 if isnum(Cells(i + 15, j + 11).Value) then nconnecteur=Cells(i + 15, j + 11).Value else nconnecteur=-1 end if Tabl( Cells(i + 15, 11), j) = nconnecteur 'Remplissage de la table des connecteurs Next j Next i For i = 1 To n For j = 1 To n x(i, j) = Cells(i + 3, j + 11).Value Next j Next i For i = 1 to n 'Visite de la matrice des trajets For j = 1 to n If x(i,j) = 1 Then if i<j then ntrajet=10*(i-1)+(j-1) else ntrajet=10*(j-1)+(i-1) end if for k = 1 to 7 nconnecteur=Tabl(ntrajet,k) if nconnecteur >=0 ActiveSheet.Shape(cstr(nconnecteur)) =True end if next k end if Next j Next i End Sub