Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Décaler le contenu d'une cellule

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

gerald.lebret

XLDnaute Nouveau
Bonjour à tous,

Je travaille sur un fichier qui va puiser ces données dans 2 ou 3 autre fichiers.
Il s'agit de donner concernant des charges et du CA de 7 points de vente avec 7 types de clients différents.

Je dois synthétiser toutes ces données et pour celui j'utilise énormément la fonction OFFSET.

En fait, ce que j'aimerais faire, c'est indiqué une fois ma formule qui va puiser dans une autre feuille et ensuite, j'aimerais pouvoir faire un offset du contenu de cette cellule sans être obligé de retaper la formule.

Par exemple, si j'ai en b2, la formule='Sheet2!b4+'Sheet2!b5, au lieu de devoir faire offset('sheet2!b4;20;0)+offset('sheet2!b5), j'aimerais pouvoir simplement faire offset(le contenu de b2;23;0).

J'ai essayé avec la fonction INDIRECT mais je n'arrive pas à "offseter" le contenu, excel va "offseter" depuis la valeur situé en b2 et non pas la formule.

Je ne sais pas si une macro ou autre chose est possible mais si quelqu'un pouvait me filer un coup de main ce serait génial.

Merci beaucoup.
 
Re : Décaler le contenu d'une cellule

En fait, j'ai copier-coller le code mais je n'ai rien fait d'autre. je n'ai pas fait ce que tu proposais (définir le nom cellule..)
et donc je ne saisis pas dans la macro tel qu'elle est là, où je saisis ma formule et où je sais le nombre de ligne qui doivente être offsetées.

JE suis vraiment désolé et merci encore.
 
Re : Décaler le contenu d'une cellule

Re,

Il faut aussi que votre fichier test.xlsx soit transformé en test.xlsm

Pour cela onglet Fichier => Enregistrer sous et choisir en bas "Classeur acceptant les macros".

J'ai mis la fonction macro et les formules en F40 et F66 dans le fichier joint.

Il ne vous reste plus qu'à ouvrir le fichier source...

Edit : j'ai enlevé le + dans la formule en F14

A+
 

Pièces jointes

Dernière édition:
Re : Décaler le contenu d'une cellule

Re,

J'insiste sur l'Edit de mon post précédent, la formule en F14 doit être :

Code:
='X:\Cost Control\Budget\2013\[Budget 2013 bis.xlsx]Ventilation Paiements'!BC7
Surtout pas de signe + après le signe =, il faut la référence de la cellule uniquement.

A+
 
Re : Décaler le contenu d'une cellule

Re,

Ah j'oubliais, pour que les formules se mettent à jour quand le fichier source est modifié, il faut que la fonction DECAL soit volatile (voir l'aide VBA) :

Code:
Function DECAL(Cellule As Range, Nlig As Long, Ncol As Long) As Range
Application.Volatile
Set DECAL = Evaluate(Cellule.Formula).Offset(Nlig, Ncol)
End Function
Fichier (2).

A+
 

Pièces jointes

Re : Décaler le contenu d'une cellule

Re,

Alors après avoir un petit peu galéré pour trouver tous les mécanismes, j'ai plusieurs questions.

En fait, je travaille beaucoup avec le pavé numérique et c'est pour ça que la majorité de mes formules vont commencer par =+ puisque sur le pavé numérique, le = n'est pas présent. Ma question est donc de savoir pourquoi le =+ pose problème et qu'il faut impérativement que le =.

De plus pourquoi est-ce que la fonction doit être mise sur module 1 du fichier alors que c'est une macro que j'aimerai pouvoir réutiliser et donc je voulais la mettre dans mon classeur de macro perso?

Dans tous les cas, vraiment un grand merci pour cette macro.
 
Re : Décaler le contenu d'une cellule

Bonjour gerald, le forum,

(...) pourquoi le =+ pose problème et qu'il faut impérativement que le =.

A cause de Evaluate(Cellule.Formula).

S'il y a un + dans la formule Formula, Evaluate ne renvoie pas un Range mais la valeur qu'il y a dans Cellule.

Alors Offset derrière ne peut fonctionner et DECAL renvoie l'erreur #VALEUR!.

De plus pourquoi est-ce que la fonction doit être mise sur module 1 du fichier

Pour qu'une fonction VBA fonctionne dans une feuille de calcul, il faut qu'elle soit dans un Module standard du même classeur.

C'est comme ça.

A+
 
Re : Décaler le contenu d'une cellule

Re,

Maintenant si à cause du pavé numérique il faut un +, alors VBA peut le retirer :

Code:
Function DECAL(Cellule As Range, Nlig As Long, Ncol As Long) As Range
Dim F as String
Application.Volatile
F = Replace(Cellule.Formula, "=+", "=")
Set DECAL = Evaluate(F).Offset(Nlig, Ncol)
End Function
A+
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…