macro raffraichi ou effectue calcul

  • Initiateur de la discussion Initiateur de la discussion news
  • Date de début Date de début

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 !

news

XLDnaute Impliqué
Bonjour à tous du forum,

cela fait déjà quelques semaines que je n'avance pas avec ce problème que Excell plante,
j'utilise le code suivant, mais dès qu'on effectue un format de Range, p.e.x aligner droite ou bordure en gras ou ajouter commentaire ou copier, coller, Excel plante !

Code:
[COLOR="Green"]'Pour que la mise à jour des fonctions soit automatique lorsque l'on modifie la couleur[/COLOR]

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, [B5:V20]) Is Nothing Then
  If Not IsEmpty(celluleAvant) Then
    If Not Intersect(Range(celluleAvant), [A1:V27]) Is Nothing Then Calculate
  End If
  celluleAvant = Target.Address
  If Not Intersect(Target, [B5:V20]) Is Nothing Then
     If Application.WorksheetFunction.Max([B29:V29]) <> 0 Then
....

Code:
 [COLOR="Green"]' mis sous module[/COLOR]
Option Explicit

Function nb_inter(plage As Range) As Long
    Dim Cel As Range, nb As Long
    Application.Volatile
    nb = 0
    For Each Cel In plage
        If Cel.Interior.ColorIndex <> xlNone Then nb = nb + 1
    Next
    nb_inter = nb
End Function

je ne sais pas pourquoi Excell plante, je pense cela vient de la fonction "nb_inter" ajouté dans macro.
J'utilise Office 2003,

besoin code quand on click sur fermer le fichier qu'un évènement est lancé que raffraichit le total dans Rows(29) et (33),
besoin autre code (pas d'ajoute de fonction) qui calcule le nombre de Range avec couleur de fond dans Rows(29) et (33),

mais ne sais pas comment appliquer la varaible, le code
 

Pièces jointes

Dernière édition:
Re : macro raffraichi ou effectue calcul

Bonjour à tous du forum,

merci matthieu33 pour réponse,

j'ai testé cette version "macro_calcul_v1" mais Excel plante de nouveau
en mettant un format de bordures gras dans la plage de données C6:T16.

Cela vient du code d'ajoute d'une fonction dans un module.
Apparemment Excel a des difficultés avec l'ajoute d'une fonction,
sinon dans le code suivant, il y a qch qui fait planter Excel, dès qu'on mdoifie une couleur de bordure ou on met une bordure en gras dans une plage de données,

Code:
[COLOR="Green"]' calcule le nombre de couleur de fond dans Rows(28)[/COLOR]
Function nb_inter(plage As Range) As Long
    Dim Cel As Range, nb As Long
    Application.Volatile
    nb = 0
    For Each Cel In plage
        If Cel.Interior.ColorIndex <> xlNone Then nb = nb + 1
    Next
    nb_inter = nb
End Function

Le bug, que Excel plante, ne vient pas du code mis dans Private Sub Worksheet_SelectionChange(ByVal Target As Range),

peut-être vous connaissez les astuces ou modifications pour résoudre,
 

Pièces jointes

Re : macro raffraichi ou effectue calcul

Bonjour à tous du forum,

merci Excel_lent pour réponse et d'avoir testé les codes
de Private Sub Worksheet_SelectionChange(ByVal Target As Range)
et de Function nb_inter(plage As Range) As Long

j'ai ajouté If Target.Count > 1 Then Exit Sub
mais, ... Excel plante.

Je ne comprends rien, j'utilise Office 2003 avec toutes les updates,
mais après nombreux essais et des recherches depuis 2 semaines pourquoi Excel plante, j'ai remarqué qu'Excel a des difficultés si on ajoute dans un module cette fonction "Function nb_inter(plage As Range) As Long".

J'ai verifié les données et réponses du sujet que j'avais posté auparavent,
et repris un autre code de Banzai64 :

Code:
[COLOR="Green"]' autre version pour calculer le nombre de couleur de fond dans Rows(28)[/COLOR]
Function C_C(ZZ As Range) As Long
Application.Volatile
Dim Diko As Object
Dim Cel As Range
 Set Diko = CreateObject("Scripting.Dictionary")
 
  For Each Cel In ZZ
    If Cel.Interior.ColorIndex <> xlNone Then
      If Not Diko.Exists(Cel.Interior.ColorIndex) Then
          Diko.Add Cel.Interior.ColorIndex, 1
        Else
          Diko(Cel.Interior.ColorIndex) = Diko(Cel.Interior.ColorIndex) + 1
      End If
    End If
  Next Cel
  C_C = Diko.Count
  
End Function

Je vais effectuer certains essais, pour voir si ce code fonctionne bien,
 
- 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

Discussions similaires

Réponses
9
Affichages
508
  • Question Question
Microsoft 365 worksheet_change
Réponses
29
Affichages
1 K
  • Question Question
Microsoft 365 Probléme VBA
Réponses
8
Affichages
588
Réponses
4
Affichages
521
Réponses
2
Affichages
411
Retour