[Catégorie modifiée .Net --> VBA] Double boucle Excel VBA 2003

manekimashimaro Messages postés 8 Date d'inscription vendredi 6 août 2010 Statut Membre Dernière intervention 31 janvier 2011 - 31 janv. 2011 à 11:44
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 31 janv. 2011 à 17:26
Bonjour à tous,

Tout d'abord je m'excuse si le thème n'est pas le bon, je ne sais jamais lequel choisir .
Je suis actuellement en train d'essayer de créer un petit programme me permettant de remplir automatiquement des cellules avec une formule, ce sous Excel VBA 2003.
Ce que je souhaite obtenir c'est :
- Vérifier si ma cellule (b;6) est non vide ;
- Si c'est le cas, mettre dans ma cellule (c;6) une formule ;
- Continuer jusqu'à ce que c = d ;
- Lorsque c = d, incrémenter a et reprendre depuis le début.

Il faut savoir que a, b, c, d sont des entiers liés entre eux.
Voici ce que ça donne :

Sub Interlin()
Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim e As Integer


a = 0
b = 2 + a * 5
c = b + 1
d = b + 5
e = 1

Do While Cells(b, 6).Value <> ""
Do While c <> d
Cells(c, 6).FormulaR1C1 = _
"=1"
Range("F" & c).Select
c = c + 1
Loop
If c = d Then
a = a + 1
End If
Loop
End Sub

L'erreur est : Dépassement de capacité.

Je pense qu'il doit y avoir des solutions plus simple mais je ne manipule pas très bien les boucles (et vba en général !!!)
J'espère avoir été claire et je vous remercie par avance.

Remarque : vous noterez que je n'ai pas mis de formule car je n'arrive tout simplement pas à trouver le bon code .

2 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
31 janv. 2011 à 14:35
Salut

Catégorie (mémorise-la, stp)

La prochaine fois que tu colles du code, utilise la coloration syntaxique (= 3ème icone à droite) afin de le rendre plus lisible (conservation de l'indentation, notamment)

Comme tu as dimensionné tes variables en Integer, les valeurs de ces variables ne peuvent pas dépasser 32767.
Pour aller plus loin (Plus de 1.400.000.000), utilise des Long

Sinon, côté programme, tu fais un Do-Loop avec, pour condition de sortie, que c=d (puisque tu reboucles tant qu'ils sont différents).
Il est donc inutile de faire un If derrière.

Le "Range("F" & c).Select" ne sert à rien (ralentir)

Modifier le contenu de a sert à quoi ?
Ton 2ème Do-Loop n'en tient pas compte.

Tes boucles n'ont pas de fin = danger
Pire, blocage de l'application.
Ajoute un DoEvents à l'intérieur de ton 2ème Do-Loop afin que Excel puisse stopper le programme si TU le demandes, sinon, tout ça va figer ...

--> Mettre des garde-fous :
If a > 4012 Then Exit Do
(4012 ou autre)

1er Do-Loop : Quand B6 va t-il se vider ?
Ton programme n'y touche pas ...
Si ta feuille doit se recalculer à chaque changement, il est impératif de mettre le DoEvents, voire de forcer le recalcul des cellules.

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
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
31 janv. 2011 à 17:26
PS : Tu ne peux pas appeler une variable 'e' car c'est déjà un mot clé du système (Exponentiel)
--> Gros risque de panne pas toujours facile à desseller.
D'ailleurs, cette variable ne sert à rien non plus (utilisée nulle part)
0
Rejoignez-nous