Modification en % de nombres sous excel
Résolu
ks13
Messages postés
191
Date d'inscription
Statut
Membre
Dernière intervention
-
jejelefou Messages postés 304 Date d'inscription Statut Membre Dernière intervention -
jejelefou Messages postés 304 Date d'inscription Statut Membre Dernière intervention -
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.
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.
A voir également:
- Modification en % de nombres sous excel
- Suivi de modification word - Guide
- Liste déroulante excel - Guide
- Mise en forme conditionnelle excel - Guide
- Word et excel gratuit - Guide
- Nombre de jours entre deux dates excel - Guide
40 réponses
Essayons encore...
ceci peut être :
ps : quand tu places du code sur CCM mets le entre les balises <CODE> c'est le 4ème bouton de mise en forme au dessus du message (à côté de souligné)
ceci peut être :
Selection.Value = CInt(Selection.Value) * CInt(reduc)
ps : quand tu places du code sur CCM mets le entre les balises <CODE> c'est le 4ème bouton de mise en forme au dessus du message (à côté de souligné)
Euh, desole, mais pourrais tu m'expliquer la signification de ton ps?
Et je viens d'essayer avec la modification et cela ne marche toujours pas. Est-ce que j'aurais une version buggée de excel? Vu que cela semble marcher chez vous...
Et je viens d'essayer avec la modification et cela ne marche toujours pas. Est-ce que j'aurais une version buggée de excel? Vu que cela semble marcher chez vous...
Oui cela vient peut être de là. Peut être peux tu placer ton fichier sans références confidentielles sur : https://www.cjoint.com/ et venir poster le lien ici.
Pour mon ps, voici une explication : https://www.cjoint.com/?bojVCj1ZCW
Pour mon ps, voici une explication : https://www.cjoint.com/?bojVCj1ZCW
Ok, alors pour le fichier, j'avais copie un devis pour en faire un fichier de test jusqu'a ce que je finis la macro.
Voici le fichier : https://www.cjoint.com/?bolxNveU0M
Voici le fichier : https://www.cjoint.com/?bolxNveU0M
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Alors, ce que je vois dans le "About" c'est Microsoft Office Excel 2007 (12.0.6514.5000) SP2 MSO (12.0.6425.1000).
Oui, jejelefou a dit qu'il travaillais aussi sous 2003, je pense que cela prouve qu'il y a une difference entre els versions.
Hmm, maintenant cela n'applique l'operation de calcul que sur la 1ere cellule selectionnée, meme si j'ai selectionne plusieures cellules
Alors suivons la logique. Essaie ceci:
Sub test()
Dim Valeur As Double
Dim i as Integer
Valeur = Application.InputBox("Saisissez 0.5 par exemple", Type:=1)
If Valeur = 0 Then Exit Sub
For i = 10 to 25 '10 étant la 1ère ligne traitée et 25 la dernière
Range("H" & i).Value = Range("H" & i).Value * Valeur 'H représente la colonne traitée, bien sur!!
Next i
End Sub
Sub test()
Dim Valeur As Double
Dim i as Integer
Valeur = Application.InputBox("Saisissez 0.5 par exemple", Type:=1)
If Valeur = 0 Then Exit Sub
For i = 10 to 25 '10 étant la 1ère ligne traitée et 25 la dernière
Range("H" & i).Value = Range("H" & i).Value * Valeur 'H représente la colonne traitée, bien sur!!
Next i
End Sub
pour les cellules vides ce n'est pas un probleme si tu ajoute un truc du genre
Euh, j'avais fait un essai avec ce genre de truc et ca avait marche, mais l'autre probleme c'est celui de la selection, la j'ai pris pour test un devis faisant une page, mais j'ai souvent des devis qui depassent 400 lignes, d'ou mon interet pour la macro. D'ou, aussi, mon besoin que je puisse indiquer facilement a la macro quelles cellules modifier. Le besoin de modifier les cellules selectionnees automatiquement, c'est a cause d'eventuels autres utilisateurs qui pourraient essayer d'utiliser la macro. Il serait plus facile pour eux de simplement selectionner les cellules a modifier au lieu de devoir ecrire la colonne et les lignes a editer, ou meme editer la macro.
If Range("H" & i).Value <> "" Then
Euh, j'avais fait un essai avec ce genre de truc et ca avait marche, mais l'autre probleme c'est celui de la selection, la j'ai pris pour test un devis faisant une page, mais j'ai souvent des devis qui depassent 400 lignes, d'ou mon interet pour la macro. D'ou, aussi, mon besoin que je puisse indiquer facilement a la macro quelles cellules modifier. Le besoin de modifier les cellules selectionnees automatiquement, c'est a cause d'eventuels autres utilisateurs qui pourraient essayer d'utiliser la macro. Il serait plus facile pour eux de simplement selectionner les cellules a modifier au lieu de devoir ecrire la colonne et les lignes a editer, ou meme editer la macro.
Avant de venir ici, j'avais favorise l'idee de faire une variable type range ou array, chaque valeur de la variable contenant les cellules selectionnees, et ensuite d'aller faire les valeurs une a une et les modifier. Ceci viens de la facon dont je ferais le code si je devais le faire en php. Le probleme c'est qu'etant debutant en VB, j'ai du mal a comprendre el fonctionnement des proprietes des objets. Vu que la simple macro que vous m'avez donne au debut ne marche pas chez moi, je serais pas surpris que mes essais infructeux ont la meme origine.
J'ai enfin trouvé quelque chose de valable :
Sub DisplayColumnCount()
Dim iAreaCount As Integer
Dim i As Integer
Worksheets("feuil1").Activate
iAreaCount = Selection.Areas.Count
For i = 1 To iAreaCount
Selection.Areas(i).Value = Selection.Areas(i).Value * 2 'mettre à la place de 2 la messagebox du debut
Next i
End Sub
merci de tester et me faire un retour
Sub DisplayColumnCount()
Dim iAreaCount As Integer
Dim i As Integer
Worksheets("feuil1").Activate
iAreaCount = Selection.Areas.Count
For i = 1 To iAreaCount
Selection.Areas(i).Value = Selection.Areas(i).Value * 2 'mettre à la place de 2 la messagebox du debut
Next i
End Sub
merci de tester et me faire un retour
Donc voici avec la correction messagebox :
Sub DisplayColumnCount()
Dim iAreaCount As Integer
Dim i As Integer
Valeur = Application.InputBox("Saisissez 0.5 par exemple", Type:=1)
Worksheets("feuil1").Activate
iAreaCount = Selection.Areas.Count
For i = 1 To iAreaCount
Selection.Areas(i).Value = Selection.Areas(i).Value * Valeur
Next i
End Sub
Sub DisplayColumnCount()
Dim iAreaCount As Integer
Dim i As Integer
Valeur = Application.InputBox("Saisissez 0.5 par exemple", Type:=1)
Worksheets("feuil1").Activate
iAreaCount = Selection.Areas.Count
For i = 1 To iAreaCount
Selection.Areas(i).Value = Selection.Areas(i).Value * Valeur
Next i
End Sub
Joli, mais j'obtiens toujours la meme erreur a la ligne
Par contre, moi j'ai essaye de faire pareil mais avec la propriete Range.
Selection.Areas(i).Value = Selection.Areas(i).Value * Valeur
Par contre, moi j'ai essaye de faire pareil mais avec la propriete Range.
Je ne suis pas sur mais, serait-ce possible que les regles sur les types de variables sont devenues plus strictes avec la version 2007? parce que je ne vois pas d'autres explications.
Bonjour,
Tout le monde est en forme? Vous avez pris le café? bien déjeuner car c'est important...
On peux commencer?
Allons y.
Cette procédure permet de choisir un taux et ensuite, grâce à une Inputbox de sélectionner la plage de cellules (sources : https://apprendreexcel.com/ ou appliquer ce taux. Dites moi ce que ça donne chez vous :
Tout le monde est en forme? Vous avez pris le café? bien déjeuner car c'est important...
On peux commencer?
Allons y.
Cette procédure permet de choisir un taux et ensuite, grâce à une Inputbox de sélectionner la plage de cellules (sources : https://apprendreexcel.com/ ou appliquer ce taux. Dites moi ce que ça donne chez vous :
Sub test_du_matin() Dim Plage As Range Dim Valeur As Double Valeur = Application.InputBox("Saisissez 0.5 par exemple", Type:=1) If Valeur = 0 Then Exit Sub Set Plage = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8) For Each Cell In Plage Cell.Value = Cell.Value * Valeur Next End Sub
Oui, ca marche enfin XD. Par contre, j'ai change un peu le code pour le rendre plus facile a utiliser :
De cette facon en utilisant un nombre positif on ajoute un pourcentage, et en utilisant un nombre negatif on deduit le pourcentage, et on utilise le pourcentage directement sans calculer le taux de reduction. En tout cas je viens d'apprendre une chose importante : je n'avais pas pense a essayer d'utiliser
Oki, avec ce que tu m'a montre j'ai essaye une autre methode et apparement ca marche chez moi :
Le probleme venais du fait que j'essayais d'utiliser une propriete sur une propriete, c'est-a-dire que j'utilisais Range sur Selection, alors que les deux sont des proprietes. Mais ceci ne vaut que pour mes essais, je vois toujours pas pourquoi les 1eres macros que vous m'avez donne ne marchaient pas.
Ah, merci a vous et merci pour vos efforts pour m'aider ^^
Sub test_du_matin() Dim Plage As Range Dim Valeur As Double Valeur = Application.InputBox("Saisissez 0.5 par exemple", Type:=1) If Valeur = 0 Then Exit Sub Set Plage = Application.InputBox("Sélectionnez une plage !", "Sélection de cellules", Type:=8) For Each Cell In Plage Cell.Value = Cell.Value * ((100 + Valeur) / 100) Next End Sub
De cette facon en utilisant un nombre positif on ajoute un pourcentage, et en utilisant un nombre negatif on deduit le pourcentage, et on utilise le pourcentage directement sans calculer le taux de reduction. En tout cas je viens d'apprendre une chose importante : je n'avais pas pense a essayer d'utiliser
For Each Cell In Plagepour faire une boucle sur les cellules selectionnees.
Oki, avec ce que tu m'a montre j'ai essaye une autre methode et apparement ca marche chez moi :
Sub test_du_matin2() Dim Plage As Range Dim Valeur As Double Valeur = Application.InputBox("Saisissez 0.5 par exemple", Type:=1) If Valeur = 0 Then Exit Sub Set Plage = Selection For Each Cell In Plage Cell.Value = Cell.Value * ((100 + Valeur) / 100) Next End Sub
Le probleme venais du fait que j'essayais d'utiliser une propriete sur une propriete, c'est-a-dire que j'utilisais Range sur Selection, alors que les deux sont des proprietes. Mais ceci ne vaut que pour mes essais, je vois toujours pas pourquoi les 1eres macros que vous m'avez donne ne marchaient pas.
Ah, merci a vous et merci pour vos efforts pour m'aider ^^