Erreur dans le code : Boucle sans do

Résolu/Fermé
roupille008 - 18 févr. 2013 à 12:37
roupille008 Messages postés 33 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 4 avril 2013 - 18 févr. 2013 à 17:56
Bonjour tout le monde,

Pour les précédents problèmes je n'avais qu'à rechercher sur google et je trouvais comment faire mais il semble que pour ce point là je n'y arrive pas.

Contexte:
J'ai un tableau (chaque colonne correspond à un type de mesure et chaque ligne au point de mesure). Ce tableau n'est pas complet, il manque des mesures (le matos était cassé ou autre problème).
Objectif:
Quand il ne manque pas toutes les mesures, la valeur manquante se voit affecté la moyenne des valeurs présentes.
Quand toutes les valeurs sont manquantes, les cellules sont notées " manquantes"

Seulement quand je veut faire tourner mon bazarre, il me renvoit le message suivant:
"Erreur de compilation : boucle sans Do"

Voilà, ca fait des heures que j'y suis et je comprends pas.

Voici le code en question, Merci d'avance

Sub Combler_les_trous()

Dim a As Integer
Dim b As Integer
Dim c As Integer
Dim d As Integer
Dim e As Integer
Dim f As Integer
Dim g As Integer
Dim h As Integer

a = 3
b = 3
c = 4
d = 5
e = 6
f = 7
g = 8
h = 9

'a est la ligne de la première cellule d'un point
'b est la colonne concernée

Do While b < 27

Do While a < 123

'il faut vérifier que l'on a tous les jours de la semaine

If Cells(a, 1) = Cells(g, 1) Then

'si toutes les cellules sont vides elles notées manquantes
If Cells(a, b) = Cells(c, b) = Cells(d, b) = Cells(e, b) = Cells(f, b) = Cells(g, b) = Cells(h, b) = "" Then Worksheets("Feuil1").Range(Cells(a, b), Cells(c, b), Cells(d, b), Cells(e, b), Cells(f, b), Cells(g, b), Cells(h, b)).Value = "manquante"

'chaque cellule se voit affecté de la moyenne des six autres
If Cells(a, b) = "" Then Cells(a, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b), Cells(e, b), Cells(f, b), Cells(g, b), Cells(h, b))
If Cells(c, b) = 0 Then Cells(c, b) = WorksheetFunction.Average(Cells(a, b), Cells(d, b), Cells(e, b), Cells(f, b), Cells(g, b), Cells(h, b))
If Cells(d, b) = 0 Then Cells(d, b) = WorksheetFunction.Average(Cells(c, b), Cells(a, b), Cells(e, b), Cells(f, b), Cells(g, b), Cells(h, b))
If Cells(e, b) = 0 Then Cells(e, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b), Cells(a, b), Cells(f, b), Cells(g, b), Cells(h, b))
If Cells(f, b) = 0 Then Cells(f, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b), Cells(e, b), Cells(a, b), Cells(g, b), Cells(h, b))
If Cells(g, b) = 0 Then Cells(g, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b), Cells(e, b), Cells(f, b), Cells(a, b), Cells(h, b))
If Cells(h, b) = 0 Then Cells(h, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b), Cells(e, b), Cells(f, b), Cells(g, b), Cells(a, b))
'on change de point
a = 7 + a
c = 7 + c
d = 7 + d
e = 7 + e
f = 7 + f
g = 7 + g
h = 7 + h

'si il manque 1 jour

ElseIf Cells(a, 1) = Cells(g, 1) Then

'si toutes les cellules sont vides elles notées manquantes
If Cells(a, b) = Cells(c, b) = Cells(d, b) = Cells(e, b) = Cells(f, b) = Cells(g, b) = "" Then Worksheets("Feuil1").Range(Cells(a, b), Cells(c, b), Cells(d, b), Cells(e, b), Cells(f, b), Cells(g, b)).Value = "manquante"

