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 :

Modification de la valeur d'une cellule modifiable [XL-2007]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut Modification de la valeur d'une cellule modifiable
    Bonjour à tous,

    Je suis débutant en VBA, je m'y suis mis il y a un mois lors de la création d'un tableau de calcul pour mon entreprise.
    Jusque la j'ai réussi à faire ce que je voulais, entre autre grâce aux nombreuses ressources que j'ai pu trouver sur votre forum. (Affichage de certaines lignes en fonction d'une valeur, modification du format de cellules en fonction d'une autre, etc...)

    Aujourd'hui je sèche, voici mon problème :

    La cellule C80 contient une valeur en tonne que j'indique manuellement. (3.0 T par exemple)
    La cellule C79 contient une liste de choix. (Oui ou non)

    J'aimerais que si C79 indique "oui", alors la valeur de C80 soit multipliée par 0.9, ou si C79 indique "non", alors la valeur de C80 reste normale. (3.0 T)

    Voici ce que j'ai fais pour le moment.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim VAL3
    VAL3 = Sheets("Analyse technique").Range("C79").Value
     
    If VAL3 = "Oui" Then
    Range("C80").Value = Range("C80").Value * 0.9
     
    ElseIf VAL3 = "Non" Then
    Range("C80").Value = Range("C80").Value
    End If
    Cela ne fonctionne pas car la multiplication tourne en boucle et ne s'arrête pas, ce qui fini par indiquer un message d'erreur. Je n'ai pas trouvé d'informations concernant le format des multiplications en VBA, j'ai donc fait comme pour excel. (Ce qui n'est pas forcement une bonne idée ^^)

    Merci d'avance de votre aide, n'hésitez pas à me demander plus de détails si je n'ai pas été suffisamment clair.

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Cela ne fonctionne pas car la multiplication tourne en boucle et ne s'arrête pas, ce qui fini par indiquer un message d'erreur. Je n'ai pas trouvé d'informations concernant le format des multiplications en VBA, j'ai donc fait comme pour excel. (Ce qui n'est pas forcement une bonne idée ^^)
    Il doit sûrement manquer un bout de code parce-que je ne vois pas comment celui-ci pourrait tourner en boucle.
    La multiplication se fait effectivement comme dans Excel cependant tu dis
    La cellule C80 contient une valeur en tonne que j'indique manuellement. (3.0 T par exemple)
    Si tu écris le T, ce n'est plus une valeur numérique mais alphanumérique. C'est alors plutôt un message d'erreur d'incompatibilité de Type que tu reçois.
    Si tu souhaites voir 3.0 T alors que tu tapes 3 il faut utiliser le format personnalisé. Ainsi la valeur est bien numérique et l'utilisateur visualise la valeur avec plus de confort.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut
    Merci pour vos réponses !

    Citation Envoyé par Philippe Tulliez Voir le message
    Si tu écris le T, ce n'est plus une valeur numérique mais alphanumérique.
    Oui en effet, je n'ai pas précisé que l'unité était gérée par excel via les formats personnalisés. J'entre uniquement un chiffre dans cette cellule. (3 en l’occurrence)

    Citation Envoyé par rdurupt
    Si a=1=> a=a* 0.9=0.9 => 0.81 => 0.729 => 0.6561
    C'est exactement ce qui se passe malheureusement.

    Citation Envoyé par rdurupt
    En conséquence tu n'as besoin que d'une simple formule :
    Je comprends bien mais justement, si je passe par VBA c'est parce que je souhaite pouvoir laisser cette cellule "modifiable".
    J'ai bien l'impression que ce que je demande est impossible étant donné que la cellule de base de mon script agi sur cette même cellule... (d'ou la boucle)

    Il n'y a pas un moyen pour que la multiplication ne fasse qu'une fois ?

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Il n'y a pas un moyen pour que la multiplication ne fasse qu'une fois ?
    A moins de placer un flag dans une autre cellule, je ne vois pas comment on pourrait le réaliser. Ce flag pourrait-être de remettre un Non.
    Je pense que tu devrais mieux expliquer la problématique parce-que à la première lecture j'étais plutôt de l'avis de Robert de faire cela avec une simple formule Excel.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour,

    Ce qui est dommage, c'est que tu ne précises pas ce qui provoque le lancement de la procédure.
    S'il s'agit de l'évènement Change de ta feuille, tu peux utiliser la propriété EnableEvents pour éviter de tourner en boucle.

    Cordialement.

  6. #6
    Invité
    Invité(e)
    Par défaut J'ai bien l'impression que ce que je demande est impossible
    Si tu as la possibilité de retrouver la valeur initial par calcule, colle le résultat dans une cellule non visible par l’utilisateur et applique la formule que je t’es donné.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    ActiveSheet.Cells(Target.Row, 255) = ValeurInitiale
    End Sub
    Dernière modification par Invité ; 21/02/2013 à 14h49.

  7. #7
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Février 2013
    Messages
    231
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 231
    Par défaut
    Pour faire plus simple, je voudrais écrire cette formule...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(C79="oui";C80*0,9;C80)
    ... dans la cellule C80.

    Impossible sur excel mais est-ce possible en VBA ?

    Voici pour gFZT82 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Private Sub Worksheet_Calculate()
    Dim VAL3
    VAL3 = Sheets("Analyse technique").Range("C79").Value
     
    If VAL3 = "Oui" Then
    Range("C80").Value = Range("C80").Value * 0.9
     
    ElseIf VAL3 = "Non" Then
    Range("C80").Value = Range("C80").Value
    End If
     
    End Sub
    Citation Envoyé par gFZT82
    S'il s'agit de l'évènement Change de ta feuille, tu peux utiliser la propriété EnableEvents pour éviter de tourner en boucle.
    Je ne connais pas cette propriété, aurais-tu un exemple ?

    Merci encore de votre aide.

  8. #8
    Invité
    Invité(e)
    Par défaut Modification de la valeur d'une cellule modifiable
    Bonjour,
    Malheureusement pour toi ta macro est d’une efficacité redoutable.
    Si a=1=> a=a* 0.9=0.9 => 0.81 => 0.729 => 0.6561
    En revanche a=1 b= a* 0.9=0.9 donnera toujours le même résultat.
    Maintenant tu n’as pas besoin dans ton exemple d’un ElseIf si c’est pas oui c’est forcément non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    If VAL3 = "Oui" Then
    Else
    End if
    De plus toujours dans ton exemple a=a n’est pas utile puisque a ne change pas donc un if et end if pas de else.
    Donc en conclusion, tu as besoin de deux cellules une pour la valeur initiale et l’autre pour la valeur calculées.
    En conséquence tu n'as besoin que d'une simple formule :
    Code Formule : Sélectionner tout - Visualiser dans une fenêtre à part
    =SI(B1="oui";A1*0,9;A1)
    Cordialement.

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

Discussions similaires

  1. [Débutant] Modification de la valeur d'une cellule d'un datagrid
    Par devvanjier dans le forum Windows Presentation Foundation
    Réponses: 5
    Dernier message: 11/03/2014, 11h55
  2. Modifier le Caption d'un Label avec la valeur d'une cellule
    Par kitcarflo dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 30/04/2008, 11h42
  3. Acquisition de valeur d'une cellule modifie
    Par X-plode dans le forum Interfaces Graphiques en Java
    Réponses: 2
    Dernier message: 03/07/2007, 14h39
  4. [VBA_Excel] Modifier un chemin en fonction de la valeur d'une cellule
    Par jefe.k dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 23/02/2007, 15h28
  5. modification de la valeur d'une cellule
    Par magictom42 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 17/10/2006, 17h22

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