Macro calcul excel

Résolu/Fermé
chtilensois71 - 18 déc. 2010 à 15:00
 chtilensois71 - 21 déc. 2010 à 13:02
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


A voir également:

10 réponses

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
chtilensois71
18 déc. 2010 à 15:50
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
18 déc. 2010 à 15:27
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
lermite222 Messages postés 8724 Date d'inscription dimanche 8 avril 2007 Statut Contributeur Dernière intervention 22 janvier 2020 1 190
18 déc. 2010 à 16:09
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
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
chtilensois71
18 déc. 2010 à 20:38
c'est ça
merci pour la macro
je vais la tester et je vous tiens au courant.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
chtilensois71
18 déc. 2010 à 22:17
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
Bonsoir

Dès que tu peux mettre le fichier, je regarderai.
Est-ce que la sécutrité macro est dévalidée?
0
chtilensois71
19 déc. 2010 à 12:27
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
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
]
0
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
chtilensois71
20 déc. 2010 à 18:46
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
chtilensois71
20 déc. 2010 à 19:14
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
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
chtilensois71
20 déc. 2010 à 20:18
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
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
chtilensois71
21 déc. 2010 à 13:02
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
eriiic Messages postés 24596 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 21 septembre 2024 7 235
Modifié par eriiic le 20/12/2010 à 21:39
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