Bloqué sur une formule

Bonjour,
Je travail sur classeur qui enregistre des fiches d’intervention, j’ai créer une formule pour formater la référence de chaque fiche composé de 3 partie, la dernière partie est supposé d’auto incrémenter en se basant sur une cellule qui se trouve être la première sur la feuille d’enregistrement des interventions « A2 » sur mon exemple, j’utilise une macro qui insère une ligne au dessus puis copier chaque parie de la fiche sur une cellule du coup mon problème est que sur la formule la cellule A2 devient A3 puis A4 chaque fois que j’exécute la macro alors que pour avoir la bonne référence il faut resté pointé sur A2, j’ai même utilisé des dollars sans succès, voilà ma formule d’origine
Merci d’avance

Si vous avec besoin du fichier d’origine ou de plus de détails je suis disposé

Bonjour
Dans ce genre de situation j’inclus dans la macro qui engendre ce désordre la remise conforme de la formule avec cette instruction :
Si celle-ci est en cellule B2 par exemple
Sheets(« onglet »).Range(« B2 »).FormulaLocal = « …formule inter’!$A$2 formule… »

attention si dans ta formule des paramètres sont encadrés par des guillemets il faut les répéter par exemple :
« MMMAA »
il faut mettre
« « MMMAA » »
les guillemets sont doublés en début et en fin

A essayer
Peut être la solution

1 J'aime

Je vous serais très reconnaissant si vous m’expliquer d’avantage votre solution sachant que j’ai enregistrer la macro et je l’est pas écris manuellement je peux vous fournir les info que vous désirez

Peux tu me donner l intégralité du code ainsi que la formule telle qu elle doit être avec le nom de l onglet et la cellule qui la possède
Je te rajoute l instruction qui la maintiendra correcte

Si tu préfères tu peux me transmettre ton fichier sans donnée confidentiele avec ta macro et la formule que tu souhaites en me spécifiant la cellule qui la porte en utilisant sur le bandeau ci-dessus la petite flèche qui pointe vers le haut sur une petite barre horizontale

D’accord je te transmet le fichier c’est mieux, je vous le transmet ici ou par e-mail ?

fiche_test.xlsm (46,5 Ko)
voila mon fichier avec des donnes fictives bien sur, deux listes déroulantes sur sites et nom technicien

Bonjour

J’ai donc corrigé ta procédure non sans mal car tu ne m’as pas donné la cellule de la formule comme je te l’avais réclamé
J’ai du jouer les détectives pour la trouver
Donc normalement sur cette version corrigé ton malheur est résolu
Fais des tests et dis moi

fiche_test.xlsm (45,3 Ko)

1 J'aime

Merci énormément, je vais vérifier, la cellule en question et sur le premier post, je pense « A2 »

Et non en A2 il n y a pas de formule il n y a que la dernière référence que la formule vient chercher pour lui appliquer un + 1 et mettre la suivante ceci en G1
La formule est donc en G1

Ça marche à merveille, merci beaucoup, quand j’ai cité A2 c’est en tant que référence, je pense que j’avais mal compris la question, maintenant quand j’utilise ta macro modifié sur mon vrai fichier ça donne ça, sachant que c’est le même fichier j’avais juste changé les sources de donnés, je pense avoir commis une erreur

A l’analyse de ton code qui ressemble beaucoup à celui que j’ai modifié

Si on analyse les premières lignes de code suivantes :

Range(« A2 »).Select
Selection.ListObject.ListRows.Add (1)
Sheets(« new fiche »).Select

On sélectionne la cellule A2 (Range(« A2 »).Select)
A la sélection on réalise un ajout de ligne avec tous ses objets (Selection.ListObject.ListRows.Add (1))
Puis on sélectionne l’onglet news fiche (Sheets(« new fiche »).Select)
Ce qui veut dire que le traitement des 2 premières lignes n’est pas sur l’onglet new fiche
Or voyant ta première copie d’écran tu exécutes ce traitement à partir de l’onglet new fiche ce qui n’est pas prévu par le code
Les 2 premières lignes de code doivent s’exécuter à partir d’un onglet autre que celui de new fiche puisque la 3° ensuite va chercher cet onglet
Reste à savoir quel onglet doit être en rapport avec les 2 premières lignes
Je ne connais pas le but de ces traitements
Cette procédure « AJOUT » doit elle agir sur l’onglet « historique inter » comme la procédure « ajout_int »
Si tel est le cas 2 solutions :

