Procédure VBA à partir d'un enregistrement de macro

Bonjour,

J'ai une formule RechercheV que je souhaite appliquer dans mon tableau de façon automatique.

Je l'ai enregistré et ça m'a donnée un code VBA. J'ai ensuite associé ce code à un bouton mais ce que j'aimerais faire c'est que ce code soit plus simple et qu'on ne voit pas l'éxecution du code. Donc que ce code soit sous forme d'une procédure.

Si quelqu'un peut m'aider sur ce sujet, je suis débutante en macro-VBA.

Je joins mon fichier pour être plus claire.

18tbd-test.xlsm (25.76 Ko)

Merci d'avance

Sam

Salut Sam,

Selon moi Procédure, Macro et Code VBA sont passablement synonymes.

Maintenant ce qui serait intéressant de comprendre, c’est de savoir si tu désires des formules dans tes cellules à la fin de la macro à modifier/à créer ou uniquement le résultat de ces RECHERCHEV ?

Tu dis que tu ne voudrais pas que l’on voit l’exécution du code, donc j’imagine que tu as sur ton fichier réel bien plus de lignes que sur le fichier exemple reçu, non ? Parce qu’avec le fichier reçu, on ne voit presque pas l’exécution de ta macro enregistrée. Pour cette partie du problème, tu peux placer l’instruction

Application.ScreenUpdating = false

au début de ton code.

Attention : lorsque tu as enregistré ton code, tu avais déjà sélectionné la cellule B2 et ton code suppose que c’est bien cette cellule qui est sélectionnée lorsque tu le lances. Si par hasard tu as sélectionné une autre cellule lors du lancement de ton code, tu auras des surprises

Amicalement.

Salut Yvouille,

D'accord je comprends.

Alors j'ai pas trouvé d'autres formules à appliquer c'est pour cela que j'ai mis une RechercheV.

Mais je suis ouverte aux propositions de formules

Concernant la taille de mon fichier il y aura d'autres lignes mais il ne sera pas si énorme.

Je vais ajouter l'instruction que tu m'as donné, merci

Effectivement j'avais vu Ca mais je ne voyais pas a quoi cela était du.

Merci, faut-il que mon curseur soit placé autre part ? Et qu'ensuite je sélectionne ma cellule au moment de l'enregistrement ?

Amicalement,

Sam

Salut Sam,

Sam_P a écrit :

Alors j'ai pas trouvé d'autres formules à appliquer c'est pour cela que j'ai mis une RechercheV.

Mais je suis ouverte aux propositions de formules

Je crois que tu as mal compris ma question. Dans le fichier ci-joint, si tu cliques sur le bouton en place, des calculs sont effectués par la macro et les résultats sont inscrits dans la colonne C et cette même macro place dans la colonne D des formules qui effectuent les mêmes calculs. Ma question était donc de savoir si tu désirais des formules comme dans la colonne D ou les résultats des calculs désirés uniquement comme dans la colonne C. L’avantage de la solution avec les formules inscrites est que si tu dois modifier les données de base par la suite – par exemple si tu dois modifier les données des colonnes A et B dans mon fichier-exemple – les résultats sont actualisés dans la colonne D ; l’inconvénient étant que si tu as une quantité de formules sur ta feuille, ça peut passablement ralentir le tout. Ce n’est donc pas le choix de ta formule RECHERCHEV() que je mettais ''en doute'', mais son utilisation finale.

Merci donc de quand même répondre à ma question à ce sujet.

Sam_P a écrit :

Effectivement j'avais vu Ca mais je ne voyais pas a quoi cela était du.

Euh, tu parles de quoi ? Un petit rappel du texte de ton interlocuteur – comme je l’ai fait dans le présent message – permet de savoir de quoi l’on parle. Mais il faut alors le faire dans les règles de l’art, de manière à ce que l’on voit immédiatement quel texte appartient à qui et il faut faire attention de ne pas reprendre une trop grande partie du texte de son interlocuteur, au risque que ça ne serve plus à rien. Ma technique : je clique sur le bouton ''Répondre'', je sélectionne dans le message de mon interlocuteur la partie de texte que je désire reprendre et je clique sur le bouton ‘Citer’. La partie de texte nécessaire apparait alors dans le message en préparation avec les bonnes balises.

