cerhu > microsoft.* > microsoft.excel

rdu13 (14/03/2019, 19h36)
Bonjour,
J'ai un classeur Excel avec de nombreux onglets et un récap.
J'ai réussi à rapatrier dans le récap le nom, le prénom situés dans chaqu
feuille dans les mêmes cellules avec la fonction Indirect mais je dois rapatrie
le total de la colonne K de chaque feuille du classeur qui n'est pas sur la mêm
ligne selon la feuille et ce en fonction du nom inscrit sur le récap.
Onglet récap =
Colonne A = nom de la feuille rapatrié avec la macro suivante :
Sub Snamelist()
Dim i As Integer

Range("a4").Select

For i = 1 To Sheets.Count
ActiveCell.Value = Sheets(i).Name
ActiveCell.Offset(1, 0).Select
Next i

End Sub

Colonne B = nom rapatrié avec formule indirect
Colonne C = prénom rapatrié avec formule indirect
Colonne D = montant total à rapatrier situé dans la plage de cellule K5:K100 d
chaque feuille.

Merci par avance pour votre aide

Bien cordialement
MichD (14/03/2019, 22h08)
Le 2019-03-14 à 13:36, rdu13 a écrit :
[..]
> Colonne B = nom rapatrié avec formule indirect
> Colonne C = prénom rapatrié avec formule indirect
> Colonne D = montant total à rapatrier situé dans la plage de cellule K5:K100 de
> chaque feuille.
> Merci par avance pour votre aide
> Bien cordialement


Bonjour,

Si tu veux faire cela en VBA, copie cette fonction personnalisée dans un
MODULE STANDARD.

Dans la cellule de la feuille "résultat" où tu veux obtenir la somme de
la plage K5:K100 de chacune des feuilles du classeur excepté la feuille

"K5:K100" = La plage de cellule à additionner sur chaque feuille
"Résultat", inscris ceci :

Dans la cellle devant contenir le résultat, tu inscris :
=SomPlg("K5:K100";"Résultat")

'-------------------------
Function SomPlg(Plage As String, Feuille As String) As Double
Dim Sh As Worksheet, Adr As String

For Each Sh In ThisWorkbook.Worksheets
If UCase(Sh.Name) <> UCase(Feuille) Then
SomPlg = SomPlg + Application.Sum(Sh.Range(Plage))
End If
Next

End Function
'-------------------------

MichD
rdu13 (15/03/2019, 07h04)
Le jeudi 14 Mars 2019 à 21:08 par MichD :
[..]
> For Each Sh In ThisWorkbook.Worksheets
> If UCase(Sh.Name) <> UCase(Feuille) Then
> SomPlg = SomPlg + Application.Sum(Sh.Range(Plage))
> End If
> Next
> End Function
> '-------------------------
> MichD

Bonjour MichD et merci pour ta réponse.
Le problème est que sur chaque feuille j'ai un total dans la colonne K qui d
coup va être pris en compte avec ta solution et j'aurai donc un résultat erroné

Le résultat en question est positionné par exemple en K10, K15, K11 ... selon l
nombre de ligne de chaque tableau.
L'idéal aurait été de pouvoir combiner les fonctions INDIRECT et RECHERCHE(9^9
mais pas réussi....
Petite précision je suis susceptible de rajouter des feuilles dans le classeur.
En fait c'est un relevé de frais de déplacement, un onglet par agent ayan
bénéficié d'un remboursement et un recap. Comme j'ai beaucoup d'onglets et qu
j'en rajoute régulièrement je cherche une solution pour ne pas avoir à aller
partir du récap chercher la cellule de chaque feuille pour renvoyer le total d
chaque onglet. Pour les données telles que noms prenoms... pas de soucis puisqu
les onglets ont la même structure et que ces données sont dans les même
cellules sur chaque onglet (avecINDIRECT). Ce qui diffère c'est le nombre d
lignes de chaque onglet et du coup le total de chaque onglet de la colonne K n'
jamais la même référence de cellule.
MichD (15/03/2019, 12h36)
Place cette fonction dans un module standard :
'--------------------------------
Function SomPlg(Colonne As String, Ligne As Long, _
Feuille As String) As Double
Dim Sh As Worksheet

For Each Sh In ThisWorkbook.Worksheets
With Sh
If UCase(Sh.Name) <> UCase(Feuille) Then
SomPlg = SomPlg + _
Application.Sum(.Range(Colonne & _
Ligne & ":" & Colonne & .Range(Colonne & _
.Rows.Count).End(xlUp).Row - 1))
End If
End With
Next

End Function
'--------------------------------

Dans la cellule de ton choix dans la feuille résultat :

=SomPlg("K";5;"Résultat")

K = Lettre de la colonne
5 = La ligne de la première cellule des données à additionner
Résultat = "Nom de l'onglet de la feuille où tu veux afficher le
résultat

J'ai supposé que la somme dans chaque feuille était la dernière ligne de
la colonne directement sous les données dans chaque feuille.

Tu peux ajouter le nombre de feuilles que tu veux sans aucun problème.

Afin que la fonction se mette à jour automatiquement, dans le module de
la feuille où sont les résultats, ajoute ceci. À chaque fois que tu vas
activer la feuille résultat, toutes les formules vont se mettre à jour.
'------------------
Private Sub Worksheet_Activate()
Me.Calculate
End Sub
'------------------

MichD
rdu13 (16/03/2019, 09h43)
Le vendredi 15 Mars 2019 à 11:36 par MichD :
[..]
> fois que tu vas
> activer la feuille résultat, toutes les formules vont se mettre à
> jour.
> '------------------
> Private Sub Worksheet_Activate()
> Me.Calculate
> End Sub
> '------------------
> MichD

