Problèmes de boucles : Trop de Critères ??

  • Initiateur de la discussion Initiateur de la discussion Herlay
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

Herlay

XLDnaute Junior
Bonjour le Forum,

Je cherche le moyen de modifier les valeurs de plusieures cellules suivant plusieures conditions : Le cas est une augmentation de tarifs suivant la famille des articles (et de déterminer si c'est en fixe ou en %).
Dans le fichier joint, il s'agit de renseigner par famille A,B,C .... l'augmentation, et de l'appliquer à tous les articles de cette famille en Colonne C.
J'ai écrit un petit code Vba, mais j'ai une erreur "91", et j'ai l'impression de me perdre dans la conception des boucles.
Merci pour votre aide.
Herlay
 

Pièces jointes

Re : Problèmes de boucles : Trop de Critères ??

Bonjour Herlay
Déclarer la variable K comme Variant et non comme Range devrait remettre les choses en ordre...​
ROGER2327
#3704


Mercredi 4 Gidouille 137 (Sainte Tripe, républicaine, SQ)
30 Prairial An CCXVIII
2010-W24-5T12:31:51Z
 
Re : Problèmes de boucles : Trop de Critères ??

Bonjour Herlay, salut Roger,

Pour l'évolution des tarifs, mettre les cellules au format Pourcentage s'il s'agit d'augmentations en pourcents, sinon les mettre au format Standard.

Cette macro dans le code de la feuille (clic droit sur l'onglet et Visualiser le code) :

Code:
Private Sub CommandButton1_Click()
Dim derlig As Integer, i As Integer, lettre As String, augmentation As Range
Application.ScreenUpdating = False
Range("D2:D65536").ClearContents
derlig = Range("J4").End(xlDown).Row 'ligne de la dernière date
For i = 2 To Range("C65536").End(xlUp).Row
  lettre = Application.VLookup(Cells(i, "E"), Range("G:H"), 2, 0)
  Set augmentation = Cells(derlig, Application.Match(lettre, Rows(4), 0))
  If augmentation.Text Like "*%" Then 'si l'augmentation est un pourcentage
    Cells(i, "D") = Cells(i, "C") * (1 + augmentation)
  Else
    Cells(i, "D") = Cells(i, "C") + augmentation
  End If
Next
End Sub

Les nouveaux prix s'inscrivent en colonne D, mais on peut aussi écraser la colonne C...

A+
 

Pièces jointes

Re : Problèmes de boucles : Trop de Critères ??

Re,

Si l'on préfère on peut utiliser le format monétaire en €uros :

Code:
Private Sub CommandButton1_Click()
Dim derlig As Integer, i As Integer, lettre As String, augmentation As Range
Application.ScreenUpdating = False
Range("D2:D65536").ClearContents
derlig = Range("J4").End(xlDown).Row 'ligne de la dernière date
For i = 2 To Range("C65536").End(xlUp).Row
  lettre = Application.VLookup(Cells(i, "E"), Range("G:H"), 2, 0)
  Set augmentation = Cells(derlig, Application.Match(lettre, Rows(4), 0))
  If [COLOR="Red"]augmentation.Text Like "*€"[/COLOR] Then 'si l'augmentation est en euros
    Cells(i, "D") = Cells(i, "C") + augmentation
  Else 'sinon c'est un pourcentage
    Cells(i, "D") = Cells(i, "C") * (1 + augmentation)
  End If
Next
End Sub

A+
 

Pièces jointes

Re : Problèmes de boucles : Trop de Critères ??

ReBonjour le Forum, Job75 et ROGER2327,

MErci à vous deux pour vos réponses, c'est exactement ce que je cherchais, je vois que le code à été très raccourci et il est très efficace.

Merci à vous deux.

Herlay
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
512
Compte Supprimé 979
C
Retour