Maintenant, après m'être quand même un peu creusé la tête, j’ai compris que tu parlais de ta macro enregistrée pour laquelle tu n’avais pas enregistré en tout premier la sélection de la cellule B2. Alors effectivement qu’il faut le faire – ou corriger ta macro enregistrée par la suite – au risque d’avoir des mauvaises surprises.

L’utilisation d’un correcteur d’orthographe éviterait déjà pas mal de fautes d’orthographe et rendrait la lecture de tes textes plus agréable

A te relire.

8classeur2.zip (8.45 Ko)

Salut Yvouille,

Désolé j'ai répondu assez rapidement hier après-midi c'est pour cela que ma réponse n'était pas claire.

Yvouille a écrit :

Dans le fichier ci-joint, si tu cliques sur le bouton en place, des calculs sont effectués par la macro et les résultats sont inscrits dans la colonne C et cette même macro place dans la colonne D des formules qui effectuent les mêmes calculs

J'ai regardé ton fichier joint mais dans la colonne D le bouton n'affiche aucun calcul... Mais de tout façon j'ai compris où tu voulais en venir.

Yvouille a écrit :

Ma question était donc de savoir si tu désirais des formules comme dans la colonne D ou les résultats des calculs désirés uniquement comme dans la colonne C.

Oui je préférerais des formules comme dans la colonne D car je ne pense vraiment pas ajouter plus de 20 lignes dans mon fichier, donc le problème de ralentissement ne se poserait pas et j'aurais même tendance à modifier souvent les données de base.

Yvouille a écrit :

j’ai compris que tu parlais de ta macro enregistrée pour laquelle tu n’avais pas enregistré en tout premier la sélection de la cellule B2. Alors effectivement qu’il faut le faire – ou corriger ta macro enregistrée par la suite – au risque d’avoir des mauvaises surprises.

Alors j'ai modifié mon enregistrement et la "mauvaise surprise" n'apparait plus, merci

Amicalement,

Sam

Salut,

Désolé pour ce fichier-démo incomplet ; j’ai oublié d’enregistrer la dernière modification.

Ton fichier en retour avec ta macro enregistrée épurée.

J’ai trouvé plus prudent d’effacer à chaque fois toutes les données en place car sinon tu peux également avoir de mauvaises surprises à ce niveau. Si tu lances la macro une première fois et que tu modifies manuellement par exemple la cellule B3 – tu y inscris par exemple 111 – ce chiffre n’est pas remplacé lors du lancement de la macro sans l’instruction :

Range("B2:D" & Range("A" & Rows.Count).End(xlUp).Row).ClearContents

Amicalement.

10tbd-test-v1.xlsm (26.73 Ko)

Yvouille,

Alors j'ai testé et cela fonctionne à merveille

Merci beaucoup.

J'ai une dernière question : si je veux que ce code soit appliqué à un autre tableau de destination (donc le nom des colonnes ne sera pas le même...).

Dois-je modifier le nom des colonnes dans la macro ? Ou dois-je réenregistrer une macro avec ces mêmes formules dans le nouveau tableau de destination ?

Amicalement,

Sam

Salut Sam,

Il m’est difficile de te faire un cours de macro complet ! Mais prends déjà l’habitude de consulter l’aide Excel qui est très bien faite. En plaçant ton curseur sur un mot clef – par exemple FormulaR1C1 – et en tapant F1, tu obtiens déjà beaucoup de renseignements.

Ensuite ne te gêne pas de faire des essais. Si tu prends la copie d’un fichier et que tu t’en donnes à cœur joie, tu apprendras des erreurs que tu auras la chance de créer.

Enfin internet est une source intarissable de renseignements de tous genres, plus ou moins utiles.

Ceci étant dit, l’enregistreur de macro enregistre les formules R1C1 (R pour Row, C pour Column) au format relatif, c’est-à-dire que les références sont placées entre crochets []. Ainsi R[1]C[2] désigne la cellule 1 ligne plus basse et deux colonnes plus à droite. Si tu écrits dans ta macro : Range("A1").FormulaR1C1 = "= R[1]C[2]", tu verras sur ta feuille Excel, en A1 la formule =C2. Et si tu écrits : Range("A10").FormulaR1C1 = "= R[1]C[2]", tu verras en A10 la formule = C11.

