2 pièce(s) jointe(s)
Initialisation de variable array
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éussir :mrgreen: Pour 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.
Pièce jointe 150167
Voici le code correspondant : (P.S : je ne maitrise pas le test, c'est du copier coller pour le "On error resume Next")
Code:
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 |
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 ?
Si quelqu'un peut m'éclairer, merci beaucoup d'avance parce que je sens que je rate un principe important là.. Merci ! :)