soit exécuter la procédure « AJOUT » à partir de l’onglet « historique inter » (j’ai essayé avec succés mais sans savoir si le résultat obtenu était celui attendu)
soit comme pour le traitement « ajout_int » ajouter cette ligne de code en tout début de la procédure « AJOUT »:
Sheets(« historique inter »).Select
ce qui donne ces premières lignes de code à l’identique de la procédure « ajout_int » :

Sheets(« historique inter »).Select
Range(« A2 »).Select
Selection.ListObject.ListRows.Add (1)
Sheets(« new fiche »).Select

et ainsi de laisser faire le traitement pour utiliser le bon onglet « historique inter »

A toi d’analyser en fonction de mes constations et propositions de solution

A ta disposition pour d’autres précisions

Je rajoute
si tu ne veux pas avoir la même déconvenue pour la formule n’oublies pas de rajouter ma ligne de code la concernant à l’identique de la macro « ajou_int » dans la macro « AJOUT » ainsi :

Même ligne même emplacement dans le code

Trés important

Normalement sur votre fichier vous avez modifié quelle macro car j’ai copier ton code sur le mien, mais avant tous je doit vraiment comprendre les modifications que vous avez effectué

Normalement je me situe sur l’onglet fiche inter et j’insère une ligne au dessus et je commence à copier les éléments à partir de new fiche

« Normalement sur votre fichier vous avez modifié quelle macro car j’ai copier ton code sur le mien, mais avant tous je doit vraiment comprendre les modifications que vous avez effectué »

J’ai en première intention adapté la macro relié au bouton bleu « enregistrer » onglet « new fiche » c’est la macro :

ajout_int

« Normalement je me situe sur l’onglet fiche inter et j’insère une ligne au dessus et je commence à copier les éléments à partir de new fiche »

sur ta copie d’écran ce n’est pas cet onglet :

au moment du bug cette copie d’écran montre l’onglet « new fiche » et non « historique inter »

ce qui explique le blocage

Je vais réessayer, je pense que me suis peut être trompé de macro

Ça marche maintenant, un grand merci, un dernier truc je peux savoir les modif que vous avez apporter à mon code d’origine pour connaître mon erreur

Ravi que celà fonctionne
Je vous rassure vous n’avez pas fais d’erreur
C’est le fonctionnement d’Excel qui à l’ajout d’une ligne mets à jour toutes les formules qui sont impactées
C’est très pratique et nécessaire dans la plus part des situations
Mais pour la votre c’est un inconvénient que j’ai résolu par une ligne de code qui remet la formule à l’identique de ce qu’elle était avant l’ajout de la ligne
J’ai en quelque sorte inhibé la mise à jour Excel dans ce contexte par cette ligne de code
La ligne rajoutée dans le code :

Range(« G1 »).FormulaLocal = « = »« FI- »"&MAJUSCULE(TEXTE(‹ new fiche ›!E18;"« MMMAA »"))&""-""&TEXTE(STXT(‹ historique inter ›!$A$2;13;1)+1;"« 000" »)"

Formule de la cellule G1

De plus cette ligne de code as dû être intégrée aprés la récupération de la dernière référence intégrée dans l’onglet « historique inter » par les lignes de code précédentes :

Range(« G1 »).Select
Selection.Copy
Sheets(« historique inter »).Select
Range(« A2 »).Select
Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
:=False, Transpose:=False

référence que portait la cellule G1 recopiée en cellule A2 onglet « historique inter »
Ce qui permet à la formule de la récupérer comme dernière référence utilisée en rajoutant un +1
et de mettre pour cela juste après la ligne de code ci-dessus
Un enchainement d’action à respecter pour le résultat attendu que vous avez maintenant

Voilà pour les explications

1 J'aime

bravo, c’etait très fort, je vais prendre mon temps pour comprendre ton code vu que je suis pas très balaise en vba mais je t’assure beaucoup ont échoué dans ce que vous avez réussi
merci donc