OVH Cloud OVH Cloud

Aide Excel

13 réponses
Avatar
rdu13
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 chaque feuille dans les mêmes cellules avec la fonction Indirect mais je dois rapatrier le total de la colonne K de chaque feuille du classeur qui n'est pas sur la même 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 de chaque feuille.

Merci par avance pour votre aide

Bien cordialement

10 réponses

1 2
Avatar
MichD
Le 2019-03-14 à 13:36, rdu13 a écrit :
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 chaque
feuille dans les mêmes cellules avec la fonction Indirect mais je dois rapatrier
le total de la colonne K de chaque feuille du classeur qui n'est pas sur la même
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 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
Avatar
rdu13
Le jeudi 14 Mars 2019 à 21:08 par MichD :
Le 2019-03-14 à 13:36, rdu13 a écrit :
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 chaque
feuille dans les mêmes cellules avec la fonction Indirect mais je dois
rapatrier
le total de la colonne K de chaque feuille du classeur qui n'est pas sur la
même
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 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
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 du 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 le 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 ayant bénéficié d'un remboursement et un recap. Comme j'ai beaucoup d'onglets et que 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 de chaque onglet. Pour les données telles que noms prenoms... pas de soucis puisque les onglets ont la même structure et que ces données sont dans les mêmes cellules sur chaque onglet (avecINDIRECT). Ce qui diffère c'est le nombre de lignes de chaque onglet et du coup le total de chaque onglet de la colonne K n'a jamais la même référence de cellule.
Avatar
MichD
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
Avatar
rdu13
Le vendredi 15 Mars 2019 à 11:36 par MichD :
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
Ta solution me renvoie dans l'onglet Résultat le total cumulé de toutes les 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 un 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 de chaque onglet qui est dans la colonne K à rapatrier en fonction de la colonne A 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
Avatar
MichD
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
Avatar
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
Avatar
rdu13
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 :
https://www.cjoint.com/c/ICqoqyL8J2n
Bien cordialement
Avatar
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 :
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 :
https://www.cjoint.com/c/ICqoqyL8J2n
Bien cordialement
Avatar
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.
https://www.cjoint.com/c/ICqrWCKO6uj
MichD
Avatar
rdu13
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 :
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 :
https://www.cjoint.com/c/ICqoqyL8J2n
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 prendre 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
1 2