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 :

[VBA] Insérer une variable dans une formule Excel via une macro [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 54
    Par défaut [VBA] Insérer une variable dans une formule Excel via une macro
    Bonjour,

    Je souhaite mettre une variable dans une formule Excel via une macro en VB.
    Voici un bout du code et la ligne que j'utilise :

    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
    Private Sub EcritureData(ByVal sFile As String)
        
    Dim x As Long
    Dim Data As String
    Dim NumFichier As Integer
    Dim cellule As Integer
    
    x = 1
       
    NumFichier = FreeFile
    Open sFile For Input As #NumFichier
    Do While Not EOF(NumFichier)
        Line Input #NumFichier, Data
        If x = 1 Then
            Cells(x, 5) = Data
        ElseIf x = 2 Then
            Range("A2").Formula = "=GAUCHE("+Cstr(Data)+";CHERCHE(" ";"+Cstr(Data)+"))" // LA LIGNE EN QUESTION
            
        End If
        x = x + 1
    Loop
    Close #NumFichier
    End Sub
    J'ai toujours cette erreur : "Erreur de Syntaxe". Je pense que cela provient du fait que j'utilise la fonction CHERCHE car je l'utilise pour trouver un espace dans ma chaine de caractère qui se présente comme tel : 115 "xxx.xxx.xxx.xxx". Comme vous l'aurez compris j'aimerais directement extraire de ma chaine le "115". En espérant vous avoir apporter assez d'info.

    Sticks_678

  2. #2
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 54
    Par défaut [VBA] Insérer une variable dans une formule Excel via une macro
    J'ai fais un deuxième essai en mettant l'espace dans une variable pour ne plus avoir le soucis des doubles quotes qui pourrait poser problème.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Dim espace as String
    espace = " "
    //.........
    Range("A2").Formula = "=GAUCHE(" + Data + ";CHERCHE(" + espace + ";" + Data + "))"
    L'erreur a maintenant changé : "Erreur définie par l'application ou par l'objet".
    Si cela peut apporter d'autre piste pour une éventuelle résolution

    Sticks_678

  3. #3
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    Bonjour sticks_678,

    Alors :
    1. Je te suggère, lorsque tu concatènes des chaines de caractères, de plutôt utiliser l'opérateur "&" plutôt que "+".
      C'est plus clair pour toi et ça évite des erreurs.
    2. Tu utilises la méthode Formula. Or, Excel est par nature en anglais quand tu utilises les macros.
      Ainsi, il est nécessaire d'utiliser la méthode FormulaLocal pour que le VBA se convertisse bien dans la langue française (pour faire simple).
    3. Enfin, et là est le plus gros point, tu cherches à utiliser la formule suivante =GAUCHE("une valeur";CHERCHE(" ";"une valeur")).
      Comme tu peux le voir, j'ai des guillemets pour bien dire à Excel qu'il s'agit d'une chaine de caractères. Ce que tu dois donc reproduire quand tu essayes de placer ta formule par VBA.
    4. Or, l'opération guillemet (") en VBA est déjà utilisé. Ainsi, pour lui dire qu'il s'agit du caractère guillemet et pas de l'opération pour définir les chaines de caractères VBA, tu dois utiliser le double guillemet : "".
    5. Ainsi, voici un exemple que je te laisse adapter :
      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
      Option Explicit
       
      Sub EcritureData() 'ByVal sFile As String)
       
      Dim x As Long
      Dim Data As String
      Dim NumFichier As Integer
      Dim cellule As Integer
      Dim oStr As String
       
      x = 2
       
      NumFichier = FreeFile
      'Open sFile For Input As #NumFichier
      'Do While Not EOF(NumFichier)
          'Line Input #NumFichier, Data
       
          Data = "12345 6789"
       
          If x = 1 Then
              Cells(x, 5) = Data
          ElseIf x = 2 Then
              Range("A2").FormulaLocal = "=GAUCHE(""" & CStr(Data) & """;CHERCHE("" "";""" & CStr(Data) & """))"
          End If
       
          x = x + 1
      'Loop
      'Close #NumFichier
      End Sub

    N'hésite pas à revenir vers le forum.

    Cordialement,
    Kimy

  4. #4
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 54
    Par défaut
    Je te remercie pour ta réponse.
    Il me semble que tes conseils m'ont permis de résoudre quelques problèmes et m'en a appris beaucoup puisque je débute en VB mais malheureusement j'ai toujours l'erreur : "Erreur définie par l'application ou l'objet". Si tu as une autre solution je suis preneur.


    Je t

  5. #5
    Membre Expert
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Par défaut
    sticks_678,

    La solution est là ! ^^
    L'erreur restante se situe à 30cm de l'écran.

    Je te propose de suivre ce que je viens de t'écrire - en repartant peut-être de zéro pour la création de ta formule.

    Si tu ne parviens pas à trouver l'erreur, post ton code en dessous.

    Cordialement,
    Kimy

  6. #6
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Décembre 2016
    Messages
    54
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Décembre 2016
    Messages : 54
    Par défaut [VBA] Insérer une variable dans une formule Excel via une macro
    Bonjour Kimy,

    J'ai résolu mon problème. Enfaite ma chaine de caractère était comme ceci : 10 "xxx.xxx.xxx.xxx". Les guillemets à l'intérieur de cette chaine posait problème, je les ai donc supprimés ce qui m'a permis de résoudre mon problème.

    Je poste mon code si jamais des personnes ce retrouve avec le même problème en sachant qu'il n'est pas optimisé à cause du niveau que j'ai dans ce langage !
    Je te remercie donc pour ton aide qui m'a été très instructive et surtout utile !

    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
    Private Sub EcritureData(ByVal sFile As String)
     
    Dim x As Long
    Dim Data As String
    Dim NumFichier As Integer
    Dim cellule As Integer
    Dim espace As String
    Dim oStr As String
     
     
    x = 1
     
    NumFichier = FreeFile
    Open sFile For Input As #NumFichier
    Do While Not EOF(NumFichier)
        Line Input #NumFichier, Data
        If x = 1 Then
            Cells(x, 5) = Data
            Data = Replace(Data, " """, " ") // Enleve le 1er guillement
            Data = Replace(Data, """", "") // Enleve le guillemet en fin de chaine
            Cells(x, 5).FormulaLocal = "=GAUCHE(""" & CStr(Data) & """;CHERCHE("" "";""" & CStr(Data) & """))"
        ElseIf x >= 2 Then
            Cells(x, 1) = Data
            'Cells(x, 1).FormulaLocal = "=GAUCHE(""" & CStr(Data) & """;CHERCHE("" "";""" & CStr(Data) & """))"
        End If
        x = x + 1
    Loop
    Close #NumFichier
    End Sub

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 11/09/2015, 15h09
  2. [XL-2007] Executer formule excel depuis une variable
    Par adamskone dans le forum Excel
    Réponses: 4
    Dernier message: 04/09/2014, 16h40
  3. Réponses: 4
    Dernier message: 01/07/2014, 16h55
  4. Réponses: 10
    Dernier message: 26/07/2007, 14h16
  5. [Excel]Mettre une variable dans une fonction
    Par soad029 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/04/2006, 12h00

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