Formules volatiles pour raccourcis

ccdouble6

XLDnaute Occasionnel
Bonjour tout le monde,

J'utilise Excel 2000 sous XP et il me faut créer une macro pour un tableau de saisie comptable. J'ai commencé à taper cette macro d'après ce que j'ai déjà appris mais je rame pas mal... Vous verrez donc que ce n'est pas encore ça.

J'essaie de combiner macros et formules de RechercheV, en utilisant le principe de "formule volatile" que l'on m'a appris ici d'ailleurs :)

Cette macro n'est là que pour permettre d'accélérer la saisie :
Il y a deux feuilles dans mon fichier (joint au message) :
- sur la feuille Saisie il y a le tableau de saisie lui-même, donc aucune formule nulle part. La colonne C3 est importante, on peut éventuellement y taper une lettre ou un 1.
- sur la feuille Raccourcis, il y a un tableau rempli de lignes pré-tapées, ou à taper soi-même. Dans la colonne C3 on peut taper une lettre ou un chiffre.
La macro doit agir lorsque une lettre ou un 1 est tapé dans la colonne LC3 de la feuille Saisie.


Le but est que lorsque l'utilisateur tape une lettre ou un 1 dans la colonne C3 de la feuille Saisie, cela fasse apparaître dans CERTAINES cellules de la ligne une formule de RechercheV qui va chercher cette même lettre dans la feuille Raccourcis et ramène les infos pré-tapées qui correspondent. :)

Mais ce n'est pas si simple, il y a différents cas selon où la lettre figure dans la feuille Raccourcis : il y a par exemple des lignes où le montant doit rester en saisie libre et d'autres où il est en Débit et d'autres en Crédit.
J'ai donc prévu 3 cas selon le résultat indiqué par un tableau dans 'Saisie' (à droite du principal) : une formule NB.SI() dans chaque colonne détecte où apparaît la lettre dans 'Raccourcis' et la macro devra se baser dessus pour :
- mettre dans certaines cellules une formule de Recherche,
- ne rien faire pour les autres cellules.


Voici donc ci-joint (fichier en .txt dans un .zip) l'ébauche de macro.
J'éprouve plus particulièrement des difficultés sur les points suivants :
- l'incrémentation des lignes (la macro doit s'appliquer pour toutes les lignes),
- La fonction If,
- L'appel d'une "sub",
- Et les imprévus que les calculs peuvent générer : l'insertion de lignes notamment.

Je vous remercie grandement pour votre aide, celle-ci me permettra en même temps de faire un grand bond en avant dans ma pratique, vu que ce genre de macro regroupe pas mal de notions qui me sont inconnues mais que je serai sûrement amené à réutiliser... :cool:


Regarde la pièce jointe Exemple racc1.xls

Regarde la pièce jointe Texte MACRO.zip
 

ccdouble6

XLDnaute Occasionnel
Re : Formules volatiles pour raccourcis

Bonsoir G.David et Pierrot93,

:confused: Merci G;David mais... alors qui a raison? je croyais que les coordonnées relatives ne passaient pas en VBA... maintenant j'ai tout mis en absolu je ne changerai que si je suis sûr et archi sûr ;)

Merci Pierrot93 pour cette précision, mais si c'est bien ce que j'ai compris alors là je suis mal, je vais être obligé de copier le texte dans 6 fenêtres, ou alors je vais devoir démultiplier par 6 toutes mes lignes !!! :eek:
je vais voir tout ça à froid... mais c'est chaud euh.. :p
Bonne soirée !!
 

Pierrot93

XLDnaute Barbatruc
Re : Formules volatiles pour raccourcis

Bonsoir CCdouble6

Ci dessous type de coordonnées retalives telles peuvent être utilisées en vba, c'est à dire dans une formule faisant ref à d'autre cellules, a mon avis c'est pas le top pour utilisation plux complexe !!!

Code:
    ActiveCell.FormulaR1C1 = "=R[-2]C[-4]+R[-2]C[-3]"

Sinon selon l'aide vba, que tu peux consulter par F1 sur le mot (mon message du 07 11 06 a 19H54) :

Code:
Argument de type Variant obligatoire. Nom de la plage. Il doit s'agir d'une référence de type A1 dans le langage de la macro.

Maintenant tu devrais peu être mettre ton classeur avec tes macros incluses pour que l on puisse t aider plus efficacement.

Bonne soirée
@+
 

ccdouble6

XLDnaute Occasionnel
Re : Formules volatiles pour raccourcis

Merci Pierrot93 pour ces précisions,
maintenant je pense qu'il ne me reste qu'à tester la macro, en y intégrant Sheets("___") là où il faut, pour voir sur une feuille si ça marche.
Après je crois que j'ai pas beaucoup le choix :
Ou bien je démultiplie tout dans une fenêtre,
Ou bien je copie le texte dans chaque feuille active qui aura besoin de la macro.
A voir donc, je vais réfléchir et je te tiens au courant des avancées des tests, j'espère ce dimanche :cool:

Un très grand merci en tout cas, j'ai énormément appris avec cette discussion :) :) :)
Bonne nuit
 

ccdouble6

XLDnaute Occasionnel
Re : Formules volatiles pour raccourcis

Bonsoir le forum!! Salut Pierrot93 !!

Alors voilà j'ai testé la macro complétée mais rien du tout ne se passe :( j'ai beau lire et relire et je vois pas où ça cloche.
J'ai essayé dans le code les coordonnées de cellules relatives et absolues et rien.

Pour simplifier j'ai fait un fichier exemple limité à 2feuilles : une où on saisit, l'autre où il y a les raccourcis pré-tapés. J'ai aussi simplifié la macro en enlevant des paragraphes, il reste ceux qui permettent :
- d'insérer les formules de rechercheV pour ramener les raccourcis pré-tapés (zone débit et zone crédit),
- de recopier la ligne au-dessus (également par insertion de formules).
Si la macro marche avec ces paragraphes, les autres suivront car ce ne sont que des copies avec des cellules différentes.

Si tu as un moment (ou qq'un d'autre je suis ouvert à tous les avis) tu peux stp jeter un oeil dans le fichier Exemple ???
Le code de la macro est tapé dans le Module 2.
Si ça se trouve c'est un truc tout con mais ça peut être tout et n'importe quoi vu que je connais pas :eek:
Bonne soirée !!!
 

Pièces jointes

  • Exemple raccourcis1.xls
    43 KB · Affichages: 37

Pierrot93

XLDnaute Barbatruc
Re : Formules volatiles pour raccourcis

Bonjour ccdouble6

Tout d'abord 1ère remarque la macro lié à l'évènement change de ta feuille doit être placée dans le module de la feuille en question et non dans un module standard.

Pour tes formules, cela serait étonnant que cela fonctionne ainsi, ci dessous exemple de code que fourni l'enregistreur de macro, avec une RECHERCHEV :

Code:
    ActiveCell.FormulaR1C1 = "=VLOOKUP(RC[1],Feuil2!RC:R[20]C[1],2,FALSE)"

D'autre part, tu utilises une variable "i", sauf erreur elle est déclarée nul part, mais si tuveux l'utiliser dans differents modules ou procédure il faut qu elle soit déclarée différemment, voir l'aide VBA sur la portée.

Un petit conseil, n'hésites pas à te servir de l'enregistreur de macro, il permet de débuter beaucoup plus facilement.

barre de menu => Outils +> Macros => nouvelles Macros.

Il te donnera des indications précieuses sur la façon de codifier.

Bon courage et bonne journée
@+
 

G.David

XLDnaute Impliqué
Re : Formules volatiles pour raccourcis

Salut
j'ai des probleme d'affichage
les coordonnées passe par deux systeme en vba range("L8")=cells(8,12) pour les coordonnée relative il faut pointer une cellule par ex la cellule active: activecell.select le relatif est obtenu par la commande offset activecell.offset(0,2) (même ligne est deux colonnes à droite (-2 deux colonne à gauche))
les coordonnées L8C12 marchent aussi tout depends de la définition donné
si ceci peut t'éclairer
Cordialement
G.David
 

ccdouble6

XLDnaute Occasionnel
Re : Formules volatiles pour raccourcis

Bonjour Pierrot93 et G.David,

Merci G.David pour ces infos, je garde l'astuce "offset" en réserve, encore que je ne vois pas comment l'adapter ici puisque rien ne se fait par rapport à la position de la cellule mais selon ce qui est saisi dans les cellules... mais merci :)

