macro évementielle simple

oorphee

XLDnaute Junior
Simple oui..... mais pas pour moi :p (newbie en VBA)

Ma requête :
- une colonne B2:B11
- une cellule C5 avec une valeur à l'intérieur

La macro devrait au moment de modifier une cellule de B2:B11, transformer la valeur tapée :
- si valeur tapée en B >0 , lui ajouter la valeur C5
- sinon, ne rien faire (valeur tapée maintenue telle quelle)

Surement finger in the nose pour un expert que je ne suis pas. Merci...
 

Fred0o

XLDnaute Barbatruc
Re : macro évementielle simple

Bonsoir oorphee,

Voici un code à placer dans le code de ta feuille. Tu sélectionnes la feuille, puis click-droit sur le nom de l'onglet, puis visualiser le code. Ensuite, tu colles ceci.

VB:
Private Sub Worksheet_Change(ByVal Target As Range)
    If IsNumeric(Target) And Target > 0 Then
        If Not Intersect(Target, [B2:B11]) Is Nothing And Target.Count = 1 Then
            Application.EnableEvents = False
            Target = Target + [C5]
            Application.EnableEvents = True
        End If
    End If
End Sub

A+
 

oorphee

XLDnaute Junior
Re : macro évementielle simple

Rebonjour,

J'ai écrit ceci et rien ne se passe. Le but est de décaler le curseur au moment de la saisie.

Code:
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
If IsNumeric(Target) And Target > 0 Then
    If Not Intersect(Target, [C41:C280]) Is Nothing And Target.Count = 1 Then
        Application.EnableEvents = False
        If Cells(Target.Row, 11) = "" Then
            Cells(Target.Row, Target.Column + 8).Select
        End If
        Application.EnableEvents = True
    End If
End If
End Sub

Ou est la faille ? Bon dimanche
 

Fred0o

XLDnaute Barbatruc
Re : macro évementielle simple

Bonjour oorphee,

Je ne comprends pas bien ce que tu souhaites faire. Cette demande est très différente de celle formulée en #1 et dans le titre du post.
En appliquant ton code, lorsque tu saisis une valeur dans le plage [C41:C280], le curseur se positionne sur la même ligne mais en colonne "K" (soit la colonne n°11) uniquement si la cellule en colonne "K" est vide. Si tu veux aller à la colonne "K" mais à la ligne suivante, il te faut écrire
VB:
Cells(Target.Row+1, 11).select
.

Maintenant, expliques moi exactement ce que tu souhaites faire pour que je puisse t'aider un peu mieux.

A+
 

oorphee

XLDnaute Junior
Re : macro évementielle simple

Bonjour Fredoo,

Tu as cerné pleinement ce que je voulais réaliser. Et justement, rien ne se passe au moment ou je saisis une valeur en [C41:C280] c'est la mon soucis !
Le curseur et la plage sélectionnée disparaissent et c'est tout. Je ne comprends pas
 

oorphee

XLDnaute Junior
Re : macro évementielle simple

Mon code complet est (il y a une partie avant)

Code:
Private Sub Worksheet_Change(ByVal Target As Range)

If Range("M16") = "x" Then
    ActiveSheet.ChartObjects("Graphique 16").Activate
    ActiveChart.SeriesCollection(4).Trendlines(1).Select
    If Range("BD39") <= 2 Then
        Selection.Period = 2
        Selection.Name = "SMA2 (Réel)"
    ElseIf Range("BD39") = 3 Then
        Selection.Period = 3
        Selection.Name = "SMA3 (Réel)"
    ElseIf Range("BD39") = 4 Then
        Selection.Period = 4
        Selection.Name = "SMA4 (Réel)"
    ElseIf Range("BD39") = 5 Then
        Selection.Period = 5
        Selection.Name = "SMA5 (Réel)"
    ElseIf Range("BD39") = 6 Then
        Selection.Period = 6
        Selection.Name = "SMA6 (Réel)"
    ElseIf Range("BD39") = 7 Then
        Selection.Period = 7
        Selection.Name = "SMA7 (Réel)"
    ElseIf Range("BD39") = 8 Then
        Selection.Period = 8
        Selection.Name = "SMA8 (Réel)"
    ElseIf Range("BD39") = 9 Then
        Selection.Period = 9
        Selection.Name = "SMA9 (Réel)"
    ElseIf Range("BD39") = 10 Then
        Selection.Period = 10
        Selection.Name = "SMA10 (Réel)"
    ElseIf Range("BD39") = 11 Then
        Selection.Period = 11
        Selection.Name = "SMA11 (Réel)"
    ElseIf Range("BD39") = 12 Then
        Selection.Period = 12
        Selection.Name = "SMA12 (Réel)"
    ElseIf Range("BD39") = 13 Then
        Selection.Period = 13
        Selection.Name = "SMA13 (Réel)"
    ElseIf Range("BD39") = 14 Then
        Selection.Period = 14
        Selection.Name = "SMA14 (Réel)"
    ElseIf Range("BD39") = 15 Then
        Selection.Period = 15
        Selection.Name = "SMA15 (Réel)"
    ElseIf Range("BD39") = 16 Then
        Selection.Period = 16
        Selection.Name = "SMA16 (Réel)"
    ElseIf Range("BD39") = 17 Then
        Selection.Period = 17
        Selection.Name = "SMA17 (Réel)"
    ElseIf Range("BD39") = 18 Then
        Selection.Period = 18
        Selection.Name = "SMA18 (Réel)"
    ElseIf Range("BD39") = 19 Then
        Selection.Period = 19
        Selection.Name = "SMA19 (Réel)"
    Else:
        Selection.Period = 20
        Selection.Name = "SMA20 (Réel)"
    End If
End If


If IsNumeric(Target) And Target > 0 Then
    If Not Intersect(Target, [C41:C280]) Is Nothing And Target.Count = 1 Then
        Application.EnableEvents = False
        If Cells(Target.Row, 11) = "" Then
            Cells(Target.Row, Target.Column + 8).Select
        End If
        Application.EnableEvents = True
    End If
End If
End Sub

Ya-t'il conflit quelque part ?
 
C

Compte Supprimé 979

Guest
Re : macro évementielle simple

Bonjour le fil

Oorphee, si je comprends bien tu utilises un code que tu ne comprends pas !?
Il faudrait, je pense commencer par là ... analyser et comprendre le code
VB:
' En cas de modification sur la feuilles
Private Sub Worksheet_Change(ByVal Target As Range)
' Si la valeur de la cellule modifiée est numérique et supérieure à zéro
  If IsNumeric(Target) And Target > 0 Then
    ' Si la modification a été faite dans la plage C41:C280
    ' Et que le nombre de cellules modifiées est = 1
    If Not Intersect(Target, [C41:C280]) Is Nothing And Target.Count = 1 Then
      ' Empècher les nouveaux évènements
      Application.EnableEvents = False
      ' Si la valeur de la cellule de la ligne actuelle 11 ème colonne est vide
      If Cells(Target.Row, 11) = "" Then
        ' On sélectionne la colonne actulle + 8
        Cells(Target.Row, Target.Column + 8).Select
      End If
      Application.EnableEvents = True
    End If
  End If
End Sub

A+
 
C

Compte Supprimé 979

Guest
Re : macro évementielle simple

Re,

Optimisation de ton code de début
Code:
  If Range("M16") = "x" Then
    ActiveSheet.ChartObjects("Graphique 16").Activate
    ActiveChart.SeriesCollection(4).Trendlines(1).Select
    ' Mémoriser la valeur
    Ind = Range("BD39").Value
    If Ind < 2 Then Ind = 2
    If Ind > 20 Then Ind = 20
    Selection.Period = Ind
    Selection.Name = "SMA" & Ind & " (Réel)"
  End If

A+
 

Discussions similaires

Réponses
19
Affichages
2 K
Réponses
0
Affichages
611

Statistiques des forums

Discussions
312 493
Messages
2 088 956
Membres
103 990
dernier inscrit
lamiadebz