VBA: Application formule sur les cellules non vide

Fermé
Erakmur Messages postés 24 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 14 octobre 2019 - 14 oct. 2019 à 11:41
Erakmur Messages postés 24 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 14 octobre 2019 - 14 oct. 2019 à 18:10
Bonjour,

Je cherche à remplacer

For Each c In [Aj9:Aj2000]
c = c.Formula

Par
For Each c In [Aj9:Aj2000] non vide
c = c.Formula

Pour éviter des calculs trop long le c.formula ne doit s'appliquer uniquement sur les cellules non vide de la plage.Quelqu'un a t'il une solution ?
Cordialement

4 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
14 oct. 2019 à 12:43
Bonjour,

For Each c In [Aj9:Aj2000].SpecialCells(xlCellTypeFormulas)


Il faut ajouter un test si tu peux n'avoir aucune formule dans la plage :
    Dim pl As Range
    Set pl = [Aj9:Aj2000].SpecialCells(xlCellTypeFormulas)
    If Not pl Is Nothing Then
        For Each c In pl
            '...
        Next c
    End If

eric
0
Erakmur Messages postés 24 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 14 octobre 2019
14 oct. 2019 à 14:35
Je n'ai pas bien compris. Je remplace
For Each c In [Aj9:Aj2000]
c = c.Formula

par

Dim pl As Range
Set pl = [Aj9:Aj2000].SpecialCells(xlCellTypeFormulas)
If Not pl Is Nothing Then
For Each c In pl
'...
Next c
End If

?
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
14 oct. 2019 à 16:11
Ben non.
Tu remplaces '... par le code que tu veux appliquer à chaque cellule :
c = c.Formula
si tu n'as que ça à faire
eric
0
Erakmur Messages postés 24 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 14 octobre 2019
14 oct. 2019 à 16:49
Excel me met erreur 1004: pas de cellules correspondantes

Sub Validation()
Dim C As Range
Dim pl As Range
Set pl = [Aj9:Aj2000].SpecialCells(xlCellTypeFormulas)
If Not pl Is Nothing Then
For Each C In pl
C = C.Formula
Next C
End If
End Sub
0
Erakmur Messages postés 24 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 14 octobre 2019
14 oct. 2019 à 14:46
C'est la macro complète, j'aurais peut être du te la donner dès le début.

Sub Validation()
Dim c As Range

Application.Calculation = xlManual
Application.ScreenUpdating = False
For Each c In [Aj9:Aj2000]
c = c.Formula
Next
Application.Calculation = xlAutomatic
End Sub
0
ccm81 Messages postés 10852 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
Modifié le 14 oct. 2019 à 17:32
Bonjour

La proposition d'eric (salut à toi) fonctionne bien
Peut être n'as tu pas de formule dans ta colonne
Par contre
c = c.Formula
me laisse perplexe :-()
https://mon-partage.fr/f/qqOXQ2Rr/

Cdlmnt
0
Erakmur Messages postés 24 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 14 octobre 2019
Modifié le 14 oct. 2019 à 18:07
Bonjour,
Il n'y a aucune formule dans la colonne AJ. Le mieux c'est que je donne le fichier complet
https://www.cjoint.com/c/IJopMDzi4rL
La macro simule une validation de la cellule qui déclencle une autre macro qui créer le planning avec les codes couleurs. C'est la macro Validation.
Même si cela fonctionne, cela prend trop de temps.
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 213
Modifié le 14 oct. 2019 à 18:10
Il n'y a aucune formule dans la colonne AJ
il faut être un peu curieux si tu veux progresser.
Lorsque tu ne connais pas une instruction fait F1 dessus pour lire son aide.
L'aide sur SpecialCells t'apprend que tu as d'autre valeurs que xlCellTypeFormulas pour XlCellType .
Par exemple :
xlCellTypeConstants. Cellules contenant des constantes

Si c'est un problème de lenteur, je vois pas en quoi retraiter à nouveau toutes les valeurs en AJ, même celles n'en ayant pas besoin, rendra l'ensemble plus rapide (?)

Et quand je vois On Error Resume Next sans raison en début d'une procédure, je me dis que j'ai affaire à qq'un qui met la poussière sous le tapis et ne cherche pas à corriger au fur et à mesure les erreurs.
Je préfère me retirer...
eric
0
Erakmur Messages postés 24 Date d'inscription mardi 12 juin 2012 Statut Membre Dernière intervention 14 octobre 2019
14 oct. 2019 à 18:10
Je me disais que tester si la cellule était vide ou pas était bcp plus rapide que d'appliquer la formule.
0