aide sur macro evenementielle...

kikouyou

XLDnaute Junior
bonsoir amis ( es) développeur,

vous trouverez ci joint un code :

Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cell As Range
For Each Cell In Target
If Cell.Column = 5 Then ' Un test supplémentaire en dessous
If Cell.Value <= 2 And Cell.Offset(0, -2) = "Rayon" Then
Cell.Offset(0, 1).FormulaR1C1 = "=ROUND(RC[-1]*0.25,1)"
Else

' ???



End If
End If
Next Cell
End Sub

Le premier probleme c'est que j'aimerai utiliser la fonction arrondi sup mais je n'arrive po a la programmer sous VBA...




Le deuxieme probleme de ce code, c ke j'aimerai que si la valeur dans la cellule est supérieure a 2 , il ne se passe rien ds la cellule en ( 0, 1 ). Ce qui n'est pas le cas actuellement.


Je souhaiterai avoir quelques éclaircissements car j'ai déjà travailler dessus mais il me manque encore des connaissances ..

je vous remercie par avnce ;)
 
C

Compte Supprimé 979

Guest
Re : aide sur macro evenementielle...

Bonsoir Kikouyou,

1ère réponse : Fonction arrondi supérieur
Cell.Offset(0, 1).FormulaR1C1 = "=ROUNDUP(RC[-1]*0.25,1)"

Pour la 2ème réponse, logiquement il ne doit rien se passer si :
1) la valeur de la cellule modifiée dans la colonne "E" est supérieure à 2
2) le terme "Rayon" ne figure pas sur la même ligne en colonne "C"

C'est ce que tu veux !?

A+
 

Kotov

XLDnaute Impliqué
Re : aide sur macro evenementielle...

Bonsoir Kikouyou, BrunoM45 (presque voisin),

Autre possibilité pour la fonction arrondi :
Cell.Offset(0, 1) = Application.WorksheetFunction.Round(Cell.Offset(0, -1) * 0.25, 1)


Dans cet exemple, il ne se passe bien rien, si :
- on est pas dans la colonne E
- on est dans la colonne E mais la valeur de la cellule est supérieure ou égale à 2, ou le mot "Rayon" n'existe pas dans la colonne C

Pour le tester, j'ai préféré utiliser la macro Worksheet_SelectionChange plutôt que Worksheet_Change (chgt de cellule plutôt que changement de feuille)

Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Cell As Range
For Each Cell In Target
If Cell.Column = 5 Then ' Un test supplémentaire en dessous
    If Cell.Value <= 2 And Cell.Offset(0, -2) = "Rayon" Then
    Cell.Offset(0, 1) = Application.WorksheetFunction.Round(Cell.Offset(0, -1) * 0.25, 1)
    End If
End If
Next Cell
End Sub

Cela répond t-il à ton besoin ?

Bonne soirée

Kotov
 

Kotov

XLDnaute Impliqué
Re : aide sur macro evenementielle...

Re,

Après réflexion, je crois avoir compris ce qui te gêne :
En fait, ça fonctionne très bien si ta sélection correspond à une seule cellule
et ça ne fonctionne pas quand ta sélection correspond à des cellules multiples.

Donc, je te propose une petite modif du code :
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim Cell As Range

For Each Cell In Target
If Cell.Column = 5 Then 
    If Cell.Value <= 2 And Cell.Offset(0, -2) = "Rayon" Then
       [color=blue]  If Cell <> "" Then [/color]
            Cell.Offset(0, 1) = Application.WorksheetFunction.Round(Cell.Offset(0, -1) * 0.25, 1)
         [color=blue]End If[/color]
    End If
End If
Next Cell
End Sub

Ainsi, les cellules vides de ta sélection multiple ne déclenchent rien.

Ton problème est-il réglé ?

Kotov
 
Dernière édition:

kikouyou

XLDnaute Junior
Re : aide sur macro evenementielle...

kotov et bruno,


merci pour vos avis sur ma question n'est pas tres explicite, jen conviens....

Je vais me pencher sur vos codes et conseils ce WE, faute de temps. J'aurai probablement d'autres questions. A ce jour le code que j'ai créé marche mais si dans le cas ou la personne se trompe en mettant rayon et que la valeur est inférieur a 2. Je souhaite remettre en place la formule existant précedement si il supprime le mot rayon.

Je sais que c'est assez particulier mais cela doit se gérer par des conditions.

à faire , à suivre ( lol )


mici
 

cbea

XLDnaute Impliqué
Re : aide sur macro evenementielle...

Bonjour kikouyou, Bruno, Kotov,

Voici peut-être une solution :
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Cell As Range
    
    For Each Cell In Target
        ' Saisie en colonne C
        If Cell.Column = 3 Then
            If Cell.Offset(0, 1).Value <= 2 And Cell.Value = "Rayon" Then
                Cell.Offset(0, 2).FormulaR1C1 = "=ROUNDUP(RC[-1]*0.25,1)"
            Else
                Cell.Offset(0, 2).FormulaR1C1 = "=Ci(RC[-1])"
            End If
        ' Saisie en colonne E
        ElseIf Cell.Column = 5 Then
            If Cell.Value <= 2 And Cell.Offset(0, -2).Value = "Rayon" Then
                Cell.Offset(0, 1).FormulaR1C1 = "=ROUNDUP(RC[-1]*0.25,1)"
            Else
                Cell.Offset(0, 1).FormulaR1C1 = "=Ci(RC[-1])"
            End If
        End If
    Next Cell
End Sub
 

kikouyou

XLDnaute Junior
Re : aide sur macro evenementielle...

Merci bruno, kotov et cbea pour vos interventions,

Je vais regarder ces codes des demain.... par contre je ne sai spas ce qui signifie la fonction Ci :( :( :( :( :(

car je souhaite la totalité de la fonction afin de pouvoir la modifier et peut etre vous questionner dessus.... car il est vrai que grave a votre aide j'avance pas à pas et j'ai besoin d'assimiler tout ca.

Mais mon projet avance :) :) :) :) :) :)


Merci à vous


tres bonne soirée
 

kikouyou

XLDnaute Junior
Re : aide sur macro evenementielle...

Merci à vous tous


Je me suis pencher sur la fonction, qui est la mieux adaptée et que je ne connaissais pas...

En travaillant sur vos codes, j'ai pu en créé la suite avec des ouvertures de inputbox.

Merci pour cette avancé


a bon développeur


salut
 

Discussions similaires

Réponses
1
Affichages
224
Réponses
0
Affichages
197
Réponses
7
Affichages
616

Statistiques des forums

Discussions
312 833
Messages
2 092 608
Membres
105 466
dernier inscrit
Jsquare