Problème de mise à zéro de variables dans une boucle

Résolu
titeuf136 Messages postés 91 Date d'inscription vendredi 15 janvier 2010 Statut Membre Dernière intervention 19 octobre 2012 - 22 avril 2010 à 17:15
titeuf136 Messages postés 91 Date d'inscription vendredi 15 janvier 2010 Statut Membre Dernière intervention 19 octobre 2012 - 23 avril 2010 à 12:30
Bonjour,

je souhaite exécuter la procédure suivante.

Le problème est que je ne parviens pas à réinitialiser les variables, ainsi,lorsque je reboucle sur "m" le contenu de "tboextract60" n'est pas réinitialisé. Comment faire ?

merci


sub essai ()
Application.ScreenUpdating = False
Dim tboextract60 As Variant
Dim Unseul60 As New Collection
Dim strElt60 As Variant
Dim i
Dim j
j = 2
k = 0
for m = 1 to 10
For n = 2 To 200
    If Cells(n, m) <> "" Then
    suite= suite & Cells(n, m) & ";"
    End If
Next n
tboextract60 = Split(suite, ";")
On Error Resume Next
For i = 0 To UBound(tboextract60)
   Unseul60.Add tboextract60(i), tboextract60(i)
Next i
For Each strElt60 In Unseul60
j = j + 1
Cells(k, j) = strElt60
Next
On Error GoTo 0
k=k+1
next m
Application.ScreenUpdating = True
End Sub

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 avril 2010 à 12:25
Ok
Bah, sur le même principe : Tu ne vides pas ta collection avant de la remplir.
Normal qu'elle garde les infos !

Insère ça après le Resume Next
' Nettoyage
For r = Unseul60.Count To 1 Step -1
    Unseul60.Remove 1
Next
sans oublier ça, en tête de procédure
Dim r As Long

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
3
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
22 avril 2010 à 20:02
Salut

Pas clair.

"lorsque je reboucle sur "m" le contenu de "tboextract60" n'est pas réinitialisé"
Pourquoi voudrais-tu qu'il soit réinitialisé ? Quelle instruction as-tu utilisé pour le faire ?
Je n'en vois pas.

tboextract60 est un tableau (1) issu de ta variable suite.
suite n'est pas dimensionnée (détail).
Si tu veux que cette variable soit vide quand tu commences une itération, il te suffit de la vider - Lapalisse (1470-1525)

Ceci, placé après le For m, devrait suffire :
suite = ""

(1) de String, pas de Variant, quelle horreur ces Variant

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
titeuf136 Messages postés 91 Date d'inscription vendredi 15 janvier 2010 Statut Membre Dernière intervention 19 octobre 2012 1
22 avril 2010 à 22:23
J'avais bien essayé suite="", mais sans succès

prenons l'exemple suivant:

les trois premières colonnes sont composées de:

1) lundi;lundi;mardi;mardi;jeudi;jeudi;jeudi
2) mercredi;mercredi;vendredi;vendredi
3) lundi;lundi;lundi;samedi;samedi;dimanche

je souhaite afficher dans les colonnes m+5
1) lundi;mardi;jeudi
2) mercredi;vendredi
3 lundi;samedi;dimanche

l'execution du code ci-dessous fonctionne pour une colonne. Lorsque je reboucle sur les colonnes suivantes j'obtiens
1) lundi;mardi;jeudi
2) lundi;mardi;jeudi; ;mercredi;vendredi
3 lundi;mardi;jeudi; ;mercredi;vendredi; ;samedi;dimanche


Sub essai()
Application.ScreenUpdating = False
Dim tboextract60 As Variant
Dim Unseul60 As New Collection
Dim strElt60 As Variant
Dim i
Dim j
For m = 1 To 3
j = 0
suite = ""
For n = 1 To 10
    If Cells(n, m) <> "" Then
    suite = suite & Cells(n, m) & ";"
    End If
Next n
tboextract60 = Split(suite, ";")
On Error Resume Next
For i = 0 To UBound(tboextract60)
   Unseul60.Add tboextract60(i), tboextract60(i)
Next i
For Each strElt60 In Unseul60
j = j + 1
Cells(j, m + 5) = strElt60
Next
On Error GoTo 0
Next m
Application.ScreenUpdating = True
End Sub
0
titeuf136 Messages postés 91 Date d'inscription vendredi 15 janvier 2010 Statut Membre Dernière intervention 19 octobre 2012 1
23 avril 2010 à 12:30
OK, merci pour la réponse ça fonctionne TB

Bonne journée !
0
Rejoignez-nous