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

Salut Pierrot93 !!

C'est bon j'ai testé l'exemple et c'est super, on touche au but !!!
Au début le fichier faisait s'insérer les formules Vlookup là où il fallait mais la recherche n'aboutissait pas (#N/A), j'ai compris que chaque cellule du tableau doit chercher non pas dans C(-1) mais dans C(-X) avec X= l'écart avec la colonne C où est tapée la lettre : du coup c'est bien la lettre tapée qui est cherchée et ça marche !!!!
Et le raccourci 1 marche aussi c'est génial !!! :D
Je t'ai joint le fichier amélioré.

J'aimerais quand-même comprendre plus exactement ce que veut dire MonAdresse, et comment le programme sait qu'il s'agit de la colonne C ?? on ne le lui dit nulle part... Du coup je ne sais pas comment la traiter dans Change : je mets "Dim MonAdresse as String" c'est ça ??

Et il y a un petit problème lorsque je cherche à effacer en même temps (sélection de la zone) plusieurs lettres dans la colonne C, cela génère une erreur type 13 "incompatibilité de type" que je ne saisis pas, lorsque je débogue le compileur me signale la ligne :
If Target.Offset(0, 24) = 1 Then
Alors je me demande s'il ne faudrait pas aussi préciser le Else (=0 donc il ne faut rien faire ?? c'est bizarre mais bon :confused: )
Qu'est-ce que t'en penses ???
Je n'ai pas retrouvé le cd office2000 je suis dégouté :mad:

Je reste à l'écoute pour tout autre info,
Merci beaucoup !!! :)
A+ !!
 

Pierrot93

XLDnaute Barbatruc
Re : Formules volatiles pour raccourcis

Bonsoir ccdouble6

j'ai rajouté une boucle "for each" dans l'évènement change de la feuille afin de ne plus avoir le message d'erreur quand tu supprimes plusieurs cellules.

"MonAdresse" est une variable "public" initialisée par l'adresse de la cellule modifiée, si cette dernière est dans la plage C11:C1000. L'évènement est uniquement declanché si la modification est faite dans cette plage. C'est la ligne de code ci-dessous qui controle la plage concernée :

Code:
If Not Intersect(Target, Range("C11:C1000")) Is Nothing Then

Surtout redéfinie pas dans l'évènement change "MonAdresse", elle est définie dans le module 1.

bonne soirée et bon week end.
@+
 

Pièces jointes

  • Exemple.xls
    48 KB · Affichages: 65
  • Exemple.xls
    48 KB · Affichages: 64
  • Exemple.xls
    48 KB · Affichages: 55

ccdouble6

XLDnaute Occasionnel
Re : Formules volatiles pour raccourcis

Salut Pierrot93,

:confused: c'est curieux j'aperçois pas ma précédente réponse à ton message.. enfin bon je te disais que j'allais tester le fichier..
Et là j'ai commencé à tester la macro sur le fichier définitif et ça mAAArche!!! :D
Par contre un petit détail :
Une des formules à insérer (raccourci 4, celui-là je ne l'ai pas mis dans l'exemple) comporte un "" ("rien") dans un IF et le compileur pète un plomb quand il voit ça. j'ai testé et ça vient bien de ça :( alors dès que je veux que la formule affiche un texte ou rien ça ne marche pas : le compileur ne semble pas apprécier les doubles guillemets à l'intérieur des doubles guillemets servant à encadrer la formule à insérer...

Une solution envisagée :
Utiliser la formule CONCATENER() peut-être qu'à l'intérieur de () les "" passeront je ne sais pas encore puisque je ne sais pas comment la dire en anglais...
Si tu as une idée, moi je sèche là c'est du pur syntaxique... :)

Merci beaucoup!! A+!!
 

Pierrot93

XLDnaute Barbatruc
Re : Formules volatiles pour raccourcis

Bonsoir ccdouble6,

désolé de n'avoir pu te répondre plus tôt, mais j'étais en vacance.

pour ton problème essaies peut être le code ci dessous :

Code:
    ActiveCell.FormulaR1C1 = "=CONCATENATE(R[-3]C[-3],"""",R[-6]C[-2])"

a priori ce code marche chez moi, sous 2003, j'espère que j'ai bien compris ta question.

bonne soirée
@+
 

ccdouble6

XLDnaute Occasionnel
Re : Formules volatiles pour raccourcis

Coucou Pierrot93 !!

ENORME MERCI
Tout fonctionne c'est vraiment merveilleux !! bon on y a mis du temps et de la ressource et c'est à toi que je dois cette réussite :) :)
Puis-je au moins mettre ton nom dans mon fichier?? si un jour il dépasse le cadre de mon boulot on ne sait jamais lol :cool:

JOYEUX NOEL ET D'AVANCE UNE BONNE ANNEE !!!
Et à bientôt!!! :D
 

Statistiques des forums

Discussions
312 147
Messages
2 085 765
Membres
102 968
dernier inscrit
Tmarti