Précédent   Forum des professionnels en informatique > Logiciels > Microsoft Office > Excel > Macros et VBA Excel
Macros et VBA Excel Vos questions relatives aux macros Excel, à l'utilisation de VBA et à l'automatisation de vos classeurs Excel.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 13/12/2011, 08h03   #1
Invité régulier
 
Inscription : janvier 2010
Messages : 42
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 42
Points : 5
Points : 5
Par défaut formule "somme cellule non barrées"

Bonjour,

je souhaite créer une formule sous visual basic puis l'inclure dans des cellules excel.

cette formule doit permettre de faire la somme des cellules comprises entre D5 et D50 dont la police d'écriture est "non barrées" . De manière analogue je voudrais faire la somme des celules dont la police d'écriture est "non rouge".

En fait mon interrogation porte surtout sur comment traduire "somme des cellules comprises ds la plage de cellules "D5:D50". Pour les conditions "non barré" et "non rouge" je pense pouvoir m'en sortir avec l'enregistreur de macro

merci d'avance pour votre aide
gaston64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 08h19   #2
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut

Le mieux dans ton cas serait de faire une function à laquelle tu passes deux paramètre.
  1. La plage de cellule
  2. la cellule ayant le format qui doit être pris en compte

Code :
1
2
3
Function SommeFormat(Plage as range, Source as range) as long
'[...]Le code
End Function
Le deuxième paramètre peut être remplacé par une série de paramètre optionnels si le nombre de caractéristique est limité

Code :
1
2
3
Function SommeFormat(Plage As Range, Optional FontBarre As Boolean, Optional IndexCouleur As Long = xlColorIndexAutomatic) As Long
'[...]Le code
End Function
Cette fonction pourra par la suite être utilisée directement dans ton classeur comme une formule intégrée à Excel
++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 11h43   #3
Invité régulier
 
Inscription : janvier 2010
Messages : 42
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 42
Points : 5
Points : 5
merci pour la réponse

je souhaite effectivement inclure une telle formule dans mon tableau excel. Mais ce qui me manque c'est le code qui va dedans.
gaston64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 12h14   #4
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
Bonjour,

Voici un exemple avec les cellules non barrées. Note que le changement dans une cellule de "barré" ne provoquera pas un recalcul de la fonction. Tu devras appuyer sur la touche F9. Exemple d'utilisation :

Code :
=SommeNonBarré(A1:C10)
Code :
1
2
3
4
5
6
7
8
9
Function SommeNonBarré(Plage As Range)
    Dim c As Range
    Application.Volatile
    For Each c In Plage
        If IsNumeric(c) And c.Font.Strikethrough = False Then
            SommeNonBarré = SommeNonBarré + c.Value
        End If
    Next c
End Function
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 12h22   #5
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
Citation:
Pour les conditions "non barré" et "non rouge" je pense pouvoir m'en sortir avec l'enregistreur de macro
J'avais cru comprendre...

Voila un exemple
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
Option Explicit
Public Enum TFontBarre
    Barre_No = 0
    Barre_Yes = 1
    Barre_Indiferent = 2
End Enum
 
Function SommeFormat(Plage As Range, Optional FontBarre As TFontBarre = 2, Optional IndexCouleur As Long = -1) As Long
Dim TheCell As Range
Dim boolOK As Boolean
 
 
    'On boucle sur chaque cellule
    For Each TheCell In Plage
        'On initialise
        boolOK = True
 
        'On regarde si rayé
        If FontBarre <> Barre_Indiferent Then
            boolOK = TheCell.Font.Strikethrough = CBool(FontBarre)
        End If
 
        'On regarde si couleur correspondante également
        If IndexCouleur <> -1 Then
            boolOK = (TheCell.Font.ColorIndex = IndexCouleur) And boolOK
        End If
 
        If boolOK Then SommeFormat = SommeFormat + 1
    Next
 
End Function
l'énumération de valeur au début est facultative.

Dans ta formule, tu devras utiliser 0,1,2 pour les type barré.
0 - comptabilise les type non barré uniquement
1 - que les type barré
2 - tous type, barré ou non

Pour la couleur, j'ai utiliser ColorIndex pas color, donc regarde dans l'aide le nombre de couleur est restreint, il est bien sûr possible de modifier la macro pour utiliser Color en lieu est place de ColorIndex.

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 13h05   #6
Expert Confirmé Sénior
 
Homme Daniel
aucune
Inscription : septembre 2011
Messages : 2 004
Détails du profil
Informations personnelles :
Nom : Homme Daniel
Localisation : France, Seine et Marne (Île de France)

Informations professionnelles :
Activité : aucune

Informations forums :
Inscription : septembre 2011
Messages : 2 004
Points : 4 037
Points : 4 037
@ Qwazerty :

Si tu ne mets pas :

la fonction ne se recalcule pas.
__________________
Cordialement.

Daniel

Citation:
La plus perdue de toutes les journées est celle où l'on n'a pas ri.
Chamfort
Daniel.C est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 13h14   #7
Expert Confirmé Sénior
 
Avatar de Qwazerty
 
Homme Stéphane
La très haute tension :D
Inscription : avril 2002
Messages : 2 446
Détails du profil
Informations personnelles :
Nom : Homme Stéphane
Âge : 32
Localisation : France

Informations professionnelles :
Activité : La très haute tension :D
Secteur : Service public

Informations forums :
Inscription : avril 2002
Messages : 2 446
Points : 4 620
Points : 4 620
Envoyer un message via MSN à Qwazerty
Salut
Tu as à moitié raison

Même en mettant volatil a True, elle ne se recalculera pas lors de la modification de la font d'une des cellules de la plage :s, le calcul ne se fera qu'au moment de la modification du contenu d'une des cellules de la plage (ou sur appuie sur F9 - Recalcul).
Au mieux en passant volatil à True, le calcul se fera dés que n'importe laquelle des cellules du classeur sera modifiée... donc attention au problème de lenteur!

++
Qwaz
__________________

MagicQwaz := Harry Potter la baguette en moins
Le monde dans lequel on vit
HammerFest
Ma page perso DVP - Dernier Tutoriel : VBA & Internet Explorer
Qwazerty est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/12/2011, 21h36   #8
Invité régulier
 
Inscription : janvier 2010
Messages : 42
Détails du profil
Informations forums :
Inscription : janvier 2010
Messages : 42
Points : 5
Points : 5
Merci beaucoup pour vos réponses
gaston64 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 03h17.


 
 
 
 
Partenaires

Hébergement Web