Menu

Méthode range de l'objet global a echoué

-
Bonjour,
je suis entrain de programmer sur vba en excel
je souhaite attribuer une mention pour chaque moyenne d'un étudiant, mais à chaque fois je reçois l'erreur méthode range de l'objet a échoué
voici le code que j'ai écris :
Sub mention_moyenne()
Dim i As Byte
Dim Plage_moyenne
Dim cellule As Range
Dim feuille As Worksheet
For Each feuille In Worksheets
feuille.Activate
Set Plage_moyenne = Range(Range("h3"), Range("b3").End(xlDown).Offset(0, 6))
Plage_moyenne.Formula = "=average(B3,D3,F3)"
For i = 2 To 8 Step 2
For Each cellule In Range(Range(Cells(3, i)), Range(Cells(3, i)).End(xlDown)).Cells
If cellule.Value = 20 Then
cellule.Offset(0, 1) = "excellent"
ElseIf cellule.Value < 20 And cellule.Value >= 15 Then
cellule.Offset(0, 1).Value = "très bien"
ElseIf cellule.Value < 15 And cellule.Value >= 12 Then
cellule.Offset(0, 1).Value = "bien"
ElseIf cellule.Value < 12 And cellule.Value >= 10 Then
cellule.Offset(0, 1).Value = "passable"
End If
Next cellule
Next i
Next feuille
End Sub


la ligne en jaune :
For Each cellule In Range(Range(Cells(3, i)), Range(Cells(3, i)).End(xlDown)).Cells


je vous en remercie infiniment d'avance


Configuration: Windows / Chrome 73.0.3683.103
Afficher la suite 

Votre réponse

1 réponse

Messages postés
14248
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
24 avril 2019
1333
0
Merci
Bonjour,

Y a quoi dans ceci:
Range(Cells(3, i))
f894009
Messages postés
14248
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
24 avril 2019
1333 -
Re,

Un fichier irait mieux qu'une image!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

suite:
Devrait aller:
Sub mention_moyenne()
    Dim i As Long
    Dim Plage_moyenne
    Dim cellule As Range
    Dim feuille As Worksheet
    
    For Each feuille In Worksheets
        feuille.Activate
        derlig = Range("b3").End(xlDown)
        Set Plage_moyenne = Range("H3:H" & derlig)
        Plage_moyenne.Formula = "=average(B3,D3,F3)"
        For i = 2 To 8 Step 2
            For Each cellule In Range(Cells(3, i), Cells(derlig, i))
                If cellule.Value = 20 Then
                    cellule.Offset(0, 1) = "excellent"
                ElseIf cellule.Value < 20 And cellule.Value >= 15 Then
                    cellule.Offset(0, 1).Value = "tr?s bien"
                ElseIf cellule.Value < 15 And cellule.Value >= 12 Then
                    cellule.Offset(0, 1).Value = "bien"
                ElseIf cellule.Value < 12 And cellule.Value >= 10 Then
                    cellule.Offset(0, 1).Value = "passable"
                End If
            Next cellule
        Next i
    Next feuille
End Sub
ahmed012
Messages postés
3
Date d'inscription
samedi 6 avril 2019
Statut
Membre
Dernière intervention
7 avril 2019
-
re,
malheureusement ça n'a pas marché,
voici le lien vers le fichier excel : https://www.cjoint.com/c/IDgs5fZXBak
merci
f894009
Messages postés
14248
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
24 avril 2019
1333 -
Bonjour,

Manquait juste
 .row
pour derlig et vous n'avez meme pas essaye de voir ce qui allait pas!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Vu les codes que vous avez ecrits devait etre facile pourtant……..

fichier modifie: https://mon-partage.fr/f/6oxvToiV/

votre ligne corrigee pour la plage
Set Plage_moyenne = Range(Cells(3, 8), Cells(Range("A3").End(xlDown).Offset(0, 8).Row, 8))

Y avait plus simple (code que j'ai propose)
f894009
Messages postés
14248
Date d'inscription
dimanche 25 novembre 2007
Statut
Membre
Dernière intervention
24 avril 2019
1333 -
Re,

Pour derlig, il vaudrait mieux prendre la colonne A ald B
ahmed012
Messages postés
3
Date d'inscription
samedi 6 avril 2019
Statut
Membre
Dernière intervention
7 avril 2019
-
re,
d'abord je vous remercie, et puis ma faute dès le départ c'est que j'ai confondu le Range fallait pas rajouter dedans un autre range pour cells, ceci dit j'ai remplacé cette ligne dans mon code initial :
For Each cellule In Range(Range(Cells(3, i)), Range(Cells(3, i)).End(xlDown)).Cells

par cette ligne :
For Each cellule In Range(Cells(3, i), Cells(3, i).End(xlDown)).Cells
Commenter la réponse de f894009