Re : macro qui crée un compte de résultat à partir de balance
Bonsoir Luno123,
Pas de quoi, je continue à suivre ton "post" chaque fois que je peux, pour t'épauler.
J'ai regardé ta pièce jointe, comme tout est parfait pour l'instant, et que je n'ai rien à dire, je profite de l'occasion pour te transmettre cette astuce supplémentaire qui t'aidera sur ce fichier mais également tous les futurs fichiers.
Imaginons que je ne t'ai pas donné le code :
.ClearContents qui permet d'effacer le contenu d'une cellule (ou plusieurs cellules).
Que faire? Tout simple :
-> lancer l'enregistreur de macro : cliquer sur "outils" / "macro" / "nouvelle macro..."
-> dans la zone "nom de la macro" : mettre le nom de ta macro (pas le droit aux espaces), par exemple
TestEffacementCellules
-> dans la zone Touche de raccourci : pas la peine de renseigner. Rarement utilisé, c'est pour créer un raccourci clavier. Par exemple si tu écris "R", à chaque fois que tu cliqueras sur "Ctrl" + "R", la macro se lancera. Pas utilisé car il faut retenir le raccourci clavier et seul le concepteur du fichier le connaîtra. Donc on préfère mettre des boutons pour lancer une macro, où la faire déclencher automatiquement par exemple à l'ouverture du fichier, à sa fermeture, lorsque l'utilisateur saisie "..." dans la cellule ..., ou tout pleins d'autres méthodes.
-> dans la zone "enregistrer la macro dans" : laisser la valeur par défaut "ce classeur"
-> dans la zone "description" : écrire ce que fera la macro. Là tu as le droit aux espaces et Cie.
-> puis cliquer sur "ok"
-> a partir de maintenant, et jusqu'à ce que tu arrête la macro, Excel enregistrera et traduira toutes tes opérations en language VBA.
-> dans le cas présent, à l'aide de la souri tu sélectionne les cellules : C9 à C11 et C15 à C22 et C26 à C28 et C30 à C36 et C40 à C45 et C47 à C62 et C65 à C67 et C69 à C73
(pour faire une sélection multiple utiliser la touche "Ctrl" -> tu connais déjà je suppose?)
-> puis appuyer sur la touche "suppr" pour effacer le contenu de toutes ces cellules.
-> arrêter la macro (par exemple en cliquant sur "Outils" / "Macro" / "Arrêter la macro"
Ensuite tu vas dans l'éditeur de macro VBA en cliquant sur "Alt" + "F11"
Tu regarde dans Module1 ou Module2 ou Module... ta macro est écrite
Dans notre cas, tu verras un code dans ce style :
ActiveWindow.SmallScroll Down:=-15
Range("C9:C11,C15:C22,C26:C28,C30:C36,C40:C45,C47:C62,C65:C67,C69:C73").Select
Range("C69").Activate
Selection.ClearContents
La première ligne de code indique que j'ai utilisé la roulette de ma souris pour descendre de 15 crans vers le bas. Cela ne sert strictement à rien de déplacer la fenêtre vers le bas! Donc on peut supprimer cette ligne purement et simplement.
La seconde ligne signifie qu'on a sélectionné la zone ...
Tu regarde le code et vois qu'il y a entre C9 et C11 ":" or tu sais que tu as sélectionné les cellules C9 à C11.
Donc au cas où tu aurais oublié, tu saisi ainsi que pour sélectionner les cellules C9 à C11 il faut mettre ":" entre les deux adresses.
Moyen mémo technique pour le retenir, lorsque tu utilise la fonction SOMME() dans excel, il utilise exactement la même syntaxe! Pour dire, faire la somme des cellules C9 à C11, tu écris :
=SOMME(C9:C11)
Ensuite, tu regarde le symbole situé entre C11 et C15, c'est une virgule. Donc en déduis très justement que pour séparer chaque zone de sélection, il faut mettre une virgule entre chaque zone (zone C9 à C11 et la zone C15 à C22).
La troisième ligne indique que la cellule active, la cellule où tu te trouve est la cellule C69! Dans notre cas, nous n'avons pas besoin de cela. Donc nous l’effaçons. Rassure toi, au début, savoir distinguer les choses utiles et inutiles est difficile. Bref, mieux vaut trop en laisser qu'enlever un truc utile.
La quatrième ligne indique qu'il faut effacé le contenu des zones précédemment sélectionné.
Bref, après nettoyage on obtient le code suivant :
Range("C9:C11,C15:C22,C26:C28,C30:C36,C40:C45,C47:C62,C65:C67,C69:C73").Select
Selection.ClearContents
A tout hasard, on test la macro ainsi obtenu pour s'assurer que nous n'avons pas enlevé un truc important. Tout fonctionne c'est parfait! (s'il y a un bug, c'est surement que tu as effacé une ligne de code utile, donc il te suffit de revenir en arrière et remettre la dernière ligne de code effacé, et ainsi de suite)
On peut donc maintenant raccourcir un peu le code. Comme indiqué, le fait de
sélectionner allonge le code, fait perdre du temps à Excel donc on le supprime.
Nous arrivons donc au code suivant :
Range("C9:C11,C15:C22,C26:C28,C30:C36,C40:C45,C47:C62,C65:C67,C69:C73").ClearContents
Il faut savoir que lorsqu'on ne précise pas le nom de la feuille où il faut effectuer cette opération : effacer le contenu des cellules ... par défaut excel le fera sur la feuille active (la feuille sur laquelle se trouve Excel à ce moment).
Soit c'est la bonne feuille, donc pas la peine d'alourdir ni d'allonger le code pour dire à Excel quelque chose qu'il sait déjà.
Soit tu veux travailler sur une autre feuille, auquel cas tu le précise :
Sheets("nom de ta feuille").Range("C9:C11,C15:C22,C26:C28,C30:C36,C40:C45,C47:C62,C65:C67,C69:C73").ClearContents
Oui mais là tu vas me dire très justement : "je ne connais pas la syntaxe
Sheets("nom de ta feuille"). comment je pouvais le deviner?
Tu te place volontairement sur le mauvais onglet, puis tu utilise à nouveau l'enregistreur de macro, et là... tu sera obligé, avant de sélectionner tes cellules, CLIQUER sur l'onglet adéquat.
Et une fois la macro arrêté, lorsque tu iras voir ta macro, tu y verras la solution :
Sheets("nom de ta feuille").
Sinon, comme vu précédemment tu peux faire ainsi :
With Sheets("nom de ta feuille")
.Range("C9:C11,C15:C22,C26:C28,C30:C36,C40:C45,C47:C62,C65:C67,C69:C73").ClearContents
End With
Oui mais si tu travail sur la feuille "nom de ta feuille" qu'UNE fois, l'utilisation du
With... End With n'est pas rentable. Autant prendre la solution juste au dessus. Plus court à écrire : 2 lignes de code en moins.
Ou bien comme cela :
Sheets("nom de ta feuille").Select
Range("C9:C11,C15:C22,C26:C28,C30:C36,C40:C45,C47:C62,C65:C67,C69:C73").ClearContents
Mais là tu vas me dire, pourquoi
sélectionner la feuille? Car imaginons que l'utilisateur est sur un onglet "autre", et qu'à la fin de la macro tu veuille que la macro rende la main à l'utilisateur sur l'onglet "nom de ta feuille". Autant la sélectionner dès le départ. Ca nous arrange pour le code, et cela nous évitera d'avoir à le faire à la fin.
luno123 à dit:
ça fait plaisir de croiser (sur le net) des gens comme toi
Plaisir partagé. Ca fait plaisir de rencontrer quelqu'un qui veut comprendre ce qu'il fait et l'assimiler pour l'utiliser ultérieurement sur d'autres fichiers. Et merci d'avoir fait l'impasse sur mes fautes d'orthographe.
Bon apprentissage et bon courage.