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   -
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.
A voir également:

40 réponses

pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Essayons encore...
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é)
0
ks13 Messages postés 191 Date d'inscription   Statut Membre Dernière intervention   23
 
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...
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
0
ks13 Messages postés 191 Date d'inscription   Statut Membre Dernière intervention   23
 
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
0

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

Posez votre question
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Qu'elle version d'Excel dispose tu?
0
ks13 Messages postés 191 Date d'inscription   Statut Membre Dernière intervention   23
 
Alors, ce que je vois dans le "About" c'est Microsoft Office Excel 2007 (12.0.6514.5000) SP2 MSO (12.0.6425.1000).
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Je bosses sous 2003. Cela viens peut être de cela. Pas sur cependant...
0
ks13 Messages postés 191 Date d'inscription   Statut Membre Dernière intervention   23
 
Oui, jejelefou a dit qu'il travaillais aussi sous 2003, je pense que cela prouve qu'il y a une difference entre els versions.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Et bien tentons une approche différente :
Sub test()
Dim Valeur As Double
Valeur = Application.InputBox("Saisissez 0.5 par exemple", Type:=1)
    If Valeur = 0 Then Exit Sub
ActiveCell = ActiveCell * Valeur
End Sub

0
ks13 Messages postés 191 Date d'inscription   Statut Membre Dernière intervention   23
 
Hmm, maintenant cela n'applique l'operation de calcul que sur la 1ere cellule selectionnée, meme si j'ai selectionne plusieures cellules
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
bah oui j'ai mis
ActiveCell
à remplacer par ce que tu avais tout au début :
Selection.Value = Selection.Value * Valeur
0
ks13 Messages postés 191 Date d'inscription   Statut Membre Dernière intervention   23
 
La on retourne directement sur "type mismatch" u_u
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
Et cette procédure tu veux l'appliquer à quel Range?
H10:H25?
J10:J25?
0
jejelefou Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   42
 
Salut pijaku

En toute logique ca doit etre en H.

a+
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
0
jejelefou Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   42
 
Chez moi ca marche bien,

seul bemol : des 0,00 apparaissent dans les cellules vides de la selection H10:H25

a+
0
jejelefou Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   42 > jejelefou Messages postés 304 Date d'inscription   Statut Membre Dernière intervention  
 
Autre bémol : l'idée de départ était de changer uniquement les cellules selectionnées. Avec ton code tu changes toutes les valeurs <> 0 de la selection H:H25

d'ou l'utilisation de selection.value
0
ks13 Messages postés 191 Date d'inscription   Statut Membre Dernière intervention   23
 
pour les cellules vides ce n'est pas un probleme si tu ajoute un truc du genre
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.
0
ks13 Messages postés 191 Date d'inscription   Statut Membre Dernière intervention   23
 
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.
0
jejelefou Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   42
 
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
0
jejelefou Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   42
 
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
0
ks13 Messages postés 191 Date d'inscription   Statut Membre Dernière intervention   23
 
Joli, mais j'obtiens toujours la meme erreur a la ligne

Selection.Areas(i).Value = Selection.Areas(i).Value * Valeur


Par contre, moi j'ai essaye de faire pareil mais avec la propriete Range.
0
ks13 Messages postés 191 Date d'inscription   Statut Membre Dernière intervention   23
 
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.
0
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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 :

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

0
ks13 Messages postés 191 Date d'inscription   Statut Membre Dernière intervention   23
 
Oui, ca marche enfin XD. Par contre, j'ai change un peu le code pour le rendre plus facile a utiliser :
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 Plage
pour 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 ^^
0
jejelefou Messages postés 304 Date d'inscription   Statut Membre Dernière intervention   42
 
Ouff,

Je suis content d'en avoir fini avec ce problème.

Bonne journée a tous

a bientot (surtout pour pijaku que je croise souvent sur le forum)
0