columnoffset et cellule fusionnée

  • Initiateur de la discussion Initiateur de la discussion apnart
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

apnart

XLDnaute Occasionnel
Bonjour,

J'ai un soucis sur lequel je tourne en rond, et je n'ai pas trouvé de réponse en faisant "recherche" ;-)

Voilà, je suis en train de faire une petite fonction qui va calculer la moyenne de notes pour un carnet scolaire (passionnant hein ?).

Dans l'excel joint vous verrez les matière (ex: Français), et ensuite, une suite de notes. Sous chaque note, 2 petits chiffre, le 1er = un coefficient, le 2ème = sur combient est la note (/10 ou /20)

Par exemple, la 1ère note est 9,5/20 coefficient 2

La fonction essaye de récupérer tout ça, pour faire une moyenne en bout de ligne. Pour l'instant ce n'est pas le cas, je fais juste un test sur cette 1ère note et j'affiche le résultat en U2.

J'y vais pas à pas, et je m'apperçoit que je n'arrive pas à avoir le "20" que j'ai appelé "Base" dans la macro, à cause de ma cellule où il y a la note, car elle est fusionnée... j'aimerais qu'elle le reste...

Avez-vous des idées ?

Merci d'avance.
Bruno.
 

Pièces jointes

Re : columnoffset et cellule fusionnée

Bonjour apnart

Les cellules fusionnées sont la plaie donc, tu les defusionnes toutes

Ensuite tu fais centrer sur plusieurs colonnes (Format cellule / alignement / Horisontal) en utilisant les deux colonnes

Avec le pinceau, tu dupliques ton format sur les autre cellules

Puis tu n'as pas besoin de fonction personnalisée

Pour la ligne 7 : en T7 tu mets :

=SOMMEPROD((C6:R6)*(C7:R7))/SOMMEPROD((C7:R7)*(MOD(COLONNE(C7:R7);2)=1)*DECALER(C7:R7;;1))*20

Correction : j'ai testé sur une ligne pleine, voici la formule sur ligne non pleine

=SOMMEPROD((C2:R2)*(C3:R3))/SOMMEPROD((C3:R3)*(MOD(COLONNE(C3:R3);2)=1)*(DECALER(C3:R3;-1;0)>0)*DECALER(C3:R3;;1))*20
 
Dernière édition:
Re : columnoffset et cellule fusionnée

Arghh... c'est ce que je craignais...

Ok j'ai donc centré sur les colonnes, mais mon excel est en anglais (pfff les boites américaines...), et je ne connais pas les équivalents.

Encore un coup de pouce pour m'expliquer la formule en détail ?
Question subsidiaire, quand il n'y a pas de note, ça ne fausse pas le calcul ?

Merci encore
 
Re : columnoffset et cellule fusionnée

Bonjour apnart, re wilfried

en partant de ta fonction, modifies-là comme ceci :

Code:
Function MoyenneNotes(Zne As Range) As Variant
Application.Volatile True
MoyenneNotes = 0
Dim Note As Variant
Dim Coef As Variant
Dim Base As Variant
Dim SommeNote As Variant
Dim SommeBase As Variant
Note = 0
Coef = 0
Base = 0
SommeNote = 0
SommeBase = 0
For i = 1 To Zne.Count - 1 Step 2
If Cells(Zne.Row, i + 2).Value <> "" Then
    Note = Cells(Zne.Row, i + 2).Value
    Coef = Cells(Zne.Row, i + 2).Offset(1, 0).Value
    Base = Cells(Zne.Row, i + 2).Offset(1, 0).Offset(0, 1).Value
    SommeNote = SommeNote + (Note * Coef)
    SommeBase = SommeBase + (Coef * Base)
End If
Next i
MoyenneNotes = (SommeNote / SommeBase) * 20
End Function
 
Re : columnoffset et cellule fusionnée

Ouups... désolé, c'est encore moi,

J'ai utilisé le code de bhbh, il marche très bien, j'ai donc poursuivi en ajoutant des colonnes pour un 2ème trimestre, avec la moyenne de ce 2ème trimestre à droite, et là... j'obtiens la même que pour le 1er trimestre, même si rien n'est entré...

