Bonjour à tous,
Je suis tombé sur une situation que je ne comprends pas du tout, ça ne me semble pas logique mais j'imagine que quelque chose m'échappe.. Est ce que vous auriez une explication ?
Désolé si je ne suis pas clair, j'essaye de faire au mieux mais je ne suis pas sur du tout de réussirPour expliquer la situation :
J'ai besoin d'initialiser et remplir deux tableaux en fonction de la condition suivante : Est ce que les cellules d'où l'on tire les valeurs sont en gras ou non ?
Si oui (les cellules en gras), on envoie ces valeurs de cellules dans un 1er tableau (TCharge)
Si non (les cellules pas en gras), on envoie ces valeurs de cellules dans un 2e tableau (Charge)
Et ce ne sont pas toujours les mêmes cellules qui sont en gras, donc ça change à chaque fois. Donc parfois l'un de mes tableaux est vide.
Le problème : Parfois le remplissage/vidage ne se fait pas au moment attendu et vraiment je ne comprend pas.
J'ai mis en vert dans l'image le cas où ce n'est pas logique.
Dans la 3e ligne de mon image, certaines cellules n'étaient pas en gras, et si j'active ma macro sans rien changer, c'est tout bon : Le 2e tableau est plein car rempli par les cellules pas en gras comme prévu, c'est OK
Mais si après je met les valeurs en gras et que j'active ma macro, alors mon test me dit que mon 2e tableau est toujours plein alors que je n'ai plus aucune cellule qui n'est pas gras. Et là je ne comprend pas du tout !
Surtout que si directement après je ré-active ma macro (alors que j'ai laissé en gras sans rien rechanger), cette fois mes tests considèrent bien que le 2e tableau est vide.
Voici le code correspondant : (P.S : je ne maitrise pas le test, c'est du copier coller pour le "On error resume Next")
Je me dis que c'est dû à ce que "devienne" les variables après l'execution de la macro (je ne sais pas du tout ce qui se passe). Elles sont enregistrées ? Perdues ? Réinitalisées ?
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 Dim TCharge() As Variant Dim Charge() As Variant Sub initialisation() '--------Le test--------- On Error Resume Next 'VarTab va prendre la valeur Empty si le tableau est vide. VarTab = UBound(Charge) On Error GoTo 0 If IsEmpty(VarTab) = True Then MsgBox ("1:vide" & TypeName(VarTab) & TypeName(Charge)) Else MsgBox ("1:plein" & TypeName(VarTab) & TypeName(Charge)) End If '--------Tente de remettre à zero les tables--------- Erase Charge, TCharge '--------Le même test pour voir le résultat--------- On Error Resume Next 'VarTab va prendre la valeur Empty si le tableau est vide. VarTab = UBound(Charge) On Error GoTo 0 If IsEmpty(VarTab) = True Then MsgBox ("1:vide" & TypeName(VarTab) & TypeName(Charge)) Else MsgBox ("1:plein" & TypeName(VarTab) & TypeName(Charge)) End If '--------La fonction qui sert à répartir entre le tableau TCharge et Charge si c'est en gras ou non --------- i = 0 a = 0 For Each objet In Range("TCharge") If objet.Font.Bold = True Then i = i + 1 ReDim Preserve TCharge(i) TCharge(i) = objet Else MsgBox ("la condition s'est activée") 'Pour tester a = a + 1 ReDim Preserve Charge(a) Charge(a) = objet End If Next '--------Le même test pour voir le résultat final--------- On Error Resume Next 'VarTab va prendre la valeur Empty si le tableau est vide. VarTab = UBound(Charge) On Error GoTo 0 If IsEmpty(VarTab) = True Then MsgBox ("1:vide" & TypeName(VarTab) & TypeName(Charge)) Else MsgBox ("1:plein" & TypeName(VarTab) & TypeName(Charge)) End If
Si quelqu'un peut m'éclairer, merci beaucoup d'avance parce que je sens que je rate un principe important là.. Merci !![]()
Partager