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-E] Range("C30").Value = 7 fait tout buguer


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 11
    Par défaut [VBA-E] Range("C30").Value = 7 fait tout buguer
    salut tout le monde
    dite, j'ai un petit pb sur excel
    j'ai fait un programme avec vba que voici:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Option Explicit 
     
    Public Function b(flow As Double, flow_loss As Double) 
     
    Dim n As Double 
    n = flow - flow_loss 
    b = n 
    Range("C30").Value = 7 
    End Function
    puis dans la feuille excel,
    dans la cellule B34 est ecrit : =b(5;3) il apparait #VALUE! au lieu
    de -2
    par contre, si j'enlève la ligne Range("C30").Value = 7 il
    apparait le bon resultat : -2

    je ne comprend vraiment pas pourquoi
    (C30 n'est pas la cellule qui contient la fonction...)
    avez vous des idées ?

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Bonsoir

    Une fonction vba utilisée dans une feuille de calcul ne peut pas modifier le contenu d'une cellule.

    Cette interdiction est nécessaire pour permettre à Excel de recalculer les cellules sans interférences
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 11
    Par défaut
    pourtant, la ligne problematique marche à l'intérieur d'une procédure,
    ex qui marche ci dessous :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sub b() 
    Range("C30").Value = 7 
    End Sub
    c'est pour ca que ca me parait bizzard

    (de plus, j'ai d'autres exemples ou excel interfère:

    A1 = 3
    A2 = 2
    A3 = Sum(A1+A2)

    j'ai fait une macro qui dit :
    A1=A3 jusqu'à ce que A3>100

    dans cette exemple, excel interfere avec VBA et ca marche tres bien...)

    merci de ta reponse

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    A l'intérieur d'une procédure, c'est normal qu'elle fonctionne, et c'est heureux

    Mais j'ai dit que cela ne pouvait pas fonctionner à l'intérieur d'une fonction utilisée dans une feuille de calcul
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  5. #5
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 11
    Par défaut
    ok, j'explique entièrement mon problème en espérant qu'il y a une autre solution dans laquelle vous pouvez m'aiguiller

    je dois realiser une boucle je pense

    je pars d'un nombre que j'invente (ex : 4)

    apres beaucoup de calcul dans la feuille excel (que je ne peux pas ecrir en vba) j'obtient un resultat approximatif à partir de ce nombre.

    pour affiner ce resultat approximatif, j'aimerais que ce resultat approximatif refasse le meme chemin de calcul que le premier nombre que j'avais inventé (4), c'est-à-dire que j'aimerais copier ce resultat approximatif, puis le collé à la place du nombre 4...pour obtenir un second resultat plus precis

    ce second resultat plus precis, j'aimerais qu'il fasse aussi le meme chemin que le nombre 4 (ainsi que le resultat approximatif)...ce qui me donnerais à troisième résultat encore plus précis...

    etc...

    et j'aimerais donc faire des copier-collé de résultats pour le remettre en variable de départ comme expliqué précédemment jusqu'à ce que le resultat ne change pas beaucoup si il refait le chemin...

    j'ai crée cette fonctions simple qui ne marche pas, mais j'arrive à contourner ce problème, je pourrais resoudre un plus grand...:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Public Function b(flow As Double, flow_loss As Double)
    Dim n As Double
    n = flow - flow_loss
    b = n
    Range("C34").Value = n
    End Function
    j'ai besoin d'une fonction pour qu'elle soit toujours vrai sans avoir rien à taper (pas d'une procédure)
    j'ai besoin de repasser par les resultats de la feuille excel car ceux-ci sont obtenus dans un tableau et que que je sais pas traduire en vba

    voila ! j'espere avoir été un peu plus clair cette fois ci

  6. #6
    Expert confirmé
    Avatar de cafeine
    Inscrit en
    Juin 2002
    Messages
    3 904
    Détails du profil
    Informations forums :
    Inscription : Juin 2002
    Messages : 3 904
    Par défaut
    Hello,

    comme le dit Pierre, ce code ne peut pas être appelé par une FONCTION, mais par une PROCEDURE.

    A ta place je ferais un bouton, qui lance la procédure n fois.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Dim i as Long, j as Long
     
    i = InputBox("Entrez le nombre d'itérations")
    For j = 1 to i
     ' code d'appel de ta sub
    Next j

Discussions similaires

  1. Echappement de quote dans input/value
    Par pc.bertineau dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 10/09/2007, 14h27

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