|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 28 ![]() |
Bonjour,
J'ai un fichier avec des plages de données allant de D17 à O25, de D30 à O35 et de D40 à O43, certaines données peuvent être écrite en noir si elles sont définitives, d'autres écrites en rouge si elles sont prévisionnelles. Je souhaite faire deux sommes, la première prévisonnelle donc qui additionne le noir et le rouge, celle ci pas de problème. La deuxième réelle en additionnant seulement les sommes en noir, c'est là que je coince. J'ai lu plusieurs codes pouvant marcher mais vu qu'il n'y avait d'explication avec j'ai pas réussi à les adapter. Pourriez vous m'aider s'il vous plait ? |
|
|
00
|
|
|
#2 | |||
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Citation:
D'où l'inefficacité voire le danger de recopier des bouts de code trouvés sur le net sans les comprendre. Je ne te fais pas la morale, mais il vaut mieux prendre un peu de temps pour se familiariser avec les bases de VB (via les tutos disponibles sur ce site par exemple) pour comprendre ce que l'on fait...l'investissement est bien plus rentable, je pense. Pour en revenir à tes moutons: -Il faut que tu définisse dans VBA la plage de cellules susceptibles de contenir tes données écrites en noir. -Il faut définir une variable pour stocker le total de tes cases noires Et après, parcourir toutes tes cellules et augmenter la valeur du total si la police de la cellule est noire. En pratique (essaie de comprendre le code et pose des questions si ce n'est pas le cas): Code :
|
|||
|
|
00
|
|
|
#3 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 28 ![]() |
Bonjour,
Je sais que ce n'est pas la bonne méthode, mais même si les tutoriels du forum sont super bien fait, c'est un peu dur à appliquer d'un coup. Mais c'est clair qu'ils sont très secourables de temps en temps. Le code ne marche pas il m'affiche 0. Je pense que ça vient du fait qu'on définit totCellsNoires pâr 0 et que la fin on lui demande de nous donner totCellsNoires, non ? En tout cas merci pour ce code très détaillé, c'est beaucoup plus pratique pour une novice comme moi. |
|
|
00
|
|
|
#4 | |||
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Citation:
Code :
If maCellule.Font.ColorIndex = 1 Then totCellNoires = totCellNoires + maCellule.Value Voici un code qui marche avec une ou deux améliorations: Code :
As-tu bien compris comment fonctionne ce code? |
|||
|
|
10
|
|
|
#5 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 28 ![]() |
Oui je pense par contre qu'est ce que le activesheet amène en plus ?
Merci de ta patience |
|
|
00
|
|
|
#6 |
|
Membre actif
![]() Étudiant Inscription : août 2011 Messages : 126 ![]() |
Bonjour,
Je me permet de poser une question à sclarckone.Pouvez expliquez la nuance entre les deux codes ? Merci d'avance et vive le Forum |
|
|
00
|
|
|
#7 | ||
|
Membre actif
![]() Inscription : novembre 2008 Messages : 188 ![]() |
Citation:
Cela vient du modèle objet d'Excel. Du point de vue programmation, Excel est considérée comme une application dans laquelle peuvent être ouverts plusieurs fichiers (chaque fichier est un Workbook et l'ensemble de ces fichiers est regroupé dans la collection Workbooks). Chaque Workbook contient des feuilles de calcul (Worksheet/Worksheets) et des feuilles graphiques (Chart/Charts) qui sont toutes contenues dans la collection Sheets (mais il n'y a pas d'objet Sheet car il y aurait ambigüité: Workbook ou Chart?). Lorsque dans mon code j'initialise l'objet maPlage avec des Range("D17:O25") (...etc.), "VBA" ne sait pas à quelle feuille appartiennent les plages que je rajoute! Je pense qu'automatiquement il considère que ce sont celles de la feuille activée. Mais dans le cas où la macro ne serait pas appelée depuis la feuille où l'on veut que les actions soient réalisées, ça ne marcherait pas (les actions seraient bien réalisées, mais sur la mauvaise feuille). Donc utiliser ActiveSheet permet de lever l'ambigüité en précisant qu'on veut travailler avec la feuille sur laquelle on se trouve. Si l'on voulait réaliser des actions sur une autre feuille que la feuille active, on pourrait alors la désigner par Sheets("nom de la feuille"). Citation:
J'avais aussi corrigée la condition de test (entre le If et le Then) qui ne fonctionnait pas pour tester si la police de la couleur est bien noire. |
||
|
|
10
|
|
|
#8 |
|
Invité régulier
![]() Inscription : avril 2011 Messages : 28 ![]() |
Merci beaucoup pour le code et surtout tes explications. C'est super de ta part.
|
|
|
00
|
Copyright © 2000-2012 - www.developpez.com