IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Application d'une formule dans un range dynamique


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Par défaut Application d'une formule dans un range dynamique
    Bonjour,

    Je souhaiterai appliquer (en vba) une formule sur un range dynamique.

    Pour l'instant,

    Voici mon code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub début()
     
        Range("P1").Formula = "Délai remise fichier - BAT réel"  'Juste pour l'entête de colonne'
        Range("P2:P50000").Formula = "=IF(COUNTA(G2,H2)=2,NETWORKDAYS(G2,H2,pFeries)-1,"""")"
     
    End Sub
    Mon idée est de scruter la colonne "A" à partir de la cellule "A2" pour vérifier le nombre de ligne et ensuite appliquer ma formule à partir de la cellule P2.

    Cela évitera de forcer l'application de ma formule sur les 50 000 lignes ce qui je l'espère fera gagner du temps au traitement, le rendra plus propre et évitera que j'oublie de modifier mon code en cas de données supérieures à 50 000 lignes.

    Mais pas moyen de trouver des éléments similaires ou simples (pour un débutant comme moi en VBA) sur ce forum ou sur le net.

    HELP

  2. #2
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    quelque chose comme ça ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Sub début()
        With Feuil1
            .Range("P1").Value = "Délai remise fichier - BAT réel"
     
            ' calculer la dernière ligne au choix :
            ' .Range("A" & Rows.Count).End(xlUp).Row
            ' .UsedRange.Rows.Count
            ' .Cells(.Rows.Count, 1).End(xlUp).Row
            ' (et il y a encore bien d'autres méthodes)
     
            With .Range("P2:P" & .Range("A" & Rows.Count).End(xlUp).Row)
                .Formula = "=IF(COUNTA(G2,H2)=2,NETWORKDAYS(G2,H2,pFeries)-1,"""")"
                '.Value = .Value  ' permet de remplacer les formules par leur valeur
            End With
        End With
    End Sub
    je te laisse remplacer Feuil1 par le CodeName de ta feuille (le CodeName est visible dans l'éditeur de code VBE) ... ou simplement à faire référence au nom de ta feuille (moins sécurisé, si on renomme la feuille ça ne marche plus) ==> Worksheets("NomDeFeuille")

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Par défaut
    Merci Joe pour ton aide précieuse.

    ça fonctionne !

    Par contre, que penses-tu de ma syntaxe (afin de pourvoir progresser)

    J'ai ajouter plusieurs calculs :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    Sub début()
        With Feuil2
            .Range("P1").Value = "Délai remise fichier - BAT réel"
            .Range("Q1").Formula = "Délai BAT - production réel"
            .Range("R1").Formula = "Différence date remise fichier réelle et prévue"
            .Range("S1").Formula = "Différence date BAT réelle et prévue"
     
     
            With .Range("P2:P" & .Range("A" & Rows.Count).End(xlUp).Row)
                .Formula = "=IF(COUNTA(G2,H2)=2,NETWORKDAYS(G2,H2,pFeries)-1,"""")"
            End With
     
            With .Range("Q2:Q" & .Range("A" & Rows.Count).End(xlUp).Row)
                .Formula = "=IF(COUNTA(H2,I2)=2,NETWORKDAYS(H2,I2,pFeries)-1,"""")"
            End With
     
            With .Range("R2:R" & .Range("A" & Rows.Count).End(xlUp).Row)
                .Formula = "=IF(COUNTA(E2,G2)=2,NETWORKDAYS(E2,G2,pFeries)-1,"""")"
            End With
     
            With .Range("S2:S" & .Range("A" & Rows.Count).End(xlUp).Row)
                .Formula = "=IF(COUNTA(F2,H2)=2,NETWORKDAYS(F2,H2,pFeries)-1,"""")"
            End With
     
        End With
    End Sub
    Merci

  4. #4
    Expert confirmé

    Homme Profil pro
    Curieux
    Inscrit en
    Juillet 2012
    Messages
    5 169
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Curieux
    Secteur : Arts - Culture

    Informations forums :
    Inscription : Juillet 2012
    Messages : 5 169
    Billets dans le blog
    5
    Par défaut
    Bonjour,

    deux choses :

    - quand tu affectes une VALEUR à une cellule, utilises la propriété .Value plutôt que .Formula, question de logique pure (aucun impact sur le résultat)

    - tu n'as pas besoin de calculer à chaque fois ta dernière ligne, c'est toujours le même calcul, tu peux donc faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Sub début()
    Dim DerLig as Long
     
        With Feuil2
            DerLig = .UsedRange.Rows.Count
            .Range("P1").Value = "Délai remise fichier - BAT réel"
            .Range("Q1").Value = "Délai BAT - production réel"
            .Range("R1").Value = "Différence date remise fichier réelle et prévue"
            .Range("S1").Value = "Différence date BAT réelle et prévue"
     
     
            With .Range("P2:P" & DerLig)
                .Formula = "=IF(COUNTA(G2,H2)=2,NETWORKDAYS(G2,H2,pFeries)-1,"""")"
            End With
     
            With .Range("Q2:Q" & DerLig)
                .Formula = "=IF(COUNTA(H2,I2)=2,NETWORKDAYS(H2,I2,pFeries)-1,"""")"
            End With
     
            With .Range("R2:R" & DerLig)
                .Formula = "=IF(COUNTA(E2,G2)=2,NETWORKDAYS(E2,G2,pFeries)-1,"""")"
            End With
     
            With .Range("S2:S" & DerLig)
                .Formula = "=IF(COUNTA(F2,H2)=2,NETWORKDAYS(F2,H2,pFeries)-1,"""")"
            End With
     
        End With
    End Sub
    Et si tu n'as absolument pas besoin de conserver les formules et que seul le résultat compte, je te conseille de convertir la formule par sa valeur (voir mon précédent code où je t'ai écrit la ligne de code adéquate)

    On pourrait sûrement chipoter un peu et tenter de faire une boucle pour écrire toutes tes formules d'un coup, mais les deux dernières ne sont pas tout à fait sur le même pattern, alors ça risque de complexifier ton code pour rien

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2006
    Messages
    227
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2006
    Messages : 227
    Par défaut
    Merci beaucoup.

    J'ai vraiment beaucoup de taf pour me mettre à niveau mais je pense que c'est indispensable pour aller plus loin dans Excel.

    Encore Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Insérer une formule dans une cellule Excel via VBA
    Par *.Har(d)t dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 19/02/2020, 13h02
  2. [VBA] Macro qui envoie une formule dans une cellule
    Par Okoss dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 24/04/2007, 22h32
  3. Insertion d'une image dans du texte dynamique
    Par djp_phillips dans le forum Flash
    Réponses: 10
    Dernier message: 18/03/2007, 19h34
  4. Réponses: 2
    Dernier message: 13/02/2007, 10h53
  5. modifier la plage d application d une formule
    Par Huubb dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 19/10/2006, 14h31

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo