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 :

Insérer formule Excel par le VBA [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2012
    Messages
    353
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2012
    Messages : 353
    Points : 184
    Points
    184
    Par défaut Insérer formule Excel par le VBA
    Bonjour,

    j'essaie de part ce code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     .Cells(19, 11).Formula = "=IF(OR(" & .Cells(19, 3).Address(0, 0) & "=" & """" & "," & .Cells(19, 8).Address(0, 0) & "=" & """" _
     & ")," & """" & ",(MOD(" & .Cells(19, 8).Address(0, 0) & "-" & .Cells(19, 3).Address(0, 0) & ",1)-IF(" & .Cells(19, 8).Address(0, 0) & ">" & .Cells(19, 3).Address(0, 0) & _
     ",MAX(0,MIN(" & .Cells(19, 8).Address(0, 0) & ",1)-MAX(" & .Cells(19, 3).Address(0, 0) & ",6/24)),MAX(0,1 - MAX(" & .Cells(19, 3).Address(0, 0) & ",6/24))+MAX(0,MIN(" & .Cells(19, 8).Address(0, 0) & ",1)-6/24))))"
    d'insérer la formule excel suivante qui marche à merveille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      =SI(OU(C19="";H19="");"";(MOD(H19-C19;1)-SI(H19>C19;MAX(0;MIN(H19;24/24)-MAX(C19;6/24));MAX(0;24/24-MAX(C19;6/24))+MAX(0;MIN(H19;24/24)-6/24))))
    cependant un erreur subsiste dans le code VBA car il bloque lors du lancement de la macro.

    si quelqu'un aurait une idée d'où ça peut venir...


    merci

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Essai comme ça :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    .Cells(19, 11).Formula = "=IF(OR(" & .Cells(19, 3).Address(0, 0) & "=""""," & .Cells(19, 8).Address(0, 0) & "=""""" & "),"""",(MOD(" & .Cells(19, 8).Address(0, 0) & "-" & .Cells(19, 3).Address(0, 0) & ",1)-IF(" & .Cells(19, 8).Address(0, 0) & ">" & .Cells(19, 3).Address(0, 0) & _
    ",MAX(0,MIN(" & .Cells(19, 8).Address(0, 0) & ",1)-MAX(" & .Cells(19, 3).Address(0, 0) & ",6/24)),MAX(0,1 - MAX(" & .Cells(19, 3).Address(0, 0) & ",6/24))+MAX(0,MIN(" & .Cells(19, 8).Address(0, 0) & ",1)-6/24))))"
    Hervé.

  3. #3
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 922
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 922
    Points : 28 908
    Points
    28 908
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Une autre solution par l'utilisation de balises.
    Pour éviter dans la formule quatre guillemets pour tester si une cellule est vide ou bien pour écrire une chaîne vide, j'utilise une variable qui contient deux guillemets entourés du code ascii des guillemets (chr(34)
    Donc si on se réfère à ton cas particulier, j'utiliserais trois balises. Une pour les chaînes vide, une pour l'adresse de la colonne C et une pour celle de la colonne H
    Exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub t()
     Const FormulaMask As String = "=IF(OR(<adrC>=<chV>,<adrH>=<chV>),<chV>,(MOD(<adrH>-<adrC>,1)-IF(<adrH>><adrC>,MAX(0,MIN(<adrH>,24/24)-MAX(<adrC>,6/24)),MAX(0,24/24-MAX(<adrC>,6/24))+MAX(0,MIN(<adrH>,24/24)-6/24))))"
     Dim fn As String, ChV As String, adrC As String, adrH As String
     ChV = Chr(34) & "" & Chr(34) ' chr(34) code AscII des guillemets
     fn = Replace(FormulaMask, "<chV>", ChV) ' Remplace la balise <chV> par """"
     With Worksheets("Feuil1")
      adrC = .Cells(19, 3).Address(0, 0): adrH = .Cells(19, 8).Address(0, 0)
      fn = Replace(fn, "<adrC>", adrC) ' Remplace <adrC> par le contenu de la variable adrC
      fn = Replace(fn, "<adrH>", adrH) ' Remplace <adrH> par le contenu de la variable adrH
      .Cells(19, 2).Formula = fn
     End With
    End Sub

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

Discussions similaires

  1. [XL-2003] Insertion de formule Excel par VBA mais par " "
    Par Sibuxian dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 26/05/2010, 12h47
  2. Formules excel écrites via VBA
    Par Loki83 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 20/11/2008, 08h58
  3. [E-00] Transcrire une formule Excel en script VBA
    Par ritournelle dans le forum Macros et VBA Excel
    Réponses: 17
    Dernier message: 16/10/2008, 11h53
  4. Transformé une formule Excel en script VBA ?
    Par SFLEY dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 06/01/2007, 11h48
  5. [VBA-E]replacement données excel par données VBA
    Par plante.douce dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 02/04/2006, 20h23

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