Ta solution me renvoie dans l'onglet Résultat le total cumulé de toutes le
feuilles.
La feuille Résultat se présente en colonne comme suit :
Colonne A = liste des noms d'onglets (mis à jour par macro quand j'insère u
nouvel onglet pour un nouvel agent)
Colonne B = N° agent (alimenté par formule indirect)
Colonne C = Nom de l'agent (alimenté par formule indirect)
Colonne D = Prénom (alimenté par formule indirect)
Colonne E = date (alimenté par formule indirect)
Colonne F = montant total des frais à soumettre à cotisations (c'est le total d
chaque onglet qui est dans la colonne K à rapatrier en fonction de la colonne
de l'onglet Résultat)
Il y a une ligne par agent dans l'onglet Résultat
Je te remercie énormément pour le temps passé
Bien cordialement
MichD (16/03/2019, 12h35)
Publie ton classeur en utilisant des données fictives afin de voir la
structure de ton classeur. Dis-nous ce que tu veux obtenir dans la
feuille "résultat" (donne le résultat attendu à partir de ton exemple).
Cela prend 4 à 5 lignes de données sur quelques feuilles.

Pour ce faire, utilise le site internet "Cjoint.com". Tu obtiendras une
adresse que tu nous retournes ici.

MichD
MichD (16/03/2019, 12h39)
> Ta solution me renvoie dans l'onglet Résultat le total cumulé de toutes les
> feuilles.


C'est ce dont j'ai compris et c'est ce à quoi était destinée la fonction
personnalisée.

MichD
rdu13 (16/03/2019, 16h17)
Le samedi 16 Mars 2019 à 11:39 par MichD :
>> Ta solution me renvoie dans l'onglet Résultat le total cumulé de
>> toutes les
>> feuilles.

> C'est ce dont j'ai compris et c'est ce à quoi était
> destinée la fonction
> personnalisée.
> MichD voilà le fichier :


[..]

Bien cordialement
Jacquouille (16/03/2019, 19h09)
Bonjour

Et si on mettait la somme de ce qu'il y a dans l'assiette en K1 de chaque
feuille, puis la somme des K1 dans la feuille "Résultat"?

Jacques
" Le vin est au repas ce que le parfum est à la femme."
..
"rdu13" a écrit dans le message de groupe de discussion :
feydnQqAl7n0mBDBnZ2dnUU798zNnZ2d...

Le samedi 16 Mars 2019 à 11:39 par MichD :
>> Ta solution me renvoie dans l'onglet Résultat le total cumulé de
>> toutes les
>> feuilles.

> C'est ce dont j'ai compris et c'est ce à quoi était
> destinée la fonction
> personnalisée.
> MichD voilà le fichier :


[..]

Bien cordialement
MichD (16/03/2019, 19h49)
En supposant que la liste de noms de la colonne C suit l'ordre des
onglets des feuilles, cette formule est suffisante en F4. Il ne te reste
plus qu'à la recopier sur l'ensemble de la colonne.

=SIERREUR(RECHERCHE(9*9;INDIRECT(C4&"!K:K"));"")

Voici ton fichier avec la formule intégrée.
[..]

MichD
rdu13 (16/03/2019, 19h53)
Le samedi 16 Mars 2019 à 18:09 par Jacquouille :
> Bonjour
> Et si on mettait la somme de ce qu'il y a dans l'assiette en K1 de chaque
> feuille, puis la somme des K1 dans la feuille "Résultat"?
> Jacques
> " Le vin est au repas ce que le parfum est à la femme."
> .
> "rdu13" a écrit dans le message de groupe de discussion :
> voilà le fichier :
> [..]
> Bien cordialement

Jacquouille tu as trouvé la solution :
En mettant un sous total en K4 il met bien le total de la colonne K sans prendr
le sous total en fin de colonne K.
Ensuite avec la formule Indirect dans la feuille résultat ça marche.
Je suis deb j'aurais dû y penser...

Un grand merci à tous les deux, un excellent week end

Bonne soirée
rdu13 (17/03/2019, 08h30)
Le samedi 16 Mars 2019 à 18:49 par MichD :
> En supposant que la liste de noms de la colonne C suit l'ordre des
> onglets des feuilles, cette formule est suffisante en F4. Il ne te reste
> plus qu'à la recopier sur l'ensemble de la colonne.
> =SIERREUR(RECHERCHE(9*9;INDIRECT(C4&"!K:K"));"")
> Voici ton fichier avec la formule intégrée.
> [..]
> MichD

Ta formule est bien, c'est ce que je voulais faire au début mais je n'y étai
pas arrivé.
Cependant, dès lors qu'il y a un nom composé ça ne marche pas sur la ligne d
l'agent concerné.
J'ai essayé de remplacer l'espace entre les deux noms par un - et ça ne march
pas non plus.
Par contre ça fonctionne si on mets _ (DURAND_MARTEL) par exemple

Bon dimanche
MichD (17/03/2019, 13h18)
Formule adaptée. Regarde ton fichier.

[..]

MichD
rdu13 (17/03/2019, 14h32)
Le dimanche 17 Mars 2019 à 12:18 par MichD :
> Formule adaptée. Regarde ton fichier.
> [..]
> MichD Un grand merci, ça marche parfaitement


Bien cordialement
Discussions similaires
l'aide des fonctions excel n'affiche pas l'aide

demande d'aide boite de dialogue excel 5 dans excel 2003

passage excel 2002 / excel 2003 GROS BESOIN AIDE --

Ou trouver le fichier d'aide des macros excel 4 pour Excel 2002 et comment l'installer


Fuseau horaire GMT +2. Il est actuellement 03h26. | Privacy Policy