Formule pour feuille précédente dans excel
Fermé
nemotri
Messages postés
175
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
8 décembre 2017
-
9 août 2009 à 15:04
eriiic Messages postés 24601 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 novembre 2024 - 26 oct. 2009 à 18:22
eriiic Messages postés 24601 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 25 novembre 2024 - 26 oct. 2009 à 18:22
A voir également:
- Excel formule feuille précédente
- Formule excel pour additionner plusieurs cellules - Guide
- Formule excel si et - Guide
- Formule excel moyenne - Guide
- Excel mise en forme conditionnelle formule - Guide
- Formule excel - Guide
8 réponses
eriiic
Messages postés
24601
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 novembre 2024
7 243
9 août 2009 à 17:38
9 août 2009 à 17:38
Bonjour tout le monde,
Tu peux aussi le faire par formule :
=INDIRECT("'S"&STXT(CELLULE("filename";A1);CHERCHE("]";CELLULE("filename";A1))+2;50)-1&"'!B2")+6
(il faut que ton fichier soit enregistré)
CELLULE("filename";A1) te retourne le chemin, le nom du fichier et de l'onglet (D:\tmp\[Classeur5.xls]S2)
CHERCHE("]";....;..) te donne la position du caractère ], tu sais qu'ensuite tu auras le nom de l'onglet.
STXT(...;...;...) extrait le nom de ton onglet sans le S du début, avec -1 tu peux fabriquer le nom de l'onglet précédent
Mais si c'est l'occasion pour toi de découvrir les possibilités de vba ne te retiens surtout pas ;-)
eric
Tu peux aussi le faire par formule :
=INDIRECT("'S"&STXT(CELLULE("filename";A1);CHERCHE("]";CELLULE("filename";A1))+2;50)-1&"'!B2")+6
(il faut que ton fichier soit enregistré)
CELLULE("filename";A1) te retourne le chemin, le nom du fichier et de l'onglet (D:\tmp\[Classeur5.xls]S2)
CHERCHE("]";....;..) te donne la position du caractère ], tu sais qu'ensuite tu auras le nom de l'onglet.
STXT(...;...;...) extrait le nom de ton onglet sans le S du début, avec -1 tu peux fabriquer le nom de l'onglet précédent
Mais si c'est l'occasion pour toi de découvrir les possibilités de vba ne te retiens surtout pas ;-)
eric
eriiic
Messages postés
24601
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 novembre 2024
7 243
26 oct. 2009 à 00:01
26 oct. 2009 à 00:01
Sub dupliquer()
Worksheets("Matrice").[A1] = Worksheets(Worksheets("Matrice").Index - 1).[B5]
End Sub
marche très bien chez moi...
eric
Worksheets("Matrice").[A1] = Worksheets(Worksheets("Matrice").Index - 1).[B5]
End Sub
marche très bien chez moi...
eric
Jai trouvé le problème :
- je mettais la feuille matrice devant la feuille comprenant la cellule a recopié, avec dans la formule de macro "... index -1..." : donc ça ne fonctionnait pas.
- maintenant, je mets toujours la feuille matrice devant la feuille comprenant la cellule à recopier, mais avec la formule de macro "...index+1..." : et ça fonctionne.
Tout s'arrange.
Merci.
- je mettais la feuille matrice devant la feuille comprenant la cellule a recopié, avec dans la formule de macro "... index -1..." : donc ça ne fonctionnait pas.
- maintenant, je mets toujours la feuille matrice devant la feuille comprenant la cellule à recopier, mais avec la formule de macro "...index+1..." : et ça fonctionne.
Tout s'arrange.
Merci.
m@rina
Messages postés
21118
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
3 décembre 2024
11 364
9 août 2009 à 18:53
9 août 2009 à 18:53
Re...
Ben, il suffit que tu t'arrêtes à 52 ! ;)
Au lieu de mettre :
tu mets :
sinon, le code est tout bête :
'nom de la procédure
Sub nemotri()
'déclare la variable feuille
Dim feuille
'fait une boucle sur toutes feuilles à partir de 2 (Count permet d'avoir le nb de feuilles dans le classeur)
For feuille = 2 To ActiveWorkbook.Worksheets.Count
'On dit que la cellule B2 de chaque feuille aura la même valeur + 6 que la cellule B2 de la feuille précédente
ActiveWorkbook.Sheets(feuille).Range("B2").Value = ActiveWorkbook.Sheets(feuille - 1).Range("B2").Value + 6
fin de la boucle
Next
'fin de la procédure
End Sub
m@rina
Ben, il suffit que tu t'arrêtes à 52 ! ;)
Au lieu de mettre :
For feuille = 2 To ActiveWorkbook.Worksheets.Count
tu mets :
For feuille = 2 To 52
sinon, le code est tout bête :
'nom de la procédure
Sub nemotri()
'déclare la variable feuille
Dim feuille
'fait une boucle sur toutes feuilles à partir de 2 (Count permet d'avoir le nb de feuilles dans le classeur)
For feuille = 2 To ActiveWorkbook.Worksheets.Count
'On dit que la cellule B2 de chaque feuille aura la même valeur + 6 que la cellule B2 de la feuille précédente
ActiveWorkbook.Sheets(feuille).Range("B2").Value = ActiveWorkbook.Sheets(feuille - 1).Range("B2").Value + 6
fin de la boucle
Next
'fin de la procédure
End Sub
m@rina
Bonjour,
J'aimerais créer une macro pour copier une cellule précise (par exemple B5) de l'onglet n-1 puis coller sur une cellule précise (par exmple A1) de l'onglet n que je veux appeler matrice.
Voici ce que j'ai fait mais je n'arrive pas à dire "onglet précédent".
Sub Dupliquer()
' Sheets("matrice-1").Select
Range("B5").Select
Selection.Copy
Sheets("matrice").Select
Range("A1").Select
ActiveSheet.Paste
End Sub
Merci de votre aide.
J'aimerais créer une macro pour copier une cellule précise (par exemple B5) de l'onglet n-1 puis coller sur une cellule précise (par exmple A1) de l'onglet n que je veux appeler matrice.
Voici ce que j'ai fait mais je n'arrive pas à dire "onglet précédent".
Sub Dupliquer()
' Sheets("matrice-1").Select
Range("B5").Select
Selection.Copy
Sheets("matrice").Select
Range("A1").Select
ActiveSheet.Paste
End Sub
Merci de votre aide.
eriiic
Messages postés
24601
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 novembre 2024
7 243
23 oct. 2009 à 18:56
23 oct. 2009 à 18:56
Ben je ne sais pas...
ça ne fonctionne pas c'est vague...
Si tu as une feuille nommée Matrice (en respectant les majuscules et accents) précédée d'une autre feuille et que tu lances la macro, A1 prend la valeur de B5 de l'autre feuille.
eric
ça ne fonctionne pas c'est vague...
Si tu as une feuille nommée Matrice (en respectant les majuscules et accents) précédée d'une autre feuille et que tu lances la macro, A1 prend la valeur de B5 de l'autre feuille.
eric
Si je fais :
Sub dupliquer ()
Worksheets("Matrice").[A1]=Worksheets("Feuil2").[B5]
End Sub
la macro fonctionne très bien. Cette formule m'oblige à appeler la feuille qui précéde la feuille "Matrice", "feuil2". Or je voudrais que cela fonctionne pour n'importe quelle feuille. Pour cela j'ai utilisé ta formule en faisant un copier coller et en l'entourant de sub dupliquer () et end sub : la formule que tu m'a donnée reste en jaune et la macro ne s'exécute pas.
Sub dupliquer ()
Worksheets("Matrice").[A1]=Worksheets("Feuil2").[B5]
End Sub
la macro fonctionne très bien. Cette formule m'oblige à appeler la feuille qui précéde la feuille "Matrice", "feuil2". Or je voudrais que cela fonctionne pour n'importe quelle feuille. Pour cela j'ai utilisé ta formule en faisant un copier coller et en l'entourant de sub dupliquer () et end sub : la formule que tu m'a donnée reste en jaune et la macro ne s'exécute pas.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
m@rina
Messages postés
21118
Date d'inscription
mardi 12 juin 2007
Statut
Contributeur
Dernière intervention
3 décembre 2024
11 364
9 août 2009 à 15:42
9 août 2009 à 15:42
Bonjour,
La solution que tu as trouvé ne fait que créer une fonction personnalisée qui permet dans une formule d'utiliser la valeur d'une cellule de la feuille prédente.
Voici un code qui va mettre le montant dans chacune des cellule directement (à partir de la feuille 2, la première n'ayant pas de feuille précédente). Tu recopies exactement le code et tu exécutes la macro.
m@rina
La solution que tu as trouvé ne fait que créer une fonction personnalisée qui permet dans une formule d'utiliser la valeur d'une cellule de la feuille prédente.
Voici un code qui va mettre le montant dans chacune des cellule directement (à partir de la feuille 2, la première n'ayant pas de feuille précédente). Tu recopies exactement le code et tu exécutes la macro.
Sub nemotri() Dim feuille For feuille = 2 To ActiveWorkbook.Worksheets.Count ActiveWorkbook.Sheets(feuille).Range("B2").Value = ActiveWorkbook.Sheets(feuille - 1).Range("B2").Value + 6 Next End Sub
m@rina
nemotri
Messages postés
175
Date d'inscription
dimanche 9 août 2009
Statut
Membre
Dernière intervention
8 décembre 2017
35
9 août 2009 à 17:44
9 août 2009 à 17:44
Super m@rina,
Je ne sais pas comment te remercier, ça faisait des heures que je cherchais en vain.
Juste pour ma culture générale et mon apprentissage sur VBA, quelqu'un pourrait-il m'expliquer grossièrement la fonction des différents termes de la "formule".
Enfin j'ai un autre souci quand même concernant ta solution.
En fait j'ai dit un peu une bétise dans mon premier post car mon classeur ne contient pas seulement 52 feuilles identiques (1 feuille par semaine).
En effet, pour chaque semaine j'ai une feuille "annexeA" dont la mise en forme est différente des feuilles "semaine" et une feuille "annexeB" dont la mise en forme est aussi différente des feuilles "semaine" et des feuilles "annexeA".
J'ai créé des macro/bouton pour faire les aller/retour entre feuille "semaine1"/feuille"AnnexeA 1"/feuille "annexeB 1"
J'ai donc, si vous me suivez, 52 feuilles "semaine" qui sont suivies par 52 feuilles "annexeA" qui sont suivie par 52 feuilles "annexeB"
Seulement quand je met ta macro en place, comme toutes mes pages n'ont pas la même mise en page, celle-ci ne fonctionne pas et un message d'erreur s'affiche. Dès que je supprime toutes mes feuilles "annexeA" et "annexeB" et qui n'ont pas le même format que les feuilles "semaine", la macro fonctionne.
Y-a-t-il donc une solution pour limiter l'action de ta macro à une certaine étendue de feuille ?
Mille merci pour la réponse qui m'a déjà été donné et mille autre à venir si vous résolvez mon nouveau souci ;-)
Je ne sais pas comment te remercier, ça faisait des heures que je cherchais en vain.
Juste pour ma culture générale et mon apprentissage sur VBA, quelqu'un pourrait-il m'expliquer grossièrement la fonction des différents termes de la "formule".
Enfin j'ai un autre souci quand même concernant ta solution.
En fait j'ai dit un peu une bétise dans mon premier post car mon classeur ne contient pas seulement 52 feuilles identiques (1 feuille par semaine).
En effet, pour chaque semaine j'ai une feuille "annexeA" dont la mise en forme est différente des feuilles "semaine" et une feuille "annexeB" dont la mise en forme est aussi différente des feuilles "semaine" et des feuilles "annexeA".
J'ai créé des macro/bouton pour faire les aller/retour entre feuille "semaine1"/feuille"AnnexeA 1"/feuille "annexeB 1"
J'ai donc, si vous me suivez, 52 feuilles "semaine" qui sont suivies par 52 feuilles "annexeA" qui sont suivie par 52 feuilles "annexeB"
Seulement quand je met ta macro en place, comme toutes mes pages n'ont pas la même mise en page, celle-ci ne fonctionne pas et un message d'erreur s'affiche. Dès que je supprime toutes mes feuilles "annexeA" et "annexeB" et qui n'ont pas le même format que les feuilles "semaine", la macro fonctionne.
Y-a-t-il donc une solution pour limiter l'action de ta macro à une certaine étendue de feuille ?
Mille merci pour la réponse qui m'a déjà été donné et mille autre à venir si vous résolvez mon nouveau souci ;-)
eriiic
Messages postés
24601
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 novembre 2024
7 243
22 oct. 2009 à 18:04
22 oct. 2009 à 18:04
Bonjour,
Worksheets("Matrice").[A1] = Worksheets(Worksheets("Matrice").Index - 1).[B5]
eric
Worksheets("Matrice").[A1] = Worksheets(Worksheets("Matrice").Index - 1).[B5]
eric
eriiic
Messages postés
24601
Date d'inscription
mardi 11 septembre 2007
Statut
Contributeur
Dernière intervention
25 novembre 2024
7 243
26 oct. 2009 à 18:22
26 oct. 2009 à 18:22
Tu ne sais plus ce que tu as demandé ? ;-)
copier une cellule précise (par exemple B5) de l'onglet n-1 puis coller sur une cellule précise (par exmple A1) de l'onglet n que je veux appeler matrice
Enfin tu as trouvé c'est le principal...
eric
copier une cellule précise (par exemple B5) de l'onglet n-1 puis coller sur une cellule précise (par exmple A1) de l'onglet n que je veux appeler matrice
Enfin tu as trouvé c'est le principal...
eric