Modification en % de nombres sous excel

Résolu
ks13 Messages postés 191 Statut Membre -  
jejelefou Messages postés 310 Statut Membre -
Bonjour,

Je fais des devis sous excel, et souvent j'ai besoin de modifier les prix d'un certain pourcentage (baisser ou augmenter, dependant du client et de l'avis du chef :), Donc je me suis demande s'il serait possible de faire une macro qui applique une reduction/augmentation, en pourcentage, sur les chiffres des cellules selectionnees actuellement.

Par exemple j'ai une colonne K2 a K37 de chiffres, et je veut augmeter tous les chiffres de 5%, donc je selectionne les cellules a modifier, et je clik sur la macro, qui me demande le pourcentage, et en validant elle l'applique aux cellules selectionnees.
Configuration: Windows 7
Firefox 3.5.7

40 réponses

  • 1
  • 2
Résumé de la discussion

Une demande porte sur la création d'une macro Excel permettant d'appliquer un pourcentage d'augmentation ou de réduction sur les valeurs des cellules sélectionnées, en fonction du client. Pour répondre, il est recommandé d'appliquer le facteur via une instruction qui multiplie la valeur sélectionnée par le pourcentage, par exemple Selection.Value = Selection.Value * Valeur, et d'anticiper les cas non numériques. Des échanges évoquent les problématiques liées aux cellules non numériques, aux cellules vides et à la compatibilité avec différentes versions d'Excel, ainsi que l'usage de la plage de cellules réellement sélectionnée. En pratique, certaines propositions préconisent de vérifier la présence d'un texte ou d'éléments non numériques avant d'appliquer le calcul, afin d'éviter les erreurs Type Mismatch.

Généré automatiquement par IA
sur la base des meilleures réponses
  1. jejelefou Messages postés 310 Statut Membre 42
     
    Bonjour,

    essaies ce code :

    Sub reduction()

    reduc = Application.InputBox("Entrez un taux de réduction", Type:=1)
    For i = 2 To 38
    Cells(i, 11).Value = Cells(i, 11).Value * (100 - reduc) / 100
    Next
    End Sub

    bon courrage
    0
  2. ks13 Messages postés 191 Statut Membre 23
     
    salut, merci pour ta reponse, malheureusement, je suis et vais etre tres occupe jusqu'a la fin de cette journee (oui jusqu'a minuit sinon plus), donc je te dirais si ca a marche ou pas des que j'aurais eu le temps de l'essayer.
    0
  3. jejelefou Messages postés 310 Statut Membre 42
     
    la reponse que je t'ai donné n'est surement pas idéale, par contre je pense que c'est une bonne voie de recherche.

    bon courrage

    a+

    jéjé
    0
  4. ks13 Messages postés 191 Statut Membre 23
     
    Alors, j'ai enfin eu le temps de jeter un coup d'oeil a ton code, et il semble bien mis a part une chose : la plage de cellules que j'ai utilise dans mon exemple n'est pas forcement celle que j'aurais dans chaque devis. De ce fait, je souhaiterais que la macro utilise les cellules selectionnees actuelement. Un peu comme quand pour transferer certains fichiers d'un dossier a un autre on selectionne d'abbord les fichiers puis on fait couper/coller, ce qui applique les actions qu'au fichiers selectionnes.
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. jejelefou Messages postés 310 Statut Membre 42
     
    je n'ai pas de connaissance nécéssaire pour t'aider plus.

    je crois qu'il y a une commande du style activ cellule. Ce soir je n'ai pas excel, je verrai demain du travail.

    bonne soirée
    0
  7. ks13 Messages postés 191 Statut Membre 23
     
    Ok, merci pour ton temps ^^

    J'essaye de trouver la facon de faire par moi meme aussi, mais jusque la je n'ai vu que 2 facons possibles :

    1 - Demander les cellules a modifier (cellule depart, cellule fin), demander le changement a faire (augmentation, diminution), faire l'operation

    2 - Demander le changement a faire (augmentation, diminution), verifier les cellules selectionnees, faire l'operation sur les cellules

    Pour la 1ere methode, je dois trouver si le programme convertit automatiquement les lettres des colonnes en nombres, et si non comment les convertir. Pour la 2eme methode je n'ai toujours pas trouve comment verifier la zone des cellules a modifier. Je sais qu'on peut utiliser l'objet Range, mais je n'ai pas vu comment lier a l'objet Cell pour l'utiliser dans une boucle, ou peut etre que c'est possible de faire la modificitation sur toutes les cellules contenues dans l'objet Range.
    0
  8. jejelefou Messages postés 310 Statut Membre 42
     
    Bonjour,

    voici un truc sympa :

    Sub augmentation()
    Selection.Value = Selection.Value * 0.95

    End Sub

    toutes les cellules selectionnée perdent 5%

    donc si tu fais ca:

    Sub augmentationbis()
    indice = InputBox("entrez le coeficient d'augmentation ou de reduction")
    Selection.Value = Selection.Value * indice
    End Sub

    ca doit repondre a ton besoin
    0
  9. ks13 Messages postés 191 Statut Membre 23
     
    Salut,

    j'ai teste ton code mais il y a un probleme majeur : cela ne fonctionne que quand une seule cellule est selectionnee a la fois, des que je selectionne plusieurs cellules j'obtiens une erreur "Type mismatch".
    0
  10. jejelefou Messages postés 310 Statut Membre 42
     
    Ah?

    Chez moi ça marche bien.

    je ne sais pas, je vais rechercher
    0
  11. jejelefou Messages postés 310 Statut Membre 42
     
    J'ai la meme erreur si une cellule sélectionnée est du texte
    0
  12. ks13 Messages postés 191 Statut Membre 23
     
    Oui, c'est normal, car tu ne peut pas multiplier un texte, mais ceci n'est pas un probleme vu que l'operation ne se fera que sur des cellules dans la colonne Prix unitaire, contant que des prix. Mais comme je l'ai dit des que j'essaye d'utiliser la macro sur une selection de plusieurs cellules. Je pense que cela viens du fait qu'en selectionnant plusieures cellules a la fois Selection.Value deviens un array, contrairement a une seule cellule qui est un Integer. Je n'ai pas pense utiliser Selection.Value de cette facon car, ayant utilise d'autre langages de programmation avant, j'avais dans la tete l'idee du array, donc je ne pensais pas que la macro allais prendre chaque valeur de chaque cellule et la changer separement en faisant de la facon que tu a suggere. Mais si tu me dis que cela marche chez toi, est-ce que cela proviendrait de la version? Moi j'ai Office 2007, et la version excel correspondante.
    0
  13. jejelefou Messages postés 310 Statut Membre 42
     
    Moi j'ai excel 2003 sp3.
    0
  14. ks13 Messages postés 191 Statut Membre 23
     
    Hmm, et tu est sur qu'en selectionnant plusieures cellules contenant des nombres ta macro marche?
    0
  15. jejelefou Messages postés 310 Statut Membre 42
     
    Oui, il n'y a aucun pb
    0
  16. jejelefou Messages postés 310 Statut Membre 42
     
    En effet un leger probleme se produit, voici le correctif :

    Sub augmentationbis()
    reduc = Application.InputBox("Entrez un taux de réduction", Type:=1)
    Selection.Value = Selection.Value * reduc
    End Sub

    desolé
    0
  17. ks13 Messages postés 191 Statut Membre 23
     
    hmmm, ca me fait toujours la meme erreur "Type mismatch"
    0
  18. jejelefou Messages postés 310 Statut Membre 42
     
    Je ne sais plus quoi faire. Ca ne marche plus. Désolé de vous avoir fait perdre du temps.

    a+

    jéjé
    0
  19. ks13 Messages postés 191 Statut Membre 23
     
    Pas de probleme, tu a essaye de m'aider, alors merci ^^
    0
  20. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour à vous,
    Je viens de lire sur Internet que : erreur "Type mismatch" veut dire que tu utilises une variable dans laquelle tu essayes de mettre une valeur qui n'est pas possible
    Dans le code proposé par Jejelefou [que je salue au passage] tu indiques un type:= 1 dans l'Inputbox. Essaye sans :
    Sub augmentationbis()
    reduc = Application.InputBox("Entrez un taux de réduction")
    Selection.Value = CInt(Selection.Value) * reduc
    End Sub
    
    0
  21. ks13 Messages postés 191 Statut Membre 23
     
    Salut, je viens de tester ta version et rien a faire, cela m'affiche toujours la meme erreur sur la meme ligne

    "Type mismatch" sur la ligne "Selection.Value = CInt(Selection.Value) * reduc"
    0
  • 1
  • 2