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 :
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 :
La feuille Excel GEST_CARAC_TABLES ressemble à ça :
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
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
Partager