Merci Pierrot93 je comprends mieux :) donc je vais laisser les parties "sub" dans le module2, et dans le module de chaque feuille je mettrai la partie principale (donc j'enlèverai le "Sheets()" puisqu'on sera déjà dans le module d'une feuille précise), c'est bien ça?

Pour ce qui est de la RechercheV, je ne la fais pas par macro justement : je suis plutôt "formuliste" et le but c'est que la macro insère la formule RechercheV dans les cellules que je lui indique. En fait je remarque que c'est la même chose que tu as mis mais en anglais et avec les références en anglais, c'est pour les avoir en français que j'ai ajouté le "local" :
FormulaR1C1Local = ""
Du coup ici l'enregistreur, qu'il m'est déjà arrivé d'utiliser, ne me servira pas vraiment, à moins qu'il puisse comprendre que je cherche à insérer des formules toutes faites d'après des conditions, ce qui m'a l'air assez compliqué à enregistrer :( quoique je l'ai jamais tenté non plus :eek:

La variable i n'est pas déclarée??? mais.. et le "Dim i as integer"? c'est pas cette phrase qui déclare la chose?
Ah ben oui si je sépare en plusieurs modules il faudra je pense redéclarer partout les variables...

Merci beaucoup en tout cas !!!!
Je reste toujours ouvert à toutes suggestions.
Bonne journée !!

PS : je déménage demain donc je risque de ne pas pouvoir me reconnecter durant qq jours.
 

Pierrot93

XLDnaute Barbatruc
Re : Formules volatiles pour raccourcis

Re ccdouble6

j'ai fais un petit modèle de fichier utilisant les differentes propriétés que je connais, afin de renvoyer la formule RECHERCHEV dans la cellule de la colonne B.

Le code évènementiel est placé dans le module de la feuille 1, et se déclanche dès l'instant ou il y a modification, dans cette même feuille, sur la plage de cellules A2 A10.

J'ai essayé de commenter le code du mieux que je pouvais, j'espère avoir été clair.

Si cela peut t aider !!!

Bon déménagement et bonne fin de journée.
@+
 

Pièces jointes

  • classeur1.xls
    19.5 KB · Affichages: 50
  • classeur1.xls
    19.5 KB · Affichages: 40
  • classeur1.xls
    19.5 KB · Affichages: 38

ccdouble6

XLDnaute Occasionnel
Re : Formules volatiles pour raccourcis

Ouiiiii merci Pierrot93 :)
Hahahahaha c'est extra et ça marche !!! :D

Ben franchement merci je pars le coeur léger, tu m'enlèves une sacrée épine !!!
Je pensais pas que dans la barre de formules il mettrait la formule en français alors qu'elle est tapée en version anglaise dans la macro, en tout cas c'est pile poil ce qu'il me fallait :)
Bon il me faut encore adapter ce modèle mais ça ira je pense, c'est un pas de géant, j'espère pouvoir m'y remettre mercredi une fois installé et au calme :)

Je te tiens au courant en tout cas.
Merci encore et bonne fin de soirée !!!
 

ccdouble6

XLDnaute Occasionnel
Re : Formules volatiles pour raccourcis

Bonsoir le forum !! Bonsoir Pierrot93 !!!

Bien arrivé à destination, mais j'ai eu quelques difficultés de reconnexion ;)
Voilà je suis très pres du but je le sens mais j'ai un souci avec le fichier d'aide, et comme je n'ai pas retrouvé mon cd office2000 je suis mal...

J'ai adapté le texte de ta macro à la mienne et j'ai un petit problème ressorti lors du test.
Le compileur me déclare une erreur de syntaxe dans le titre de la sub ainsi tapé :
Sub RaccSansM ()

Ce n'est pas comme ça qu'il faut le mettre pourtant? Je comprend pas ce qu'il veut, faut-il déclarer qqchose là aussi ??? :confused:

Autre chose aussi, j'ai bien mis dans la macro la formule en anglais VLOOKUP pour RechercheV, mais comment dit-on DECALER() en anglais ???

Merci d'avance pour ces détails !!!
Bonne soirée !!!
 

Pierrot93

XLDnaute Barbatruc
Re : Formules volatiles pour raccourcis

Bonjour Ccdouble6,

J'ai adapté le texte de ta macro à la mienne et j'ai un petit problème ressorti lors du test.
Le compileur me déclare une erreur de syntaxe dans le titre de la sub ainsi tapé :
Sub RaccSansM ()

Je pense que l'erreur vient du fait que ta macro est placé dans le module d'une feuille et que tu veux intervenir sur une autre, a moins que tu ais 2 fois le même nom de macro ?

Le mieux est de la placer dans un module standard. J'en ai créé un dans le classeur ci joint (module1).

Pour ta formule "DECALER" en anglais c'est "OFFSET", par contre tu dois pouvoir t'aider de l'enregistreur de macro afin de déterminer les bons codes à renseigner.

Bon courage et bonne journée
@+
 

Pièces jointes

  • classeur1.xls
    28 KB · Affichages: 29
  • classeur1.xls
    28 KB · Affichages: 32
  • classeur1.xls
    28 KB · Affichages: 29

ccdouble6

XLDnaute Occasionnel
Re : Formules volatiles pour raccourcis

Bonjour Pierrot93,

Encore moi dslé, je t'ai mis en fichier joint le fichier Exemple1 de l'autre fois avec les modifs que tu m'as indiquées dans ton fichier. J'ai tout mis dans le code de la feuille1.
A priori dans un module il faudrait en plus indiquer dans chaque ligne la feuille concernée Sheets(...) car il y aura au final 6 feuilles qui appelleront cette macro, ou alors mettre 6 paragraphes, 1 par feuille, mais ça va être lourd... enfin s'il le faut vraiment...

Les noms des Sub sont uniques et maintenant dans le fichier le compileur me reproche la syntaxe du titre principal de la macro, je suis largué c'est pourtant celui que tu avais utilisé :confused:

J'ai testé l'enregistreur de macros mais il ne m'est pas d'un grand secours, hormis pour savoir un peu le texte à employer et je vois que l'insertion de formules correspond à ce que tu m'avais dit (Exemple2).
Quand j'efface le A pour ensuite le remettre, il ne se passe plus rien.
Une chose m'étonne : nulle part dans la macro enregistrée (module3) je ne vois de référence à la feuille où j'ai tapé A, comment le programme peut-il savoir que c'est dans cette feuille et pas l'autre??
Ou alors il ne le sait pas, du coup c'est normal que ça ne marche pas.

Peux-tu me dire si tu décèles un truc mal dit dans la macro de l'exemple1 ??? le fichier que tu m'as filé est impec tout fonctionne, mais dans mon fichier c'est autre chose... on dirait qu'à partir du moment où j'utilise des SUB et des IF le compil me pète un plomb :(

Par ailleurs je ne sais pas comment lui dire dans chaque paragraphe qu'avant d'appeler la Sub il faut effacer le contenu des cellules de Target.Offset(2, 0) à Target.Offset(9, 0). je pense que si j'utilise pas le Target.Offset le compileur va râler une fois arrivé à ce niveau.
J'ai mis aussi l'exemple2 en fichier joint pour que tu vois à ton tour ce que j'ai enregistré.

Merci beaucoup de ton soutien, et franchement dslé de te harceler comme ça :eek: j'imaginais vraiment pas que ce serait aussi dur tout ça!
Bonne soirée!!
 

Pièces jointes

  • Exemple1.xls
    44.5 KB · Affichages: 33
  • Exemple1.xls
    44.5 KB · Affichages: 28
  • Exemple1.xls
    44.5 KB · Affichages: 32
  • Exemple2 - enreg de macros.xls
    43 KB · Affichages: 36

Pierrot93

XLDnaute Barbatruc
Re : Formules volatiles pour raccourcis

Bonsoir ccdouble6,

j'ai modifié l'exemple 1, à priori il y avait des lignes vides ou avec des espaces entre chaque sub ?

J'ai déplacé tes macros dans le module 1, comme ca éventuellement tu pourras également les appeler pour d'autres feuilles, à condition de vouloir executer exactement le mêmes actions.

J'ai remplacé "Target" dans les macros par un range en utilisant une variable PUBLIC, l'adresse de la cellule modifiée.

Si tu veux effacer le contenu des cellules, c'est la synthaxe ci dessous, à placer àprès avoir défini la variable "MonAdresse" dans l'évènement change.
Code:
Range(Range(MonAdresse).Offset(0, 2), Range(MonAdresse).Offset(0, 9)).ClearContents

J'ai sans doute oublié des choses, n'hésites pas à revenir si problèmes.

bon courage et bonne soirée
@+
 

Pièces jointes

  • Exemple.xls
    40.5 KB · Affichages: 35
  • Exemple.xls
    40.5 KB · Affichages: 30
  • Exemple.xls
    40.5 KB · Affichages: 33

ccdouble6

XLDnaute Occasionnel
Re : Formules volatiles pour raccourcis

Bonsoir Pierrot93 !!

Super !! merci :) je vais voir ça dès que je pourrai, je devrais pouvoir me reconnecter samedi aprem donc je te dirai.
Déjà je peux dire qu'il y avait bien des lignes vides entre les sub, j'ignorais que le compileur pouvait réagir à ça :eek:

Dis donc à la fin j'ai envie d'ajouter ton nom avec le mien sur le fichier!! c'est la moindre des choses c'est qd-même un sacré boulot que tu abats merci vraiment merci :)
Bonne soirée, à samedi !!
 

Discussions similaires