Bonjour,

Je pense avoir un souci avec les variables tableau. Voilà, j'ai une chaîne de caratères qui est stockée dans une variable (appelée typetable). Selon cette chaîne, le nombre de colonnes à remplir dans une feuille Excel varie (ça doit être effectué automatiquement à la création de la feuille).
Par exemple, si la chaîne = "PDT", on obtient :

Nom : exemple.PNG
Affichages : 182
Taille : 4,3 Ko
Mais si la chaîne = "GEST" on aura par exemple que les 4 entêtes en violet qui s'afficheront (et le reste de leurs colonnes auront des bordures).

Pour comprendre je vous affiche la sub principale :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
 
 
 
Sub Add_Table(ByRef tableUser As String, ByRef typetableUser As String)
    'Cette sub ajoute une table (ajoute une feuille Excel, met en forme une colonne ID et d'autres colonnes )
    ' Déclaration des variables
    Dim nomTable As String
    Dim nomcomplet As String
    Dim valeur As String
    Dim typetable As String
    Dim plage As Range
    Dim tabintermediaire() As String  
 
    Dim tabintermediaire2() As String   
    Dim i As Integer
    nomTable = tableUser
    typetable = typetableUser
 
   'Attribuer le nom choisi à la feuille
    nomcomplet = typetable & nomTable
    Sheets.Add 'ajout d'une feuille
    ActiveSheet.Name = nomcomplet 'donne le nom voulu à cette feuille
 
    'crée la colonne ID, la met en forme
    CreationColID
    'verrouillle la colonne ID
    ProtectColID
 
    'tabintermediaire est un tableau à 2 colonnes contenant les lettres des types de caractéristiques comme "G" ou "T"
    ' et le nombre de colonnes pour chaque type 
    tabintermediaire() = ColsToAdd(typetable)
    'tabintermediaire2 est un tableau à deux colonnes contenant les plages où mettre les
    'types de caractéristiques, et la valeur que chaque cellule doit prendre dans cette plage
    tabintermediaire2() = AssociePlage(tabintermediaire) ' ------------> ça bloque à ce niveau
 
    With Sheets(nomcomplet)
 
    For i = 1 To UBound(tabintermediaire2)
            'pour chaque plage
          plage = tabintermediaire2(1, i)
          'récupération du type de carac associé
          valeur = tabintermediaire2(2, i)
          'donne la valeur à la plage
          Sheets(nomcomplet).Range(plage).Value = valeur
          'met en forme la plage
          ColorieSelonVal plage, valeur
          Centre plage
          Bordure plage
          Gras plage
 
    Next i
   End With
End Sub

Je vous mets quand même cette fonction, il y a des chances que ce soit elle qui fasse tout buguer :

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
 
 
Function ColsToAdd(typetable As String)
 
'Cette fonction renvoie un tableau contenant les types colonnes à ajouter
' à la création de table selon le type de table, et le nombre de colonnes par type
'partant du principe que les caractéristiques sont triées par type
    Dim anciennelettret As String
    Dim lettret As String
    Dim tableaulettre() As String
    Dim lig As Integer
    Dim drlig As Integer
    Dim compteur  As Integer    'lig = premiere ligne, derlig = dernière ligne
 
    With Sheets("GEST_CARAC_TABLES")
 
        drlig = .Range("E1").End(xlDown).Row
 
        'initialisation
 
        'parcourir la colonne E pour trouver le type de table donné
        If Range("E2").Value = typetable Then
 
            'parcourir la colonne D pour trouver les carac obligatoires
            If Range("D2").Value = "oui" Then
 
 
            lettret = Range("C2").Value
            anciennelettret = lettret
            compteur = 1
            Else
 
            lettret = ""
            anciennelettret = ""
            compteur = 0
 
            End If
 
        Else
 
            lettret = ""
            anciennelettret = ""
            compteur = 0
 
        End If
 
        For lig = 3 To drlig
 
                'parcourir la colonne E pour trouver le type de table donné
                If Range("E" & lig).Value = typetable Then
 
                    'parcourir la colonne D pour trouver les carac obligatoires
                    If Range("D" & lig).Value = "oui" Then
 
 
                       lettret = Range("C" & lig).Value
 
 
                       If lettret = anciennelettret Then  'si la précédente lettre est la même
 
 
 
                            compteur = compteur + 1 'comptage du nombre de col de même type à créer
 
                            anciennelettret = lettret    'récupération du type de carac
 
                        Else
                            'si la lettre change, alors il s'agit d'une autre caractéristique
                            'le compteur est remis à 0
                            ReDim tableaulettre(lig, 2)
                            tableaulettre(lig, 1) = anciennelettret
                            tableaulettre(lig, 2) = compteur
 
 
                             compteur = 0
 
                        End If
 
 
                    End If
                End If
 
        Next lig
 
 
    ColsToAdd = tableaulettre
 
    End With
 
 
End Function
La feuille Excel GEST_CARAC_TABLES ressemble à ça :
Nom : exmple.PNG
Affichages : 134
Taille : 4,4 Ko

J'ai essayé plein de trucs, je me suis dit peut être que c'est à cause de l'indice 0 dans le tableau ( j'avais mis par exemple tableau(0,0) pour avoir la première case mais du coup j'ai remplacé par des 1 au cas où)
Mais rien à faire, ça me bloque. Et comme je commence tout juste à utiliser les variables tableaux ça m'étonne pas que j'aie du mal.
La fonction qui pose problème :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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
26
27
28
29
30
31
32
33
34
35
36
 
 
 
Function AssociePlage(table() As String)
'Renvoie un tableau contenant des noms de plages de cellules pour chaque ligne d'un tableau
'(composé d'une lettre dans chaque cellule de la première colonne et d'un nombre dans la deuxième)
'donné et les valeurs des plages
Dim firstcell As Integer 'première cellule de la plage
Dim lastcell As Integer 'dernière cellule de la plage
Dim plage As Range
Dim tableauplage() As String
Dim i As Integer
 
i = 3
firstcell = 66  ' code chr pour B
 
  ReDim tableauplage(i, 2)
' renvoie le code chr pour la dernière colonne correspondant au type
lastcell = firstcell + table(i, 2)                 ' <--------------------------- erreur : l'indice n'appartient pas à la sélection
plage = Range(Chr(firstcell) & 1, Chr(lastcell) & 1)
tableauplage(i, 1) = plage
tableauplage(i, 2) = table(i, 1)
 
    For i = 4 To UBound(table)
        ReDim tableauplage(i, 2)
        firstcell = lastcell + 1
        lastcell = firstcell + table(i, 2)
        plage = Range(Chr(firstcell) & 1, Chr(lastcell) & 1)
        tableauplage(i, 1) = plage 'première colonne du tableau = plages
        tableauplage(i, 2) = table(i, 1) 'deuxième colonne = types de caractéristiques (ex: "G")
 
        'ajout de la plage dans 1 tableau à 2 colonnes et du nom du type de col concerné
 
    Next i
    AssociePlage = tableauplage
End Function

Je ne sais pas si vous voyez ce que j'essaie de faire.. Je suis désolée si je m'explique mal..
Pouvez-vous m'aider s'il vous plaît ?
Merciii d'avance