Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
Il y a beaucoup de post sur le sujet mais je ne trouve pas la solution.
Je souhaiterais écrire une macro que puisse faire la chose suivante :
1) Trouvé la dernière ligne vide de la colonne C
2) Envoyer dans cette me ligne (mais dans plusieurs colonnes) une formule de SOUS.TOTAL.
La somme commence depuis la ligne 11
Par exemple (ici formule a envoyer dans la ligne C64 ) je souhaiterai obtenir dans la dernière ligne des colonnes C, J et M un =SOUS.TOTAL(9;C11:C63)
Re : Plusieurs ( SOUS.TOTAL ) dans la dernière ligne
Bonjour Atiom,
Avec un peu d'implication, toi aussi tu peux répondre à ta question. Laisse toi guider et tu verras que c'est facile.
-> ouvre ton fichier
-> clic sur "Outils" / "Macro" / "Nouvelle macro..."
-> dans la zone "Nom de la macro" écrire par exemple SousTotal (le nom de ta macro ne doit pas comporter d'espace).
-> dans la zone "Touche de raccourci" : pas la peine
-> dans la zone "Enregistrer la macro dans" : laisse la valeur par défaut -> "Ce classeur"
-> dans la zone "Description" : tu peux te lâcher, écrit ce que tu veux (espaces acceptés)
-> clic sur "ok"
A partir de maintenant, la macro enregistre TOUT ce que tu fais.
-> clic sur la cellule C65536
-> appuie sur "CTRL" + "flèche vers le haut"
(l'écran va automatiquement sur la dernière cellule pleine de ta colonne C)
-> clic sur la case juste en dessous
-> écrit dedans
Code:
=SOUS.TOTAL(9;C11:[I][COLOR="Blue"]...C63 (dans ton exemple ci-dessus)...[/COLOR][/I])
-> valide ta saisie en cliquant sur entrée
-> copier/coller ta fonction dans la colonne J et M
Tu as fini, tu peux maintenant arrêter ta macro :
-> cliquer sur "Outils" / "Macro" / "Arrêter l'enregistrement"
Ta macro est maintenant définitivement terminé. Et cela sans aucune connaissance en VBA 😉
Maintenant, il faut regarder la macro ainsi obtenu et enlever les choses inutiles.
Pour cela, envoie nous ta macro ainsi obtenu, nous t'aiderons à la comprendre et la nettoyer. Pour cela :
-> Cliquer sur "ALT" + "F11"
-> cliquer dans la partie de gauche sur "module 1"
(dans la zone de droite, on peut y voir ta macro)
-> sélectionner ta macro "copier"
-> venir ici sur le forum pour "coller" la macro
A tout à l'heure
Cordialement
P.S. : c'est en faisant des macros qu'on apprend. Donc comme ta question n'est pas trop compliqué, autant en profiter pour se lancer 😉
Re : Plusieurs ( SOUS.TOTAL ) dans la dernière ligne
Bonsoir le forum
Merci beaucoup Excel-lent pour tes informations très détaillées.
Tu as raison il faut se lancer, mais c’est très compliqué !
Bon appliquée à la lettre tes conseilles et même plus et réussi à faire une macro.
Elle fait se que j’avais demandé au départ, mais maintenait je souhaiterait pouvoir insérer et supprimer de lignes et il me semble que sais un peu plus compliqué.
Bref je mets un fichier joint dans l’espoir que quelqu’un puisse me donner un coup de main.
Re : Plusieurs ( SOUS.TOTAL ) dans la dernière ligne
Bonsoir Atiom,
Je t'avais dit que la macro enregistré TOUT ce que tu faisais? Et qu'il fallait y aller en douceur?
-> faire la macro décrite ci-dessus
-> la comprendre pour pouvoir ainsi la nettoyer
-> et seulement après passer à l'étape suivante : compliquer la macro ou passer à une autre macro
Alors ne brulons pas les étapes. Je ne voudrais pas te noyer sous le code, ni te dégoutter du VBA en voulant aller trop vite 😉
Donc reprenons du début (car tu as voulu aller plus vite que la musique en brulant des étapes : mise en forme des cellules)
-> partons du principe que tu as suivie les instructions ci-dessus. Tu as donc obtenue une macro dans ce genre :
Code:
Sub Macro1()
[COLOR="Green"]' Macro enregistrée le 19/04/2010 par Excel-lent[/COLOR]
Range("B24").Select
Selection.End(xlDown).Select
Range("C65536").Select
Selection.End(xlUp).Select
Range("C22").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-11]C:R[-1]C)"
Range("C22").Select
Selection.Copy
ActiveWindow.SmallScroll ToRight:=5
Range("J22").Select
ActiveSheet.Paste
ActiveWindow.SmallScroll ToRight:=3
Range("M22").Select
ActiveSheet.Paste
End Sub
(alors que ta macro fait plus du double en ligne de code! Normal que tu sois un peu perdu)
Avant d'analyser la macro obtenu, plusieurs règles à connaître et respecter (pour mieux comprendre sa macro).
1/ Lorsque tu commence ta ligne par le symbole suivant '
Excel comprend qu'il s'agit d'un commentaire, donc il colorie la ligne en vert et ne tiens pas compte de ce qui est écrit sur cette ligne
2/ Les retraits de paragraphe, saut de ligne, ne change rien dans l'exécution de la macro. C'est juste pour toi, pour t'y retrouver plus facilement.
Passons maintenant à l'analyse de la macro. Pour cela je vais insérer dedans des commentaires t'expliquant ce que fait chaque ligne :
Code:
Sub Macro1()
[COLOR="Green"]' Macro enregistrée le 19/04/2010 par Excel-lent[/COLOR]
Range("B24").Select
[COLOR="Green"]' Sélectionner la cellule B24
' -> fait par l'utilisateur mais pas demandé ni nécessaire
' => donc on peut supprimer cette ligne[/COLOR]
Selection.End(xlDown).Select
[COLOR="Green"]' En partant de la cellule B24, descendre jusqu'à la prochaine cellule pleine et la sélectionner
' -> fait par l'utilisateur mais pas demandé ni nécessaire
' => donc on peut supprimer cette ligne[/COLOR]
Range("C65536").Select
[COLOR="Green"]' Sélectionner la cellule C65536
' -> ici commence ce que l'utilisateur été censé faire
' => ligne à garder[/COLOR]
Selection.End(xlUp).Select
[COLOR="Green"]' En partant de la cellule C65536, précédement sélectionner, monter jusqu'à la prochaine cellule pleine et la sélectionner : cellule C21[/COLOR]
Range("C22").Select
[COLOR="Green"]' Sélectionner la cellule C22[/COLOR]
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-11]C:R[-1]C)"
[COLOR="Green"]' Dans la cellule sélectionner (C22) écrire la formule SOUS.TOTAL...[/COLOR]
Range("C22").Select
[COLOR="Green"]' Sélectionner la cellule C22[/COLOR]
Selection.Copy
[COLOR="Green"]' Copier le contenu de la cellule sélectionné (C22)[/COLOR]
ActiveWindow.SmallScroll ToRight:=5
[COLOR="Green"]' Déplacement de la fenêtre vers la droite à l'aide de la roulette
' -> fait par l'utilisateur mais pas demandé ni nécessaire
' => donc on peut supprimer cette ligne[/COLOR]
Range("J22").Select
[COLOR="Green"]' Sélectionner la cellule J22[/COLOR]
ActiveSheet.Paste
[COLOR="Green"]' Coller dans la cellule J22 le contenu de la cellule C22[/COLOR]
ActiveWindow.SmallScroll ToRight:=3
[COLOR="Green"]' Déplacement de la fenêtre vers la droite à l'aide de la roulette
' -> fait par l'utilisateur mais pas demandé ni nécessaire
' => donc on peut supprimer cette ligne[/COLOR]
Range("M22").Select
[COLOR="Green"]' Sélectionner la cellule M22[/COLOR]
ActiveSheet.Paste
[COLOR="Green"]' Coller dans la cellule M22 le contenu de la cellule C22[/COLOR]
End Sub
Une fois les lignes inutiles enlevé, tu obtiens la macro suivante :
Code:
Sub Macro1()
' Macro enregistrée le 19/04/2010 par Excel-lent
Range("C65536").Select
Selection.End(xlUp).Select
Range("C22").Select
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-11]C:R[-1]C)"
Range("C22").Select
Selection.Copy
Range("J22").Select
ActiveSheet.Paste
Range("M22").Select
ActiveSheet.Paste
End Sub
Maintenant qu'on a fais la macro, puis compris ce qu'elle faisait, il convient de l'adapter pour qu'elle fasse exactement ce que tu veux.
Et oui, dans la macro obtenue, il y a une erreur. Du moins... elle ne fait pas tout à fait ce que tu veux. Et plus particulièrement, les trois lignes ci-dessous :
Tu as vu l'explication que j'ai donné ci-dessus?
-> Sélectionner de C65536
-> Chercher la première cellule pleine (C21 dans ton cas présent)
-> Aller sur la cellule C22
Or ce que tu voulais c'était :
-> Sélectionner C65536
-> Chercher la première cellule pleine (C21 dans ton cas présent)
-> Aller sur la cellule juste au dessus
Bref avec la macro actuelle, quelque soit la longueur de ta macro, elle écrira tout le temps la formule SOUS.TOTAL en C22 (J22 et M22)
(suite au prochain numéro - dans quelques instants)
Re : Plusieurs ( SOUS.TOTAL ) dans la dernière ligne
Re-bonjour
(suite)
Donc comme indiqué, les trois premières lignes ne font pas exactement ce qu'on veut. Nous allons donc modifier la macro en fonction.
Pour cela, nous allons devoir passer à la leçon numéro 2 : les variables
(mettre cette page en favori, elle te sera très utile par la suite)
Une variable, c'est une lettre, un mot qui contient une donnée. Permettant ainsi par la suite, dans le reste du programme, d'utiliser son contenu et parfois le modifier.
Lorsqu'on utilise des variables dans une macro, il faut l'indiquer au début de la macro et dire à Excel le type de donnée qu'elles vont contenir (pour cela utiliser le lien que j'ai donnée tout à l'heure)
Pour déclarer une variable, on écrit le mot "Dim" + "le nom de ta variable" + "le type de donnée qu'elle contiendra"
Pour information, un nom de variable, tout comme le nom d'une macro ne peut contenir d'espace (d'où l'utilisation de majuscule au début de chaque mot - c'est plus clair)
Passons maintenant à la pratique :
Ta macro avant :
Code:
Sub Macro1()
[COLOR="Green"]' Macro enregistrée le 19/04/2010 par Excel-lent[/COLOR]
Range("C65536").Select
Selection.End(xlUp).Select
Range("C22").Select
[COLOR="Green"]'...[/COLOR]
Avant de passer à la solution, une étape intermédiaire :
Le code suivant est long inutilement :
Code:
Range("C65536").Select
Selection.End(xlUp).Select
Il peut être simplifié ainsi
Code:
Range("C65536").End(xlUp).Select
Ta macro modifié et qui cette fois ci correspond à exactement à ta demande :
Code:
Sub Macro1()
[COLOR="Green"]' Macro enregistrée le 19/04/2010 par Excel-lent[/COLOR]
Dim DernièreLigne As Long
DernièreLigne = Range("C65536").End(xlUp).Row + 1
Range("C" & DernièreLigne - 1).Select
[COLOR="Green"]'...[/COLOR]
Explications :
"DernièreLigne" est la variable qui contiendra le numéro de la ligne de la dernière cellule pleine de colonne C. Donc ton numéro de ligne sera forcément un nombre entier. Donc le type de variable le plus adapté sera "Long" ou "Integer".
La variable "Integer" peut contenir un nombre entier inclus entre -32.768 et 32.767. Or ma version d'Excel (pourtant ancienne, compte déjà plus de 65.000 lignes : plus précisément 65536). Donc il faut employer les grands moyen et passer à la variable "Long" qui peut contenir un nombre entier inclus entre -2.147.483.648 et 2.147.483.647
Evidement d'autres types de variable pourrait fonctionner, mais le but est d'utiliser la plus proche.
Je te laisse voir pour terminer la macro?
Astuce qui te servira pour la terminer
Code:
Range("A15")
Est la même chose que :
Code:
Dim DernièreLigne as Long
DernièreLigne = 15
Range("A" & DernièreLigne)
Faut que j'y aille à plus.
Bonne journée
PS. : seulement une fois cette étape fini tu pourras compliquer la macro en rajoutant d'autres choses. Sinon tu vas t'y perdre.
Re : Plusieurs ( SOUS.TOTAL ) dans la dernière ligne
Bonsoir le Forum
Ok, J’ai réussi à faire la macro, c’est incroyablement petit, 9 lignes de code et le tour est joué.
Tu as raison Excel-lent pour ne pas me perdre je me suis arrêté au moment ou la macro trouve la dernière ligne du tableau (n’importe le nombre de lignes !) et écrit la formule dans la colonne C et en suite copie la même formule dans les colonnes J et M.
Maintenait la suite :
Avant de passé à la mise en forme des cellules de la dernière ligne.
Il y a un autre problème, si mon tableau est plus long ou plus court le sous total se fait uniquement sur les 11 dernières lignes.
Code:
= "=SUBTOTAL(9,R[-11]C:R[-1]C)"
C’est normal puisque on dit qu’il faut partir à moins 11.
Je pense qu’il faut modifier la formule mais je n’ai pas trouvé comment.
Re : Plusieurs ( SOUS.TOTAL ) dans la dernière ligne
Bonsoir Atiom, le forum,
Voici ta macro modifié et corrigé. J'ai mis en bleu les parties modifiées
Code:
Sub Atiom2()
[COLOR="Green"][COLOR="Blue"]' ------------------------------------------------'[/COLOR]
' Macro enregistrée le 20/04/2010 par Atiom '
[COLOR="Blue"]' Et modifiée/complétée par Excel-lent '[/COLOR]
' ------------------------------------------------'
' Déclaration des variables[/COLOR]
Dim DernièreLigne As Long
[COLOR="Green"]'En partant de la derniere ligne de la colonne C monter jusqu'à la prochaine cellule pleine plus une.[/COLOR]
DernièreLigne = Range("C65536").End(xlUp).Row + 1
[COLOR="Green"]'Sélectionner cette cellule[/COLOR]
Range("C" & DernièreLigne).Select
[COLOR="Green"]' Dans la cellule sélectionnée écrire la formule SOUS.TOTAL[/COLOR]
ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-[COLOR="Blue"][B]" & DernièreLigne - 11 & "[/B][/COLOR]]C:R[-1]C)"
[COLOR="Green"]' Copier le contenu de la cellule sélectionné[/COLOR]
Selection.Copy
[COLOR="Green"]
'Sélectionner la derniere ligne de la colonne J[/COLOR]
Range("J" & DernièreLigne).Select
[COLOR="Green"]
'Coller dans la cellule J le contenu de la cellule C[/COLOR]
ActiveSheet.Paste
[COLOR="Green"]'Sélectionner la derniere ligne de la colonne M
[/COLOR] Range("M" & DernièreLigne).Select
[COLOR="Green"]'Coller dans la cellule J le contenu de la cellule C[/COLOR]
ActiveSheet.Paste
End Sub
Pourquoi fallait-il modifier la macro ainsi?
Il y a deux façon d'écrire une formule dans une cellule, via VBA. La première consiste à faire une opération et à écrire le résultat dans la cellule (la plus facile). Autre solution (celle retenu dans notre cas), écrire la formule dans la cellule.
Avantage de la seconde solution, si tu change une donnée situé dans la zone balayé par la formule, le résultat s'adaptera automatiquement. Alors qu'avec la première solution, puisque le résultat sera écrit en dur, il ne bougera pas (sauf si tu relance la macro après chaque modification).
Comme tu as pu le constater dans ta macro, ta formule : ActiveCell.FormulaR1C1 = "=SUBTOTAL(9,R[-11]C:R[-1]C)"
est entre guillemet, ce qui indique qu'Excel met dans la cellule activela formule suivante : le texte (et non le résultat donné par la formule).
"R" -> indique le numéro de la ligne par rapport à la ligne de référence : celle où est ta formule. Donc lorsque tu parle de la ligne juste au dessus de la ligne où est la formule, tu écrira R[-1]. Mais si tu parle de la ligne juste en dessous, tu écrira R[1]. Par contre, si tu veux parler de la ligne de référence, tu écrira juste R.
"C" -> indique le numéro de la colonne : même logique que pour la ligne. Si tu parle de la colonne à gauche de la cellule de référence, tu écrira C[-1]
Voici comment fonctionne ta formule "sous-total" :
9 -> comme dans la formule Excel, 9 indique qu'il faut faire la somme des cellules non masqué
R[-11]C -> cellule à partir de laquelle commencer le sous-total C11 dans notre cas, c'est à dire :
=> C : la cellule se trouvant dans la même colonne que la cellule de référence (cellule où figure ton sous-total)
=> R[-11] : la cellule se trouvant 11 lignes au dessus de la cellule de référence (cellule où figure ton sous-total)
R[-1]C -> cellule jusqu'à laquelle faire le sous-total C21 dans notre cas (le sous-total étant dans la cellule C22), c'est à dire :
=> C : la cellule se trouvant dans la même colonne que la cellule de référence (cellule où figure ton sous-total)
=> R[-1] : la cellule se trouvant 1 ligne au dessus de la cellule de référence (cellule où figure ton sous-total)
--------------------------------------
Donc dans ta formule, quelque soit la taille de ton tableau, cette partie ne changera pas : R[-1]C
par contre, la première partie (cf. ci-dessous), changera en fonction de la taille du tableau : R[-11]C
Plus précisément, le numéro de la ligne.
Dans notre cas, le sous-total est sur la ligne 22. Excel enlève 11, ce qui donne C11 : cellule où commencer ta formule.
Tu vois donc que ton numéro de ligne va changer en fonction du ... (roulement de tambour)... nombre de ligne que comportera ton tableau.
Solution la plus simple : créer une variable spécialement pour cela, chercher ce nombre, et écrire le nom de la variable à la place du "11".
Solution pour ceux ayant un poil dans la main (mais plus compliqué) : utiliser une variable déjà existante.
----------------------- Je vais opter pour la seconde solution
1ère étape : trouver la formule mathématique permettant de trouver le chiffre 11 (idem si tu avais pris la solution 1)
11 est égale à : numéro de la ligne où tu écris le total : la variable "DernièreLigne" auquel tu retranche 11. Tu doute de ma réponse? Fais deux test :
* imaginons que ton sous-total est ligne 26. 26-11 = 15. Si tu remonte de 15 lignes en partant de la 26ème ligne, tu arrive bien à la ligne 11, tu obtient donc C11
* imaginons que ton sous-total est ligne 31. 31-11 = 20. Si tu remonte de 20 lignes en partant de la 31ème ligne, tu arrive bien à la ligne 11, tu obtient donc C11
2ème étape : insérer ta formule mathématique dans ta formule SOUS-TOTAL.
Comme dis plus haut, ta formule est du texte, donc si tu insére bêtement ta formule mathématique, tu obtiens ceci : Avant
Mais comme il prend TOUT pour du texte, ça va bugger! Essaye pour voir, tu verra la formule qu'il écrit 😉
Donc il faut faire pareil que sur excel CONCATENER :
-> le texte => ta formule
-> le calcul => DernièreLigne - 11
Pour cela, il suffit : -> d'utiliser le symbole & pour coller les différentes parties
-> ouvrir les guillemets au début de chaque zone de texte
-> fermer les guillemets à la fin de chaque zone de texte
===> ce qui ne sera pas entre guillemet, sera considéré comme du calcul. Il ne prendra donc pas la formule écrite, mais le RESULTAT obtenu par cette dernière.
Re : Plusieurs ( SOUS.TOTAL ) dans la dernière ligne
Bonjour Atiom, Excel-lent,
simplement pour remercier Excel-lent pour ses explications.
Même si je suis plus porté sur les formules, je vais continuer à suivre discrètement les prochains épisodes en me permettant si besoin de te demander quelque éclairage supplémentaire car je suis novice en la matière.
Re : Plusieurs ( SOUS.TOTAL ) dans la dernière ligne
Bonjour david84,
De rien, et n'hésite pas à intervenir. Que ce soit pour me corriger (je n'ai pas la science infuse), me compléter, donner une autre solution, ou obtenir plus de détails sur une de mes réponses.
Voici un p'tit bonus :
La ligne suivante
Code:
DernièreLigne = Range("C65536").End(xlUp).Row + 1
Peux-être raccourci ainsi
Code:
DernièreLigne = [C65536].End(xlUp).Row + 1
C'est exactement la même chose, mais plus court à écrire. Mais comme c'est moins clair lorsqu'on début, j'ai donc opté pour la version Range() dans ma proposition.
Re : Plusieurs ( SOUS.TOTAL ) dans la dernière ligne
Bonsoir le forum
Apres quelques heures d’apprentissage et beaucoup de recherche dans le forum, voici le tableau finie.
Sans doute qu’il doit y avoir plus simple, on peu certainement simplifier les macros, mais l’essentiel est le résultat.
En partant des valeurs d’une feuille ( Base ) on effectue le sous-total sur 3 colonnes , plus une mise en forme du tableau, coloration d’une ligne sur deux etc…
Ci ce tableau peu rendre service à quelqu’un, n’hésité pas…
Encore une fois un tout grand merci à Excel LENT 🙂pour toute ces explications.
Re : Plusieurs ( SOUS.TOTAL ) dans la dernière ligne
Bonsoir Antiom,
Me revoilà, je m'étais absenté quelques jours du forum.
Jusqu'à maintenant, tu as appris à :
-> utiliser l'enregistreur de macro pour faire une macro simple
-> décortiquer le code obtenu par l'enregistreur de macro
-> utiliser les variables
Maintenant tu vas pouvoir passer à l'étape suivante : "utiliser les boucles". Les boucles te permette d'éviter d'écrire la même chose plusieurs fois.
Au cas où tu ne connaisse pas du tout les boucles, lis le lien suivant en diagonale, pour commencer à te familiariser avec cela. La boucle la plus souvent utilisé au début est :
For ... Next
Dans ton fichier, dans la macro "mise_en_forme" essaye de remplacer cette partie de ton code :
Code:
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
With Selection.Borders(xlInsideHorizontal)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Par juste ces quelques lignes :
Code:
[COLOR="Red"][B]For[/B][/COLOR] [COLOR="Blue"][B]i[/B][/COLOR] = 1 To [COLOR="DimGray"][B][I]6[/I][/B][/COLOR]
With Selection.Borders(i)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
[B][COLOR="Red"]Next[/COLOR][/B] i
A tester, mais normalement cela fonctionne et fais EXACTEMENT la même chose que tes 36 lignes ci-dessus.
Tiens nous au courant.
Comment j'ai procédé :
-> j'ai cherché la partie répétitive. La voici (code répété 6 fois) :
Une fois trouvé, il suffit de mettre en place une boucle qui répétera ton code 6 fois, tout en m'évitant de l'ECRIRE 6 fois.
La boucle FOR... NEXT est excellente pour cela. Donner à la variable i la valeur 1. Effectuer le code situé entre FOR et NEXT. Une fois arrivé à Next, rajouter 1 à la valeur i et mettre cette dernière à la place. Donc i contient maintenant le chiffre 2. Si ce chiffre est inférieur ou égale à 6, répéter à nouveau le code situé entre FOR et NEXT.
Lorsque i comporte le chiffre 6, effectuer une dernière fois la boucle. Puis une fois arrivé à "NEXT i", passer enfin aux lignes situés en-dessous de "NEXT i"
Autre astuce utilisé :
With Selection.Borders(1) veut dire la même chose que With Selection.Borders(xlEdgeLeft)
With Selection.Borders(2) veut dire la même chose que With Selection.Borders(xlEdgeRight)
With Selection.Borders(3) veut dire la même chose que With Selection.Borders(xlEdgeTop)
With Selection.Borders(4) veut dire la même chose que With Selection.Borders(xlEdgeBottom)
With Selection.Borders(5) veut dire la même chose que With Selection.Borders(xlInsideVertical ou xlInsideHorizontal)
With Selection.Borders(6) veut dire la même chose que With Selection.Borders(xlInsideHorizontal ou xlInsideVertical)
Bref comme tu peux le voir, encore une fois j'avais un poil dans la main lol
La variable i me permet d'indiquer à Excel de répéter 6 fois ton code. Mais également pour indiquer le style de bordure : Top / Bottom / Right / Left / ...
(pour information, il existe 12 types de bordures différentes à ma connaissance, tu vois, tu avais encore la marge 😉).
Avantage de la leçon de ce soir : la boucle "For... Next", si tu n'as pas compris, que c'est trop tôt. Tu peux te passer de cette leçon et faire sans. Comme tu as pu le constater, ta macro fonctionne sans. Elle est juste plus longue, rien de grave.
Et tu pourras te remettre sur cette leçon plus tard, lorsque tu seras plus à l'aise avec le VBA et/ou lorsque tu auras plus de temps.
Re : Plusieurs ( SOUS.TOTAL ) dans la dernière ligne
Bonsoir Excel-lent
C’est vraiment super.🙂
Tes explications me font vraiment progresser.
Merci infiniment pour ta patience.
PS : Petite correction sur la boucle
Code:
For i = 1 To [COLOR="Red"]4[/COLOR]
With Selection.Borders(i)
.LineStyle = xlContinuous
.ColorIndex = 0
.TintAndShade = 0
.Weight = xlThin
End With
Next i
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD