Création d'un formulaire pour saisie d'une matrice

lina_bou13

XLDnaute Nouveau
Bonsoir à tous,
Pour mon mémoire de fin d'année je dois faire une application avec excel qui optimise les tournées de véhicule d'une entreprise, mon programme marche bien!
J'ai un problème j'aimerai pouvoir créer un formulaire qui me remplira une seule partie de la matrice inter distance.
Je m'explique:
Quand on rentre dans l'application , la page accueil on a un bouton pour optimiser le chemin, qu'on on clique une boite de dialogue s'affiche, j'aimerai quand on clique sur NON un formulaire s'affiche pour remplir la matrice.
La matrice devant être symétrique, j'ai trouvé comment un codepour faire la symétrie donc je voudrais savoir comment faire pour créer un formulaire qui me remplira que la partie du bas de ma matrice.
Je vous laisse mon programme ci-joint.
Je vous serez infiniment reconnaissante :(
 

Pièces jointes

  • application_fi.xlsm
    385.9 KB · Affichages: 66

Hieu

XLDnaute Impliqué
Salut lina_bou13,

Ci-dessous un petit bout de code pour symétriser ta matrice (annule et remplace le sub Main
VB:
Sub mlk()
Dim mat(20, 20)
For i = 0 To 20
For j = 0 To 20
mat(i, j) = Sheets("Distances").Range("j4").Offset(i, j)
Next j
Next i

Call symetrisation(mat)

For i = 0 To 20
For j = 0 To 20
Sheets("Distances").Range("j4").Offset(i, j) = mat(i, j)
Next j
Next i
End Sub
Sub symetrisation(mat)
For i = 0 To 20
For j = i + 1 To 20
mat(i, j) = mat(j, i)
Next j
Next i
End Sub

Apres, de ce que j'ai compris, tu voudrais un userform qui remplirai le tableau.
J'ai démarré l'idée dans le fichier en piece jointe ; faut faire des petis carrés.

Tu pourras ensuite t'appuyer de la subroutine de symetrisation
 

Pièces jointes

  • application_fi_v0.xlsm
    385.6 KB · Affichages: 72

Dranreb

XLDnaute Barbatruc
Bonjour.
On peut quand même aussi veiller à ce que les 2 moitiés de la matrice soient renseignées en même temp par cette procédures dans le module objet Feuil2 (Distances)
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row < 3 Or Target.Column < 9 Then Exit Sub
Application.EnableEvents = False
Me.Cells(Target.Column - 6, Target.Row + 6).Value = Target.Value
Application.EnableEvents = True
End Sub
L'écriture d'autres procédures dans ce genre de module n'est pas courant. Si elles sont Public il faut d'ailleurs alors les considérer comme des méthodes de l'objet.
 

Discussions similaires