[VBA] Valeur de variable nulle dans boucle For

FloPomPom

XLDnaute Nouveau
Bonjour à tous,

peut être n'ai je pas bien su chercher... d'habitude je fini toujours pas trouver.

Premièrement, est-ce correct de déclarer plusieurs variables de la manière suivante :
Code:
Dim v(4) As String

à la place de :

Code:
Dim v1 As String
Dim v2 As String
Dim v3 As String
Dim v4 As String



Sinon, ma question principale est d'élucider ceci :
Si je déclare quatre variables et que je j'affecte la valeur d'une des variables à une case, pas de problème :
Code:
Sub TEST()
Dim v(4) As String

v1 = "2312"
v2 = ""
v3 = "rien"
v4 = "AZ12"

Sheets(1).Range("A" & i) = v3

End Sub

Mais si je cherche à affecté chaque valeur de variable à une nouvelle cellule, excel semble ne comprend pas. Les valeurs sont nulles !

Code:
Sub TEST()
Dim v(4) As String

v1 = "2312"
v2 = ""
v3 = "rien"
v4 = "AZ12"

For i = 1 To 4
Sheets(1).Range("A" & i) = vi
Next i

End Sub



De même avec des valeurs Boolean, toutes les variables sont interprétées comme False après un For !
Code:
Sub Pouet()
Dim v_1 As Boolean
Dim v_2 As Boolean
Dim v_3 As Boolean
Dim DerLigne As Long
Sheets("Chronologie").Select
DerLigne = Range("A1000").End(xlUp).Row
Sheets("Prise contact").Select

v_1 = Sheets("Prise contact").Range("B2").Value = Sheets("Prise contact").Range("B1").Value
v_2 = Sheets("Chronologie").Range("B" & DerLigne).Value = Sheets("Prise contact").Range("B2").Value 
v_3 = Sheets("Chronologie").Range("C" & DerLigne).Value = Sheets("Prise contact").Range("K2").Value


If v_1 = True Then
Sheets("Prise contact").Range("V1") = "vrai"
Else: Sheets("Prise contact").Range("V1") = "faux"
End If

If v_2 = True Then
Sheets("Prise contact").Range("V2") = "vrai"
Else: Sheets("Prise contact").Range("V2") = "faux"
End If

If v_3 = True Then
Sheets("Prise contact").Range("V3") = "vrai"
Else: Sheets("Prise contact").Range("V3") = "faux"
End If

For i = 1 To 3
If v_i = True Then
Sheets("Prise contact").Range("w" & i) = "vrai" & i
Else: Sheets("Prise contact").Range("w" & i) = "faux"
End If
Next i

End Sub

Cette macro donne dans mon cas :
Faux Vrai Faux pour la colonne V
et Faux Faux Faux pour la colonne W !

Une idée ?

Merci d'avance !

FloPomPom
 

Dranreb

XLDnaute Barbatruc
Re : [VBA] Valeur de variable nulle dans boucle For

Bonsoir.

Je préfère spécifier toujours la borne de départ du tableau :
VB:
Dim v(1 To 4) As String
Pour accéder à un de ses éléments, toujours spécifier l'indice entre parenthèses :
VB:
v(1) = "2312"
v(2) = ""
v(3) = "rien"
v(4) = "AZ12"

For i = 1 To 4
Sheets(1).Range("A" & i) = v(i)
Next i
 

FloPomPom

XLDnaute Nouveau
Re : [VBA] Valeur de variable nulle dans boucle For

Merci beaucoup pour la solution, ça me parait logique maintenant que je l'ai sous les yeux !!

Je n'espérais pas une réponse aussi rapidement, j'ai donc posté mon problème ailleurs (developpez) ou j'ai obtenu quelques précisions bien utiles :
Bonjour,
Si tu utilises ue variable tableau, il faut l'utiliser comme ceci
Code:
Sub TEST()
 Dim v(4) As String, i As Long
 v(1) = "2312"
 v(2) = ""
 v(3) = "rien"
 v(4) = "AZ12"
 
 For i = 1 To 4
  Sheets(1).Range("A" & i) = v(i)
 Next i
End Sub
Attention que v(0) existe et est vide dans cet exemple.
Si tu souhaites utiliser la variable de 1 à 4 il faut la déclarer comme ceci v(1 to 4) ou placer Option Base 1 en tête de module.
Une autre façon d'assigner une valeur à une variable tableau est la fonction Array
Exemple
Code:
Sub TEST()
 Dim v  As Variant, i As Long
 v = Array("2312", "", "rien", "az12")
 For i = 0 To 3
  Sheets(1).Range("A" & i + 1) = v(i)
 Next i
End Sub

Le sujet est tellement vaste que je te conseille la lecture de ces deux tutoriels Utiliser les variables tableaux en VBA Excel et Conceptualisation des variables tableau en VBA et Application à l'optimisation du code sous Excel


Merci encore !

FloPomPom
 

Staple1600

XLDnaute Barbatruc
Re : [VBA] Valeur de variable nulle dans boucle For

Bonjour à tous

Après les précisions, une variante syntaxique, histoire de varier les plaisirs ;)

Code:
Sub c()
Dim v(1 To 4) As String
v(1) = "2312"
v(2) = ""
v(3) = "rien"
v(4) = "AZ12"
Sheets(1).Cells(1, 1).Resize(UBound(v)) = Application.Transpose(v)
End Sub
 

Dranreb

XLDnaute Barbatruc
Re : [VBA] Valeur de variable nulle dans boucle For

Bonjour Staple

Je l'avais à l'esprit, évidemment, mais je me contentais de répondre aux questions.
Donc, profiter toujours du fait qu'on utilise des tableaux pour charger/décharger des plages entières de cellules. Non: utiliser plutôt toujours des tableaux (à 2 dimensions) pour pouvoir le faire !
 

Statistiques des forums

Discussions
311 721
Messages
2 081 927
Membres
101 842
dernier inscrit
seb0390