Formule pour feuille précédente dans excel
nemotri
Messages postés
175
Date d'inscription
Statut
Membre
Dernière intervention
-
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24603 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour à tous,
Voilà suite à une nouvelle expérience professionnelle je suis en pleine exploration d'Excel et j'ai quelques soucis.
Voilà je suis en train de réaliser un calendrier sous excel où chaque semaine correspond à une feuille de calcul : la semaine 1 est sur la première feuille que j'ai renomé S1, la semaine 2 est sur la deuxième feuille que j'ai renomé S2...Il y a donc 52 feuilles.
Seulement j'ai besoin d'inscrire sur chaque feuille et à la même place (admettons en B2) une valeur x qui se trouve sur la même cellule (donc B2) que la feuille précédente (donc la feuille n-1) et à laquel je veux ajouter 6. C'est-à-dire que B2 sur la feuile 2 vaut "Feuil1!B2"+6 et B2 sur la feuille 3 vaut "Feuil2!B2"+6...
Quelle formule puis-je utiliser ?
En cherchant un peu sur le net, j'ai trouvé sur un autre forum (désolé) cette solution :
" Une petite ruse quelque soit le nom de la feuille qui précède
Tu ecrit cette fontion
Function feuille_1(adresse)
n = ActiveSheet.Index
feuille_1 = ThisWorkbook.Worksheets(n - 1).Range(adresse)
End Function
et du pose cette formule dans ta cellule.
Ici a2 de la feuille précédente.
=feuille_1("a2")"
Je suppose que tout ceci doit être marqué dans le VBA mais je viens juste de découvrir ce VBA grâce aux macro et je ne maîtrise pas tout.
Où dois-je taper cette formule dans le VBA ? Dois-je taper la formule telle qu'elle est citée ? Quelles sont les adresses que je dois mettre ?
J'ai fais quelques essais mais ça ne fonctionne pas.
A mois qu'il y ait plus simple ?
Aidez-moi si vous plait pour que je ne me fasse pas les 52 pages "manuellement" surtout que je vais devoir répéter ce genre d'opération sur pleins de calendriers différents.
Voilà suite à une nouvelle expérience professionnelle je suis en pleine exploration d'Excel et j'ai quelques soucis.
Voilà je suis en train de réaliser un calendrier sous excel où chaque semaine correspond à une feuille de calcul : la semaine 1 est sur la première feuille que j'ai renomé S1, la semaine 2 est sur la deuxième feuille que j'ai renomé S2...Il y a donc 52 feuilles.
Seulement j'ai besoin d'inscrire sur chaque feuille et à la même place (admettons en B2) une valeur x qui se trouve sur la même cellule (donc B2) que la feuille précédente (donc la feuille n-1) et à laquel je veux ajouter 6. C'est-à-dire que B2 sur la feuile 2 vaut "Feuil1!B2"+6 et B2 sur la feuille 3 vaut "Feuil2!B2"+6...
Quelle formule puis-je utiliser ?
En cherchant un peu sur le net, j'ai trouvé sur un autre forum (désolé) cette solution :
" Une petite ruse quelque soit le nom de la feuille qui précède
Tu ecrit cette fontion
Function feuille_1(adresse)
n = ActiveSheet.Index
feuille_1 = ThisWorkbook.Worksheets(n - 1).Range(adresse)
End Function
et du pose cette formule dans ta cellule.
Ici a2 de la feuille précédente.
=feuille_1("a2")"
Je suppose que tout ceci doit être marqué dans le VBA mais je viens juste de découvrir ce VBA grâce aux macro et je ne maîtrise pas tout.
Où dois-je taper cette formule dans le VBA ? Dois-je taper la formule telle qu'elle est citée ? Quelles sont les adresses que je dois mettre ?
J'ai fais quelques essais mais ça ne fonctionne pas.
A mois qu'il y ait plus simple ?
Aidez-moi si vous plait pour que je ne me fasse pas les 52 pages "manuellement" surtout que je vais devoir répéter ce genre d'opération sur pleins de calendriers différents.
A voir également:
- Excel formule feuille précédente
- Formule si et excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Excel mise en forme conditionnelle formule - Guide
- Formule somme excel colonne - Guide
- Liste déroulante excel - Guide
8 réponses
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
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.
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.
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
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
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 ;-)