VBA: Application formule sur les cellules non vide

Erakmur Messages postés 24 Statut Membre -  
Erakmur Messages postés 24 Statut Membre -
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

  1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
     
    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
  2. Erakmur Messages postés 24 Statut Membre
     
    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
    1. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    2. Erakmur Messages postés 24 Statut Membre
       
      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
  3. Erakmur Messages postés 24 Statut Membre
     
    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
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    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
    1. Erakmur Messages postés 24 Statut Membre
       
      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
    2. eriiic Messages postés 24581 Date d'inscription   Statut Contributeur Dernière intervention   7 281
       
      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
    3. Erakmur Messages postés 24 Statut Membre
       
      Je me disais que tester si la cellule était vide ou pas était bcp plus rapide que d'appliquer la formule.
      0