Affichage SHAPES dans un boucle

Bonjour,

Je sais afficher une shapes selon une condition mais je n'arrive à le répéter dans un boucle, je n'ai beaucoup de connsaissance en VBA.

Je m'explique :

  • J'ai un ensemble de noeud (insertion d'un shape ellipse sur un graphique) allant de 0 à n (j'ai nommé tout mes noeud Ni)
  • J'ai un ensemble de connecteurs allant de 1 à m (j'ai nommé tout mes connecteurs Ai)
  • J'ai une matrice xij binaire de dimension (n,n) qui représente un trajet entre deux noeuds
Par exemple,

Si x[1,3] = 1, je veux que le trajet de 1 à 3 soit afficher, le trajet est composé de plusieurs connecteur

(voir fichier exemple)

-J'ai un tableau qui m'indique que tel trajet correspond à tel connecteur

Exemple : Le trajet 13 correspond aux connecteur A8 et A9 (voir fichier exemple)

J'aimerai une réaliser une macro qui :

1) Masque tout mes noeuds et tout mes connecteurs, pour le moment j’utilise :

Sub MasquerObj()

With Sheets("Affichage")

For Each sh In .Shapes

For i = 1 To 18

If sh.Name = "A" & i Then J'aimerai pouvoir mettre les << "N"&i >> aussi

sh.Visible = False

Exit For

End If

Next i

Next sh

End With

End Sub

2) Qui m'affiche les connecteur selon la valeur de xij et la table des connecteurs

J'ai commencé, mais je bloque (je ne vois pas comment appeler la table)

Sub Affichage()

Dim i As Integer

Dim j As Integer

Dim n As Integer

n = 10

For i = 1 To n

For j = 1 To n

If Cells(i + 3, j + 11).Value = 1 Then

'La je bloque ...

End If

Next j

Next i

End Sub

3) Qui m'affiche les noeuds utilisé, un noeud est utilisé si la somme sur un ligne de xij est >0

Merci d'avance pour votre aide ,

Je ne suis p-e pas très clair...

Bonjour,

Quelques petits aménagements à voir sur ta feuille, et 2 plages nommées à voir dans le Gestionnaire de noms.

Private Sub cbAffich_Click()
    Dim sh As Shape, Xij, Trj, i%, j%, k%
    Application.ScreenUpdating = False
    For Each sh In Me.Shapes
        sh.Visible = False
    Next sh
    cbAffich.Visible = True
    Xij = [Tblxij].Value
    For i = 0 To 8
        For j = i + 1 To 9
            If Xij(i + 1, j) = 1 Then
                Trj = Trj & ";" & i & j
                Me.Shapes(CStr(i)).Visible = msoTrue
                Me.Shapes(CStr(j)).Visible = msoTrue
            End If
        Next j
    Next i
    With [Lstxij]
        Trj = Split(Trj, ";"): j = 1
        For i = 1 To UBound(Trj)
            Do While j <= .Rows.Count
                If .Cells(j, 1) = CStr(Trj(i)) Then
                    k = 2
                    Do While .Cells(j, k) <> ""
                        Me.Shapes("A" & .Cells(j, k)).Visible = msoTrue
                        k = k + 1
                    Loop
                    j = j + 1
                    Exit Do
                End If
                j = j + 1
            Loop
        Next i
    End With
End Sub

Cordialement.

Bonjour,

Merci beaucoup MFerrand,

J'ai juste un petit problème, lorsque j'ouvre votre fichier joint je tombe sur un page excel grisé et je ne vois pas rien du tout ?

Est-ce normal ? Je peux lancer la macro mais rien ne s'affiche

Merci pour votre code,

Vous avez créé xij et Trij directement sur la feuille excel c'est ça ?

Merci d'avance

Lalalathuile

Re-bonjour,

Non c'est bon, ça à marché au bout du 4 ème téléchargement ,

ça à l'air de bien fonctionner, merci beaucoup.

Juste pour les x[i,j] et tu as remplis que la partie haute de la matrice ceux je comprend, ce que je comprend.

Mais dans mon cas le solveur me comme résultat des x[i,j] dans l'ensemble de la matrice, tu saurais passé

de la matrice des x[i,j] que j'avais envoyé à celle que tu as créé ?

Merci d'avance,

Lalalathuile

J'ai nommé deux plages :

L4:T12 => Tblxij

K16:K60 => Lstxij

Pour la matrice, j'ai occulté la partie qui ne sert pas. En effet, ce que tu détermines avec des 1, ce sont des combinaisons de 2 éléments parmi 10, ce qui en fait 45 qui sont listées au-dessous.

J'ai effectivement supprimé du tableau matrice la dernière ligne et une colonne à gauche. Tu peux les rétablir, mais la plage nommée doit correspondre à la plage sans ces colonne et ligne. De même, les 1 ne doivent être que dans la zone laissée blanche, si tu veux que la macro fonctionne.

Cordialement.

D'accord,

Je crois que j'ai à peu près compris le code.

Juste il y un différence entre true et msotrue ?

J'ai vu que tu avais retiré un ligne et colonne pour les xij mais lorsque je détermine mes xij à l'aide d'un solveur, le solveur me les renvoie sous la forme que j'ai mise dans le premier fichier, j'aimerai pouvoir passer la matrice de la matrice que le solveur à généré à celle que tu as créé par une macro et je ne sais pas trop comment faire mais je vais bien trouve une solution.

Je vais pouvoir mettre dans résolue, comment ont fait ?

Merci beaucoup, ça m'aide énormément

Lalathuile

msoTrue parce que l'assistant me le met sans que j'ai à le taper !

Pour résolu tu cliques sur la coche que tu es seul à avoir, puisque émetteur du sujet.

Rechercher des sujets similaires à "affichage shapes boucle"