VBA : Actualisation

Résolu/Fermé
piroc Messages postés 61 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 17 avril 2015 - Modifié par pijaku le 17/04/2015 à 13:45
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 - 17 avril 2015 à 14:40
Bonjour,

J'ai un petit problème côté VBA sur mon Excel...

Voici ma situation.
J'ai créer la formule suivant sous VBA qui me permet en fonction d'une couleur d'une cellule de prendre en compte sa valeur ou non :

Option Explicit

Function SommeCouleur(Zone As Range, CRef As Range, X, Y)
    Dim c, Cel, S
    c = CRef.Interior.ColorIndex
    S = 0
    For Each Cel In Zone
        If Cel.Interior.ColorIndex = c Then
            S = S + Cel.Offset(Y, X)
        End If
    Next
    SommeCouleur = S
End Function



Dans l'utilisation la formule fonctionne mais elle ne s'actualise pas automatiquement. Pour ce faire je dois rentrer dans le texte de la cellule et taper "Entrée". Ayant plusieurs centaines de cellule à actualiser, ce n'est pas viable....

J'ai donc crée un Bouton avec comme macro :

Sub Selection()
    Range("CF35:CG333").Calculate
End Sub


Cette macro m'actualise bien mes formules, mais juste 1 seul fois. Si je remet des couleurs, que je reclique sur le bouton cela ne fonctionne plus. Je dois dan ce cas la retourner dans la VBA est modifier un caractère (Ex : "Espace" puis "Suppr"). Après cela je peux recliquer sur le bouton (1 fois).

Savez-vous pourquoi le bouton ne fonctionne qu'une fois ? Que dois-je faire pour ce problème ?


PS : J'ai essayé les F9, calcul formule automatique mais RAS.



Cordialement,

1 réponse

pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744
17 avril 2015 à 13:48
Bonjour,

Sans bouton, essaie d'ajouter
Application.Volatile
en début de ta fonction, comme ceci :
Option Explicit

Function SommeCouleur(Zone As Range, CRef As Range, X, Y)
    Dim c, Cel, S
    Application.Volatile
    c = CRef.Interior.ColorIndex
    S = 0
    For Each Cel In Zone
        If Cel.Interior.ColorIndex = c Then
            S = S + Cel.Offset(Y, X)
        End If
    Next
    SommeCouleur = S
End Function

0
piroc Messages postés 61 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 17 avril 2015
17 avril 2015 à 14:34
Avec le
Application.Volatile
après mes applications de couleurs je fait un F9 et ça actualise tout.

Merci beaucoup !
0
pijaku Messages postés 12263 Date d'inscription jeudi 15 mai 2008 Statut Modérateur Dernière intervention 4 janvier 2024 2 744 > piroc Messages postés 61 Date d'inscription vendredi 26 octobre 2012 Statut Membre Dernière intervention 17 avril 2015
17 avril 2015 à 14:40
de rien.
A+
0