'chaque cellule se voit affecté de la moyenne des cinq autres
If Cells(a, b) = "" Then Cells(a, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b), Cells(e, b), Cells(f, b), Cells(g, b))
If Cells(c, b) = 0 Then Cells(c, b) = WorksheetFunction.Average(Cells(a, b), Cells(d, b), Cells(e, b), Cells(f, b), Cells(g, b))
If Cells(d, b) = 0 Then Cells(d, b) = WorksheetFunction.Average(Cells(c, b), Cells(a, b), Cells(e, b), Cells(f, b), Cells(g, b))
If Cells(e, b) = 0 Then Cells(e, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b), Cells(a, b), Cells(f, b), Cells(g, b))
If Cells(f, b) = 0 Then Cells(f, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b), Cells(e, b), Cells(a, b), Cells(g, b))
If Cells(g, b) = 0 Then Cells(g, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b), Cells(e, b), Cells(f, b), Cells(a, b))
'on change de point
a = 6 + a
c = 6 + c
d = 6 + d
e = 6 + e
f = 6 + f
g = 6 + g
h = 6 + h

'si il manque 2 jours

ElseIf Cells(a, 1) = Cells(f, 1) Then

'si toutes les cellules sont vides elles notées manquantes
If Cells(a, b) = Cells(c, b) = Cells(d, b) = Cells(e, b) = Cells(f, b) = "" Then Worksheets("Feuil1").Range(Cells(a, b), Cells(c, b), Cells(d, b), Cells(e, b), Cells(f, b)).Value = "manquante"

'chaque cellule se voit affecté de la moyenne des quatre autres
If Cells(a, b) = "" Then Cells(a, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b), Cells(e, b), Cells(f, b))
If Cells(c, b) = 0 Then Cells(c, b) = WorksheetFunction.Average(Cells(a, b), Cells(d, b), Cells(e, b), Cells(f, b))
If Cells(d, b) = 0 Then Cells(d, b) = WorksheetFunction.Average(Cells(c, b), Cells(a, b), Cells(e, b), Cells(f, b))
If Cells(e, b) = 0 Then Cells(e, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b), Cells(a, b), Cells(f, b))
If Cells(f, b) = 0 Then Cells(f, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b), Cells(e, b), Cells(a, b))
'on change de point
a = 5 + a
c = 5 + c
d = 5 + d
e = 5 + e
f = 5 + f
g = 5 + g
h = 5 + h

'si il manque 3 jours

ElseIf Cells(a, 1) = Cells(e, 1) Then

'si toutes les cellules sont vides elles notées manquantes
If Cells(a, b) = Cells(c, b) = Cells(d, b) = Cells(e, b) = "" Then Worksheets("Feuil1").Range(Cells(a, b), Cells(c, b), Cells(d, b), Cells(e, b)).Value = "manquante"

'chaque cellule se voit affecté de la moyenne des trois autres
If Cells(a, b) = "" Then Cells(a, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b), Cells(e, b))
If Cells(c, b) = 0 Then Cells(c, b) = WorksheetFunction.Average(Cells(a, b), Cells(d, b), Cells(e, b))
If Cells(d, b) = 0 Then Cells(d, b) = WorksheetFunction.Average(Cells(c, b), Cells(a, b), Cells(e, b))
If Cells(e, b) = 0 Then Cells(e, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b), Cells(a, b))
'on change de point
a = 4 + a
c = 4 + c
d = 4 + d
e = 4 + e
f = 4 + f
g = 4 + g
h = 4 + h

'si il manque 4 jours

ElseIf Cells(a, 1) = Cells(d, 1) Then Worksheets("Feuil1").Range(Cells(a, b), Cells(c, b), Cells(d, b)).Value = "manquante"


'si toutes les cellules sont vides elles notées manquantes
If Cells(a, b) = Cells(c, b) = Cells(d, b) = "" Then

'chaque cellule se voit affecté de la moyenne des deux autres
If Cells(a, b) = "" Then Cells(a, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b))
If Cells(c, b) = 0 Then Cells(c, b) = WorksheetFunction.Average(Cells(a, b), Cells(d, b))
If Cells(d, b) = 0 Then Cells(d, b) = WorksheetFunction.Average(Cells(c, b), Cells(a, b))
'on change de point
a = 3 + a
c = 3 + c
d = 3 + d
e = 3 + e
f = 3 + f
g = 3 + g
h = 3 + h

'si il manque 5 jours

ElseIf Cells(a, 1) = Cells(c, 1) Then

'si toutes les cellules sont vides elles notées manquantes
If Cells(a, b) = Cells(c, b) = "" Then Worksheets("Feuil1").Range(Cells(a, b), Cells(c, b), Cells(c, b)).Value = "manquante"