S’il n’y a pas de déplacement de ligne ou de colonne, on indique simplement R ou C sans chiffre entre crochets alors que si la référence est plus haute ou plus à gauche, on inscrit les chiffres en négatif. Range("E10").FormulaR1C1 = "= RC[-1]" inscrirait en E10 la formule =D10 car le R, c’est-à-dire le Row, c’est-à-dire la ligne, serait identique à la cellule dans laquelle est placée la formule alors que le C, c’est-à-dire la Column, c’est-à-dire la colonne, serait 1 colonne plus gauche.

Si tu désires modifier tes macros pour avoir des références absolues, tu dois placer tes chiffres de référence sans crochets. Donc R1C1 fera toujours référence à la cellule A1 alors que R10C1 fera toujours référence la cellule A10.

Tu peux bien entendu également utiliser des références mixtes. Par exemple des lignes relatives et des colonnes absolues (R[-8]C33) ou le contraire (R1C[-8]).

Une petite démo dans le fichier ci-joint. Tu remarqueras que les deux dernières lignes sont des copies des deux premières lignes appliquées à d’autres cellules.

Tout ceci pour te dire que selon comment tu veux appliquer le code fourni dans le dernier message à un autre fichier, tu risques d’avoir des bonnes ou des mauvaises surprises. Mais maintenant que tu m’as pratiquement promis que tu n’allais plus te gêner de faire tes propres essais, je pense que tu t’en sortiras. Autrement reviens avec ton problème précis.

Une dernière chose : tu as bien compris que lors de l’utilisation du code que je t’ai fourni, l’incrémentation vers le bas de tes formules sur ton fichier ne fonctionne bien que parce que tu y as placé un tableau dans la plage A1:D55 ? Si tu utilisais ce code sur une autre feuille sur laquelle tu n’aurais pas un tel tableau, seules les cellules B2, C2 et D2 seraient remplies.

Amicalement.

4classeur2.zip (8.48 Ko)

Salut Yvouille,

Oui c'est vrai que l'aide EXCEL est bien faite mais il y a tellement de choses que parfois je ne sais pas par où commencer.

Du coup je me suis inscrite à un cours en ligne afin de structurer chaque chose que j'aimerais tester et apprendre

Et merci pour les renseignements des formules car je n'avais jamais compris la signification des crochets, des "R" et "C" et des signes négatifs, etc.

Mais maintenant c'est bon j'ai pu placer ma macro dans un autre fichier avec tes indications au niveau des références absolues ou mixtes et à force de faire plusieurs essais, ça fonctionnne parfaitement. (Y)

Yvouille a écrit :

Une dernière chose : tu as bien compris que lors de l’utilisation du code que je t’ai fourni, l’incrémentation vers le bas de tes formules sur ton fichier ne fonctionne bien que parce que tu y as placé un tableau dans la plage A1:D55 ? Si tu utilisais ce code sur une autre feuille sur laquelle tu n’aurais pas un tel tableau, seules les cellules B2, C2 et D2 seraient remplies.

Oui effectivement j'avais compris qu'en mettant sous forme de tableaux l'incrémentation se faisait directement, c'est pour cela que j'ai choisi cette forme là . Donc j'ai bien mis tous mes autres fichiers où j'ai besoin de la macro sous forme de tableau.

Merci beaucoup pour ton aide et tes conseils

A un prochain problème peut-être

Amicalement,

Sam

Salut,

En passant un peu en revue tes messages, je me rends compte que tu n'as pas connu grand monde sur ce Forum

Mais bon, c'est peut-être un peu toi qui a fâché les Dieux - qui te punissent maintenant à leur manière - en t'étant inscrit sur ce site le jour de mes 54 ans

Au plaisir de lire, peut-être, ta troisième demande.

Bonjour Yvouille,

Je n'avais pas vu ta réponse depuis le temps...

Ahah je ne pense pas que ce soit une punition

Bon j'ai de nouveaux un autre problème, j'ai un code qu'un membre m'a aidé à corriger mais ce code me donne une erreur 1004 (erreur définie par l'application ou l'objet). J'ai bien compris ce que signifiait cette erreur mais je ne vois pas comment la débboger.

Peux-tu m'aider stp ?

Tu trouveras mon problème dans le sujet "Insérer des lignes après actualisation" dans mes messages.

Merci d'avance pour ton aide.

Sam (l'éternelle apprentie )

Rechercher des sujets similaires à "procedure vba partir enregistrement macro"