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 :

Probleme pour ecrire une formule


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Points : 137
    Points
    137
    Par défaut Probleme pour ecrire une formule
    bonjour,

    Je suis en train d'essayer de créer une marco qui ajoute une formule dans une colonne. cette formule est un simple pourcentage. la voici (pour la colone J):
    =J12/(J13+J12)

    Ma macro doit inserer cette formule dans plusieurs colonnes. La lettre J va donc changer mais les numeros des ligne eux ne changeront pas. Je sais sur quel colonne je suis grace a l'integer i qui me donne le numero de la colonne.

    J'ai tout d'abord cré une fonction qui me retourne la Lettre de la colonne correspondant au numero de colonne. voila ce que ca donne:

    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
     
    Function LettreColonne(NumCol As Integer) As String
    Dim reste, quotient As Integer
    quotient = Int(NumCol / 26)
    reste = NumCol Mod 26
    If quotient = 0 And reste = 0 Then
        Exit Function
    End If
    If quotient = 0 Then
        LettreColonne = Chr(64 + reste)
    Else
        If reste = 0 Then
            quotient = quotient - 1
            If quotient = 0 Then
                LettreColonne = Chr(64 + 26)
            Else
                LettreColonne = Chr(64 + quotient) & Chr(64 + 26)
            End If
        Else
            LettreColonne = Chr(64 + quotient) & Chr(64 + reste)
        End If
    End If
    End Function
    Voici comment j'implemente ma macro:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      'Mettre % disponible /ex: "=J12/(J13+J12)"
        Cells(14, i).Select
        Lettre = LettreColonne(i)
        Formule0 = "=" & Lettre & "12/(" & Lettre & "13+" & Lettre & "12)"
        ActiveCell.FormulaR1C1 = Formule0
    Je veux que à la ligne 14 colonne i, il y a la formune "=J12/(J13+J12)" mais pas pour J. A la place de J je veux la lettre correspondant a la colonne i.
    J'espere etre suffisament claire.

    En fin bref quand j'execute ma macro j'obtiens la formule:
    ='L12'/('L13'+'L12')

    La lettre est correcte mais il s'est glisser des ' ', ce qui fait que ma formule ne marche pas. J'ai donc deux questions:
    - Pk des ' ' ceux sont glissés dans ma formule?
    - Comment faire pour les enlever?

    Merci d'avance

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Moi j'utiliserais plutot le copy qui mettra tout seul les bonnes lettres

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Range("N2").FormulaLocal = "=J2/(J2+J2)"
    Range("N2").Copy
    Range("N3:N" & i).Select
    Selection.PasteSpecial

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Points : 137
    Points
    137
    Par défaut
    Merci Jfontaine d'avoir repondu a ma question.

    Cependant j'avoue que je comprends pas tres bien ton code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    Range("N2").FormulaLocal = "=J2/(J2+J2)"
    Range("N2").Copy
    Range("N3:N" & i).Select
    Selection.PasteSpecial
    Pour moi, avec ce code tu mets la formule "=J2/(J2+J2)" dans la cas N2
    puis tu la copie dans la case N3 jusqu'a la ligne i:
    -Pour N3 on aura la formune "=J3/(J3+J3)"
    -Pour N4 on aura la formune "=J4/(J4+J4)"
    -un si de suite jusqu'a la ligne i

    Or moi i ne represente pas une ligne mais une colonne.
    Par exemple, si i vaut 7 ca veut dire qu'il faut que je mette ma formule a la colonne "L", ligne 14 (Ligne 14 est toujours fixe pour mon application)

    J'ai trouvé dans un forum une fonction qui permet de faire la conversion de la colonne i qui est chiffre en lettre grace a la fonction LettreColonne()

    Re-voici le code:

    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
     
    Function LettreColonne(NumCol As Integer) As String
    Dim reste, quotient As Integer
    quotient = Int(NumCol / 26)
    reste = NumCol Mod 26
    If quotient = 0 And reste = 0 Then
        Exit Function
    End If
    If quotient = 0 Then
        LettreColonne = Chr(64 + reste)
    Else
        If reste = 0 Then
            quotient = quotient - 1
            If quotient = 0 Then
                LettreColonne = Chr(64 + 26)
            Else
                LettreColonne = Chr(64 + quotient) & Chr(64 + 26)
            End If
        Else
            LettreColonne = Chr(64 + quotient) & Chr(64 + reste)
        End If
    End If
    End Function
    Et re-Voila comment j'implemente ma macro:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      'Mettre % disponible /ex: "=J12/(J13+J12)"
        Cells(14, i).Select
        Lettre = LettreColonne(i)
        Formule0 = "=" & Lettre & "12/(" & Lettre & "13+" & Lettre & "12)"
        ActiveCell.FormulaR1C1 = Formule0
    Je veux que à la ligne 14 colonne i, il y a la formune "=J12/(J13+J12)" mais pas pour J. A la place de J je veux la lettre correspondant a la colonne i.

    Quand j'execute ma macro pour i=7 (7-->L) j'obtiens la formule:
    ='L12'/('L13'+'L12')

    La lettre est correcte mais il c'est glisser des ' ', ce qui fait que ma formule ne marche pas.

    C'est assez bizzard comme erreur car les ' ' ne se sont pas glissé au niveau de la lettre. Je veux dire que je n'obtiens pas la formule:
    ='L'12/('L'13+'L'12)
    Auquel cas ca aurait voulu dire que j'ai une erreur dans fonctionLettre().
    Mais c'est pas le cas puisque j'ai en retour la formule:
    ='L12'/('L13'+'L12')
    On dirait que vba me rebidouille ma chaine de caractaire pour faire une formule qui marche pas...
    Quelqu'un a deja eu ce genre de probleme? Comment faire pour enlever les ' '?
    Ou alors comment faire pour ecrir cette formule d'une autre manière (sachant que j'ai la colonne par un entier i)?


  4. #4
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    utilise formulalocal a la place de formular1c1

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    211
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Avril 2007
    Messages : 211
    Points : 137
    Points
    137
    Par défaut
    Oui ca marche!

    Merci

  6. #6
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 55
    Points : 27
    Points
    27
    Par défaut
    Salut, Dereck et Jérome

    Déreck, je te remercie grandement, parce que ne sachant pas comment définir moi même une fonction, j'étais bloqué depuis un moment !
    Donc çà, c'est cool !

    Par contre, moi je n'arrive pas à faire fonctionner le tout

    Voià mon code (enfin une partie !!)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    CellCoura.OffSet(3, 1).FormulaLocal = "=Traitement!L24*Produit" & p & "!" & LettreColonne(4 * i - 1) & "6"
    (erreur défine par l'application ou par l'objet)

    Ou faut-il écrire la fonction LettreColonne ? Dans la macro, ou à l'extérieur. Dans quel piège suis-je tombé ?

  7. #7
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    est ce que a un moment donné ta lettre ne pourrait pas (avec ta formule) etre inférieur a 1? si i =0 par exemple

  8. #8
    Nouveau membre du Club
    Inscrit en
    Juin 2007
    Messages
    55
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 55
    Points : 27
    Points
    27
    Par défaut
    Exact ! Je me suis planté dans le comptage de mes indices. En remplaçant -1 par +3, je n'ai plus de souci.
    Bien vu Jérome, et merci (doublement...) pour le temps que tu passes à m'aider !

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

Discussions similaires

  1. [LG] Problème pour afficher une matrice
    Par phoebee dans le forum Langage
    Réponses: 4
    Dernier message: 11/08/2005, 21h41
  2. [VB.NET] Probleme pour réutiliser une sockets ??
    Par fdiedler dans le forum Windows Forms
    Réponses: 12
    Dernier message: 10/03/2005, 14h37
  3. [MFC][debutant] probleme pour déclarer une structure
    Par Robleplongeur dans le forum MFC
    Réponses: 10
    Dernier message: 21/02/2005, 13h29
  4. Mkisofs - problème pour créer une image
    Par tomnie dans le forum Applications et environnements graphiques
    Réponses: 4
    Dernier message: 04/08/2004, 11h44
  5. Réponses: 2
    Dernier message: 08/08/2003, 17h30

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