Macro calcul excel

Résolu
Bonjour,

dans un fcihier excel, j'ai actuellement un calcul pour lequel je rentres une données manuelles (ex 10) que j'incrementes de 1 en fonction de mon résultats (1 seul case).
Est-il possible de créer une macro ou une formule qui incremnete automatiquement sir mon résulatst est faux?
merci d'avance

10 réponses

  1. Bonjour chtileensois,

    Tu as dû certainement écrire ton texte rapidement ou tu as un problème avec ton clavier.
    Il est difficile de comprendre ce que tu souhaites quand tu écris "une données manuelles". Doit-on penser à une donnée manuelle ou à des données manuelles? De quel résultat, quelle case?
    Essaye de te mettre à la place de tes lecteurs. On veut bien t'aider, mais prends un peu plus de temps pour bien poser ton problème ou envoie un fichier à http://www.cijoint.fr

    Cordialement mon sir
    0
    1. bonjour,

      désolé pour le texte, mais pas facile de taper avec ma fille de 2 ans qui touche à tout.
      Bref, pour reexpliquer:
      dans une feuille de calcul Excel, je rentres une valeur numerique en E31 (de 10à100) et un calcul me donne un résultat (devis) et verifie 1 valeur (D36<2600).Si mon calcul est juste je gardes mon devis, si il est faux je rentres une nouvelle valeur dans E31 (+1).cela peux etre long avant de trouver la première solution.
      je penses qu'il y a une solution automatique facile maais je ne l'ai pas trouvé.
      merci de vos éléments
      0
  2. Contributeur
    Bonjour,
    Avec autant de renseignements c'est un "euphémisme" de dire "c'est façile"
    .. Blaque à part, donne un peu plus de détails sur ce que tu veux faire.
    A+
    0
    1. Contributeur
      Il y a TOUJOURS une solution mathématqie, à condition de comprendre l'exposer ??, ce qui, dans ce cas, n'est pas évident.
      Mettre un exemple de ton classeur sur CiJoint.fr, avec quelque données et surtout un exemple explicite des résultats que tu souhaite.
      A+
      0
      1. Bonsoir

        Je crois comprendre que :

        tu incrémentes la cellule E31 de 1 à partir de 10 jusqu'à 100.
        Dans une autre cellule : tu as un calcul qui se fait, il faut que dans D36 la valeur soit inférieure à 3600.
        Est ce que c'est à ce moment que tu considères que ton calcul est juste?

        Question: Une fois arrivé à 100 la valeur doit-elle revenir à 10?

        Si c'est le cas , tu peux insérer cette macro dans ta feuille.

        Pour cela, tu fais Alt+ F11. Dans le logicel VBE qui s'ouvre tu as normalement à gauche une fenêtre projet.
        Tu dois voir tes feuilles de ton classeur. Tu doubles clic sur la feuille dans laquelle tu veux travailler. A droite s'ouvre ou est déjà ouverte une grande fenêtre normalement vide - s'il n'ya pas de macros - et tu colles la macro suivante:
        ------------------------------------------------------------------------------
        Public Chgt As Boolean

        Private Sub Worksheet_Change(ByVal Target As Range)
        Dim a As String
        a = Target.Address
        If Range("E31") = "" Then Range("E31") = 10
        If a <> "$D$36" Or Chgt = True Then Chgt = False: GoTo fin

        If Range("E31") > 100 Or Range("E31") < 10 Then Range("E31") = 10
        If Range("D36") < 3600 Then
        Chgt = True
        Range("E31") = Range("E31") + 1

        End If
        fin:
        End Sub
        -------------------------------------------------------------------------------
        Elle met à 10 E31 si la cellule est vide ou si elle dépasse 100.
        Elle incrémente automatiquement E31 quand la cellule D36 est inférieure à 3600.

        Cordialement

        Patgnr
        0
        1. c'est ça
          merci pour la macro
          je vais la tester et je vous tiens au courant.
          0
      2. je viens de tester

        la valeur e31 reste à 10 et ne s'increment pas même si D36 est >3600.

        je n'est pas reussi à acceder à http://www.cijoint.fr pour vous envoyer un exemple de mon prolème
        0
        1. Bonsoir

          Dès que tu peux mettre le fichier, je regarderai.
          Est-ce que la sécutrité macro est dévalidée?
          0
          1. bonjour

            j'ai reussi à mettre le fichier
            voici le lien
            http://www.cijoint.fr/cjlink.php?file=cj201012/cij4VMVvWK.xls

            je penses que la securité macro est desactivé mais je ne suis pas expert.

            merci
            0
            1. Bonjour

              J'ai refait la macro qui est maintenant plus adaptée à ton besoin. Cependant le site cijoint.fr me renvoie une page d'erreur. Dès qu'il est en fonctionnement je t'envoie le fichier.

              Patgnr
              0
              1. ]
                0
              2. Le Fichier est sur Ca y est la situation s'est débloquée .
                Le fichier est à l'adresse suivante: http://www.cijoint.fr/cjlink.php?file=cj201012/cijtnB5cCB.xls
                0
            2. bonsoir,

              merci pour le fichier et la rapidité.
              j'ai vu la macro, mais cela ne semble pas fonctionner pourtant les macro sont
              activer.
              si tu peux m'aidr pour queje puisse tester

              encore merci

              ps: j'ai eloigné le petit monstre de l'ordinateur (blanche neige c'est miraculeux pour ça)
              0
              1. bonsoir Patgnr,
                j'ai regarder la macro, et je n'est pas bien compris son fonctionnement.
                Pour moi, le principe etait de mettre 10 en E31, de verifier si D36 <2600 et si c'etait faux
                d'incrementer E31 +1 , jusqu'à ce que D36<2600.

                merci d'avance
                0
              2. Bonjour,

                Pour tester la macro, ne connaissant pas quelle cellule je devais modifier pour que D36 change de valeur,
                J'avais rajouté dans la formule de D36 =D32+2*C33+ D38

                en rajoutant +D38, ça me permettait de rentrer une valeur dans la cellule D38 ce qui changait la valeur de D36 et en fonction du résultat E31 s'incrémentait.

                Je viens de contrôler en récupérant le fichier sur cijoint E31 se désincrémente, j'avais oublié de remettre un signe positif à la ligne suivante:
                au lieu de lire
                If Range("D36") < 3600 Then Chgt = True: Range("E31") = Range("E31") - 1
                lire
                If Range("D36") < 3600 Then Chgt = True: Range("E31") = Range("E31") + 1

                Essaie de faire la manip avec D38.
                Sinon je ne comprends pas la raison, à chaque fois que tu changes une valeur dans la feuille 1
                la macro contrôle si D36 a été modifiée.

                Donne moi des nouvelles.

                Patgnr
                0
              3. voici la macro modifié
                Dim Chgt As Boolean
                ' A chaque changement dans la feuille excel ce programme contrôle si la cellule D36 a changé
                Private Sub Worksheet_Change(ByVal Target As Range)
                If Chgt = False Then
                If Range("E31") = "" Or Range("E31") > 100 Then Range("E31") = 10 'remise à 10 de E31 si la valeur a dépassé 100 ou vaut rien
                If Range("D36") <> D36 Then 'Compare l'ancienne valeur de D36 avec la valeur actuelle
                If Range("D36") < 2600 Then Chgt = True: Range("E31") = Range("E31") + 1 ' Contrôle de D36 si inférieur à 2600 implique incrémentation de E31
                End If
                Else
                Chgt = False
                End If
                D36 = Range("D36")
                End Sub
                si E31=0, la macro mets 10. et cela s'arrête (même avec l'exercice d'ajouter (+d38àd36)

                je ne comprends pas non plus
                merci
                0
              4. d'accord je n'avais pas vu ça comme çà. ok je refais

                remplace dans la feuil1 tout par

                Dim Chgt As Boolean
                Private Sub Worksheet_Change(ByVal Target As Range)
                If Range("E31") = "" Or Range("E31") > 100 Then Range("E31") = 10 'remise à 10 de E31 si la valeur a dépassé 100 ou vaut rien
                If Range("D36") > 2600 Then Chgt = True: Range("E31") = Range("E31") + 1 ' Contrôle de D36 si inférieur à 3600 implique incrémentation de E31
                End Sub

                E31 s'incrémente tant que D36 n'a pas inférieur à 2600

                tiens moi au courant
                A+
                0
              5. bonjour,

                la macro fonctionne, nickel
                merci.Je vais essayer de mettre un bouton de commande calcul.

                Merci encore

                pour eriic, je ne connaissais pas l'outil valeur cible'; cela fonctionne aussi.
                merci à vous deux pour votre aide
                0
            3. Contributeur
              Bonsoir,

              Il y a une autre possibilité avec l'outil 'valeur cible' (du menu 'données') :

              Cellule à définir : $D$36
              Valeur à atteindre : 2600
              Cellule à modifier : $E$31

              Validation par ok donne 18.975 à remplacer par l'entier supérieur 19 (=> D36=2597)

              eric
              0