Probleme avec un evenement private sub

bobbob83 Messages postés 32 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 novembre 2007 - 16 août 2007 à 14:05
bobbob83 Messages postés 32 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 novembre 2007 - 20 août 2007 à 20:57
bonjour

j'ai une macro qui se lance avec le private sub si dessous qand je modifis la valeur de D2
la macro se lance si je tape directement le nombre dans la cellule D2 , mais si je mes une formule dans la cellule (exemple = A1-1) ça ne marche pas
pouriez vous me dire pourqoui ça ne fonctione pas avec une formule et comment faire pour régler le probleme

Merci

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Integer
   
    If Target.Address(False, False) = "D2" Then
        For I = 0 To Target.Value - 1
            Range("D2").Offset(I, 0).Application.Run "Classeur1!Macro1"
        Next
    End If
   
End Sub

4 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
17 août 2007 à 18:56
Salut
(Déjà corrigé dans ta question de 12:55 : Tu codes dans du Excel, c'est donc du VBA, pas du .Net ni du VB6)

Si "D2" contient "A1-1", c'est du texte pour lui.
Il faut donc lui demander de calculer cette valeur avant.Il faut donc envoyer le contenu dans une cellule intermédiaire et la précéder du signe    Range("W400").Value "=" & Target.Value
puis utiliser le résultat calculé dans W400 pour le reste

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
bobbob83 Messages postés 32 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 novembre 2007
18 août 2007 à 02:29
Bonsoir, Jack merci pour ta réponse et désolé pour l erreur de post

MPI a ecrit se code dans mon post de 12:55

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Integer
       If Target.Address(False, False) = "D2" Then
        For I = 1 To Target.Value - 1
      Macro1 I
      Next
     
    End If
End Sub

Sub Macro1(Décalage As Integer)

    Range("B8").Copy
   
    Range("B8").Offset(Décalage, 0).PasteSpecial Paste:=xlValues
End Sub

ça me donne le resultat que je shouaite , mais  je n'arrive pas a integrer ton code

Range("E2").Value = "=" & Target.Value

dans la celulle D2 la formule = B2-1
et E2 doit etre egale à D2 (avec ton code)

si je mes ton code dans le private sub ça me fait une erreur 13 "incompatibilité de type"

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim I As Integer
Range("E2").Value = "=" & Target.Value
       If Target.Address(False, False) = "E2" Then
        For I = 1 To Target.Value 
      Macro1 I
      Next
     
    End If
End Sub

deuxieme probleme E2 se calcule avec toutes les cellules alors quelle devrai prendre en compte la cellule D2 uniquement , si je saisie 5 en A1   D2 = 5, en A2 6 D2 recalcule = 6 ect...

comment faire pour lier la cellule E2 a la Cellule D2 pour eviter le recalcul avec la saisie d'une cellule tiers 

as tu une idée sur la question ??
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
18 août 2007 à 14:51
Regarde l'autre question et essaie de ne conserver qu'un seul post si tu ne veux pas qu'on se perde...

Dans un tu parles des cellules B2 et B8 plus celles d'en-dessous.
Dans celui-ci tu parles de E2, D2, A1,...

Si tu expliquais clairement ce que tu cherches à faire ?

MPi
0
bobbob83 Messages postés 32 Date d'inscription vendredi 27 juillet 2007 Statut Membre Dernière intervention 22 novembre 2007
20 août 2007 à 20:57
ok je continue sur l'autre post :



http://www.vbfrance.com/infomsg_PROBLEME-AVEC-PRIVATE-SUB-SUR-EXCEL-2000_998371.aspx



et j'explique

bobbob83
0
Rejoignez-nous