Comment forcer le calcul d'une cellule en VBA

JNP

XLDnaute Barbatruc
Bonjour :),
J'ai crée une fonction qui calcule le nombre d'heure sup à récupérer en fonction de la couleur de fond de la cellule:
Function HeuresARécupérer(Heures)
Dim NombreCellule As Integer, I As Integer
NombreCellule = Heures.Count
For I = 1 To NombreCellule
Select Case Heures(I).Interior.ColorIndex
Case 35
HeuresARécupérer = HeuresARécupérer + Heures(I).Value
End Select
Next I
End Function

Cette formule, je l'injecte dans une feuille via VBA pour chaque mois ainsi que la somme avec les instructions suivantes:
Cells(36, 3).Value = "=heuresarécupérer(C4:C34)"
Cells(36, 4).Value = "=heuresarécupérer(D4: D34)"
Cells(36, 5).Value = "=heuresarécupérer(E4:E34)"
Cells(36, 6).Value = "=heuresarécupérer(F4:F34)"
Cells(36, 7).Value = "=heuresarécupérer(G4:G34)"
Cells(36, 8).Value = "=heuresarécupérer(H4:H34)"
Cells(36, 9).Value = "=heuresarécupérer(I4:I34)"
Cells(36, 10).Value = "=heuresarécupérer(J4:J34)"
Cells(36, 11).Value = "=heuresarécupérer(K4:K34)"
Cells(36, 12).Value = "=heuresarécupérer(L4:L34)"
Cells(36, 13).Value = "=heuresarécupérer(M4:M34)"
Cells(36, 14).Value = "=heuresarécupérer(N4:N34)"
Cells(36, 15).Value = "=SOMME(C36:N36)"

Le problème est que le calcul ne s'effectue pas dans la feuille. Malgré la présence d'heures, la valeur reste à "0" et la somme m'affiche "#NOM?" :confused:
Je suis obligé de doublecliquer dans chaque cellule en sélectionnant la plage pour qu'à la validation, le calcul s'éffectue enfin...:mad:
Merci d'avance de vos solution pour forcer le calcul des cellules via VBA... :)
 

JNP

XLDnaute Barbatruc
Re : Comment forcer le calcul d'une cellule en VBA

Merci Luki,
Effectivement, j'ai rajouté un calculate (pas dans mon userform, mais juste avant son affichage car sinon, il fallait que je réaffiche...) et ÇA FONCTIONNE!!! :D
Merci à tous pour votre aide et à la prochaine :cool:
 

benoit.frn

XLDnaute Nouveau
Re : Comment forcer le calcul d'une cellule en VBA

Bonjour,
Je travaille sur un gros fichier Excel (75 onglets, en moyenne 700 lignes par onglet)
J'ai un problème sur une feuille qui ne veut pas se calculer automatiquement, j'ai beau essayer vos techniques décrites précédemment, je n'arrive à rien et je suis obligé de me taper toutes les lignes, F2+Entrée pour calculer.
Est-il possible d'écrire sous Visual Basic une sorte de rafraichissement de l'onglet pour tout recalculer automatiquement ?
Merci pour vos réponses,

Benoit
 

benoit.frn

XLDnaute Nouveau
Re : Comment forcer le calcul d'une cellule en VBA

Merci pour la réponse ! Mais j'ai essayé, ça ne marche pas..
J'ai effectivement pensé ajouter le fichier en ligne mais il est trop gros et la feuille concernée par mon problème pioche dans une dizaine de feuilles différentes..
 

Staple1600

XLDnaute Barbatruc
Re : Comment forcer le calcul d'une cellule en VBA

Re


Il suffit d'alléger ton fichier suffisamment ;)
Deux feuilles suffisent, et 20 lignes dans chaque d'elles, avec des données fictives ou anonymisées, ton classeur zippé
(Clic-droit sur ton *.xls puis choisir Envoyer vers Dossiers compressés )

Et normalement tu auras alors un fichier exemple à joindre à ta discussion
 

job75

XLDnaute Barbatruc
Re : Comment forcer le calcul d'une cellule en VBA

Bonjour benoit.frn, Jean-Marie :)

Ceci doit forcer le recalcul des formules dans la feuille active :

Code:
Sub ForceCalcul()
Dim plage As Range, cel As Range
Application.ScreenUpdating = False
Application.EnableEvents = False
Application.Calculation = xlCalculationManual
On Error Resume Next
Set plage = ActiveSheet.UsedRange.SpecialCells(xlCellTypeFormulas)
For Each cel In plage
  cel.Formula = cel.Formula & "+µµµ"
Next
plage.Replace "+µµµ", "", xlPart
Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True
End Sub
A+
 
Dernière édition:

benoit.frn

XLDnaute Nouveau
Re : Comment forcer le calcul d'une cellule en VBA

Merci pour vos réponses ! ça marche bien mais je me rends compte que ce n'est pas adapté à mon cas. Je ne travaille que depuis une semaine sur ce fichier que je n'ai pas moi-même conçu donc je ne saisis pas encore toutes les dépendances dans chacune des feuilles. En l’occurrence job75, votre code actualise chacune des lignes au fur et à mesure mais certaines de mes cellules du début de la feuille dépendent d'autres en fin de feuille, d'où bug...

@staple1600, ce n'est pas par manque de volonté et je comprends que vous joindre un fichier aiderait mais je ne peux vraiment pas le résumer. Les cellules pour lesquels le calcul ne se fait pas sont assez loin dans la feuille, prennent des références au début, et ne concernent que de simples additions qui ne se calculent pas proprement, allez savoir pourquoi... Alors que d'autres se font très bien ! J'espère avoir été assez clair dans mes explications :)
Je vais essayer d'appliquer la macro de job75 que pour certaines cellules. Est-il possible de la lancer que pour des cellules sélectionnées par hasard ?

Un grand merci