Je pense que le pb vient du début de la boucle de "i", mais je ne trouve pas...

Le code était (enfin un peu condensé :

Code:
Function MoyenneNotes(Zne As Range) As Variant
Application.Volatile True

Dim Note, Coef, Base, SommeNote, SommeBase As Variant
Note = Coef = Base = SommeNote = SommeBase = MoyenneNotes = 0

For i = 1 To Zne.Count - 1 Step 2
If Cells(Zne.Row, i + 2).Value <> "" Then
    Note = Cells(Zne.Row, i + 2).Value
    Coef = Cells(Zne.Row, i + 2).Offset(1, 0).Value
    Base = Cells(Zne.Row, i + 2).Offset(1, 0).Offset(0, 1).Value
    SommeNote = SommeNote + (Note * Coef)
    SommeBase = SommeBase + (Coef * Base)
End If
Next i
If SommeBase = 0 Then
    MoyenneNotes = "-"
Else
    MoyenneNotes = (SommeNote / SommeBase) * 20
End If
End Function

des idées ?
 
Re : columnoffset et cellule fusionnée

Le pb semble bien venir du début de la boucle, car on prend "1", donc la 1ère colonne du tableau...

Code:
For i = 1 To Zne.Count - 1 Step 2

J'ai bien mis ce pb en évidence en ajoutant une colonne au début du tableau, du coup, plus de calcul :-(

il faudrait prendre comme point de départ la 1ère colonne de la sélection "Zne".

Des idées pour extraire les coordonnées du début de la zone ?
 
Re : columnoffset et cellule fusionnée

Re-, essaie le fichier joint

pour info, la fonction modifiée :

Code:
Function MoyenneNotes(Zne As Range) As Variant
Application.Volatile True
MoyenneNotes = 0
Dim Note As Variant
Dim Coef As Variant
Dim Base As Variant
Dim SommeNote As Variant
Dim SommeBase As Variant
Note = 0
Coef = 0
Base = 0
SommeNote = 0
SommeBase = 0
For i = (Zne.Column - 2) To (Zne.Column) + (Zne.Count - 4) Step 2
If Cells(Zne.Row, i + 2).Value <> "" Then
    Note = Cells(Zne.Row, i + 2).Value
    Coef = Cells(Zne.Row, i + 2).Offset(1, 0).Value
    Base = Cells(Zne.Row, i + 2).Offset(1, 0).Offset(0, 1).Value
    SommeNote = SommeNote + (Note * Coef)
    SommeBase = SommeBase + (Coef * Base)
End If
Next i
MoyenneNotes = (SommeNote / SommeBase) * 20
End Function
 

Pièces jointes

Re : columnoffset et cellule fusionnée

C'est tout bon, j'ai trouvé en même temps... pas le même code, mais il marche, même avec un 3ème trimestre que je viens d'ajouter...

Encore MERCI pour cette aide précieuse.

le code que j'ai mis :

Code:
Function MoyenneNotes(Zne As Range) As Variant
Application.Volatile True

Dim Note, Coef, Base, SommeNote, SommeBase As Variant
Note = Coef = Base = SommeNote = SommeBase = MoyenneNotes = 0

For i = Zne.Column To (Zne.Column + Zne.Count - 1) Step 2
If Cells(Zne.Row, i).Value <> "" Then
    Note = Cells(Zne.Row, i).Value
    Coef = Cells(Zne.Row, i).Offset(1, 0).Value
    Base = Cells(Zne.Row, i).Offset(1, 0).Offset(0, 1).Value
    SommeNote = SommeNote + (Note * Coef)
    SommeBase = SommeBase + (Coef * Base)
End If
Next i
If SommeBase = 0 Then
    MoyenneNotes = "-"
Else
    MoyenneNotes = (SommeNote / SommeBase) * 20
End If
End Function
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

  • Question Question
XL pour MAC Calcul de notes.
Réponses
5
Affichages
814
Réponses
18
Affichages
2 K
P
Réponses
4
Affichages
908
Polo94100
P
Retour