'chaque cellule se voit affecté de la valeur de l'autre
If Cells(a, b) = "" Then Cells(a, b) = Cells(c, b)
If Cells(c, b) = 0 Then Cells(c, b) = Cells(a, b)
'on change de point
a = 2 + a
c = 2 + c
d = 2 + d
e = 2 + e
f = 2 + f
g = 2 + g
h = 2 + h

'si il manque 7 jours

Else:
If Cells(a, b) = "" Then Cells(a, b) = "manquante"

End If


Loop

'on change de colonne
b = b + 1
a = 3
c = 4
d = 5
e = 6
f = 7
g = 8
h = 9

Loop

End Sub
A voir également:

3 réponses

lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
18 févr. 2013 à 14:52
Bonjour,
Sans considération pour ton code !!
Il manque un End If
        'si il manque 4 jours
        ElseIf Cells(a, 1) = Cells(d, 1) Then Worksheets("Feuil1").Range(Cells(a, b), Cells(c, b), Cells(d, b)).Value = "manquante"
            'si toutes les cellules sont vides elles notées manquantes
            If Cells(a, b) = Cells(c, b) = Cells(d, b) = "" Then
            
                'chaque cellule se voit affecté de la moyenne des deux autres
                If Cells(a, b) = "" Then Cells(a, b) = WorksheetFunction.Average(Cells(c, b), Cells(d, b))
                If Cells(c, b) = 0 Then Cells(c, b) = WorksheetFunction.Average(Cells(a, b), Cells(d, b))
                If Cells(d, b) = 0 Then Cells(d, b) = WorksheetFunction.Average(Cells(c, b), Cells(a, b))
                'on change de point
                a = 3 + a
                c = 3 + c
                d = 3 + d
                e = 3 + e
                f = 3 + f
                g = 3 + g
                h = 3 + h
'------------------------------------------------------
            End If
'------------------------------------------------------

A+
1
roupille008 Messages postés 33 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 4 avril 2013
Modifié par roupille008 le 18/02/2013 à 16:11
Merci ça m'a un peu débloqué, par contre ça ne me donne toujours pas ce que je veux.

J'aimerais lui dire ça:

Si A=B=C=D=0 alors A=B=C=D="manquante"

Sinon
Si A= 0 alors A = moyenne de (B,C,D)
Si B= 0 alors B = moyenne de (A,C,D)
Si D= 0 alors D= moyenne de (A,B,C)

Pour l'instant j'ai écrit ça comme ca:
If A=0 and B= 0 and C=0 and D =0 than Range(A,B,C,D)="manquante"
If A= 0 Then A = moyenne de (B,C,D)
If B= 0 Then B = moyenne de (A,C,D)
If D= 0 Then D= moyenne de (A,B,C)

End if

Mais il me donne l'erreur suivante :
erreur d'exécution 450:
Nombre d'argument incorrect ou affectation de propriété incorrecte

et le débogueur me surligne la ligne avec les and.

Voilà, merci
0
lermite222 Messages postés 8702 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
18 févr. 2013 à 17:00
Pour question un..
Hé oui, c'est pas toujours aussi simple qu'ont crois..
         If Cells(a, b) = "" And (Cells(a, b) = Cells(c, b) = Cells(d, b) = Cells(e, b)) Then
            Range(Cells(a, b).Address, Cells(c, b).Address) = "Manquant"
        End If


Si autre question(s) tu dis
A+
0
roupille008 Messages postés 33 Date d'inscription lundi 18 février 2013 Statut Membre Dernière intervention 4 avril 2013
18 févr. 2013 à 17:56
Merci pour tes réponses,
maintenant mon code marche beaucoup mieux.
pour info, j'ai écrit la ligne avec les and comme ça:
If Application.WorksheetFunction.And(Cells(a, B) = "", Cells(c, B) = "", Cells(d, B) = "", Cells(e, B) = "", Cells(f, B) = "", Cells(g, B) = "", Cells(h, B) = 0) Then
Worksheets("Feuil1").Range(Cells(a, B), Cells(c, B), Cells(d, B), Cells(e, B), Cells(f, B), Cells(g, B), Cells(h, B)).Value = "manquante"

Ca à l'air de marcher pour l'instant. (enfin, ya d'autres erreurs ans mon script mais ca c'est une autre histoire)

Merci pour tes réponses.

PS: Je tiens à dire un grand merci aux personnes qui fournissent des réponses claires et efficaces sur ce site. (et toujours de façon sympa) Ca fait pas mal de fois que je vois ma situation débloqué grace à cette communauté. Ca fait plaisir.
0