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 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 - 26 oct. 2009 à 18:22
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.
A voir également:

8 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
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
6
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
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
2
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.
0
m@rina Messages postés 20074 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 25 avril 2024 11 271
9 août 2009 à 18:53
Re...

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
1
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.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
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
1
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.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
m@rina Messages postés 20074 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 25 avril 2024 11 271
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.

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
0
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
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 ;-)
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
22 oct. 2009 à 18:04
Bonjour,

Worksheets("Matrice").[A1] = Worksheets(Worksheets("Matrice").Index - 1).[B5]
eric
0
Merci Eric pour ta réponse.
Je ne comprends pas très bien. Si je fais :
Sub (dupliquer)
Worksheets("Matrice").[A1] = Worksheets(Worksheets("Matrice").Index - 1).[B5]
End sub

ça ne fonctionne pas. Peux tu m'éclairer s'il te plait. Merci encore.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
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
0