Déclaration de tableau avec nombre de ligne égale à n

Bonjour à tous,

Je viens vers vous car je souhaite effectuer un planning en automatisé pour une équipe de technicien de 6 personnes donc 6 postes. Par la suite, j'évaluerai les différents éléments générés en fonction de certaines contraintes pour garder la meilleure solution. (Pour des équipes plus grandes à partir de 8 j'utiliserais des métaheuristiques je pense)

Avec l'algorithme ci-dessous je génère l'ensemble des permutations possibles. Cet algorithme n'est pas de moi hormis les parties problématiques . En effet, même si les limites d'excel seront vites atteintes je souhaite rendre le nombre de techniciens dynamique (en cas de départ ou d'arrivé) et comment faire pour déclarer un tableau avec un nombre n de ligne (Dim t(0 to n). Je sais que n doit-être une constante mais il y a t-il une autre façon de procéder.

Merci d'avance pour votre soutien et pour votre matière grise

Sub test()

    Dim Tbl()
    Dim I As Integer
    Dim J As Long
    Dim Chaine As String
    Dim Str As String

    'Remplissage du tableau T() par une boucle
    Dim t(0 To 6)

    For I = 1 To 7
       t(I - 1) = I
    Next I

    For I = 0 To UBound(t): Chaine = Chaine & t(I): Next I

    Permuter Chaine, "", Tbl, J
    Columns(1).Clear
    Range(Cells(1, 1), Cells(UBound(Tbl), 1)).Value = Application.Transpose(Tbl)

    'Fractionnement du texte
    For I = 1 To UBound(Tbl)
        For J = 1 To 7
            Cells(I, J + 1) = Mid(Cells(I, 1), J, 1)
        Next J
    Next I

End Sub

Sub Permuter(Chaine As String, Debut As String, Tbl(), J As Long)

    Dim I As Integer

    If Len(Chaine) = 1 Then

         J = J + 1: ReDim Preserve Tbl(1 To J)
        Tbl(J) = Debut & Chaine

    Else

        For I = 1 To Len(Chaine)

            Permuter Mid(Chaine, 2, Len(Chaine) - 1), Debut & Left(Chaine, 1), Tbl, J
            Chaine = Mid(Chaine, 2, Len(Chaine) - 1) & Left(Chaine, 1)

        Next

    End If

End Sub

Bonjour,

Il faut utiliser l'instruction Redim sans dimensionner au départ.

Voici un exemple :

Sub test()

    Dim Tbl()
    Dim I As Integer
    Dim J As Long, n as long
    Dim Chaine As String
    Dim Str As String

    n = range("A1").value '<<<< en A1, nombre de techniciens
    if n < 1 then msgbox "erreur": exit sub
    'Remplissage du tableau T() par une boucle
    redim t(1 To n)
    For I = 1 to n
       t(I) = I
       Chaine = Chaine & t(I)
    Next I

    Permuter Chaine, "", Tbl, J '<<<< J ? J vaut 0 ici...
    'Permuter Chaine, "", Tbl, n '<<< essayer ça peut-être
    Columns(1).Clear
    Cells(1, 1).resize(n, 1).Value = Application.Transpose(Tbl)

    'Fractionnement du texte
    For I = 1 To UBound(Tbl)
        For J = 1 To 7
            Cells(I, J + 1) = Mid(Cells(I, 1), J, 1)
        Next J
    Next I

End Sub

Sub Permuter(Chaine As String, Debut As String, Tbl(), J As Long)

    Dim I As Integer

    If Len(Chaine) = 1 Then
        J = J + 1: ReDim Preserve Tbl(1 To J)
        Tbl(J) = Debut & Chaine
    Else
        For I = 1 To Len(Chaine)
            Permuter Mid(Chaine, 2, Len(Chaine) - 1), Debut & Left(Chaine, 1), Tbl, J
            Chaine = Mid(Chaine, 2, Len(Chaine) - 1) & Left(Chaine, 1)
        Next
    End If

End Sub

Sinon, je ne suis pas certain d'avoir bien compris le code...

Cdlt,

Super merci beaucoup ça marche. C'était rapide et efficace :)

il faut adapter un peu avec le n-1 (exemple ci dessous pour une population de 5)

Tu souhaites des explications sur le code?

Sub test()

    Dim Tbl()
    Dim I As Integer
    Dim J As Long
    Dim Chaine As String
    Dim Str As String

    n = 5
    n = n - 1

    'Remplissage du tableau T() par une boucle
    ReDim t(0 To n)

    For I = 1 To n
       t(I - 1) = I
       Chaine = Chaine & t(I)
    Next I

    For I = 0 To UBound(t): Chaine = Chaine & t(I): Next I

    Permuter Chaine, "", Tbl, J
    Columns(1).Clear
    Range(Cells(1, 1), Cells(UBound(Tbl), 1)).Value = Application.Transpose(Tbl)

    For I = 1 To UBound(Tbl)
        For J = 1 To n
            Cells(I, J + 1) = Mid(Cells(I, 1), J, 1)
        Next J
    Next I

End Sub

Sub Permuter(Chaine As String, Debut As String, Tbl(), J As Long)

    Dim I As Integer

    If Len(Chaine) = 1 Then

         J = J + 1: ReDim Preserve Tbl(1 To J)
        Tbl(J) = Debut & Chaine

    Else

        For I = 1 To Len(Chaine)

            Permuter Mid(Chaine, 2, Len(Chaine) - 1), Debut & Left(Chaine, 1), Tbl, J
            Chaine = Mid(Chaine, 2, Len(Chaine) - 1) & Left(Chaine, 1)

        Next

    End If

End Sub
Rechercher des sujets similaires à "declaration tableau nombre ligne egale"