IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

conserver le target adress tout au long de la procédure


Sujet :

Macros et VBA Excel

  1. #1
    Membre habitué
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Mars 2011
    Messages
    312
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Contrôleur de Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2011
    Messages : 312
    Points : 144
    Points
    144
    Par défaut conserver le target adress tout au long de la procédure
    Bonjour,

    Je loupe une étape dans le déroulement d'une procédure
    En effet je change la valeur d'une déroulante situé en cellule U6
    La procédure démarre sans souci jusqu'à ce que lors de la procédure il prend le target.adress du code "Indicateur" qui s'effectue soit (J135:AB300) => Erreur exécution '13' Incompatibilité de type
    et là je séche!!!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    If Target.Address = "$U$4" And Target.Count = 1 Then
            Range("U6").Select
            SendKeys "%{up}"
     
    ElseIf Target.Address = "$U$6" And Target.Offset(-2, 0).Value = "EXPLOITATION" Then
                    Rows("8:8").Hidden = False
                    Range("U8").Select
                    SendKeys "%{up}"
     
    ElseIf Target.Address = "$U$6" And Target.Offset(-2, 0).Value <> "EXPLOITATION" Then
                    Rows("8:8").Hidden = True
    End If
    End Sub
    et qui appelle la procédure suivante

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    Sub indicateur()
    Dim i&, l&
     
    Dim Ws As Worksheet, Ws1 As Worksheet
     
    Set Ws = ThisWorkbook.Worksheets("Fichier de Travail")
    Set Ws1 = ThisWorkbook.Worksheets("Fichier Plat")
                l = Ws.Range("A4").Value
                On Error Resume Next
                i = Ws.Range("A3").Value
     
     
            Ws.Range("J135:AB184").Copy Destination:=Ws1.Range("J" & l & ":AB" & l + 49)
            Ws.Range("AF135:AG184").Copy Destination:=Ws1.Range("AF" & l & ":AG" & l + 49)
            Ws.Range("J135:AB300").ClearContents
            Ws.Range("AE135:AF300").ClearContents
            Ws1.Range("J" & i & ":AB" & i + 49).Copy Destination:=Ws.Range("J135")
            Ws1.Range("AF" & i & ":AG" & i + 49).Copy Destination:=Ws.Range("AF135")
            Ws.Range("A4").Value = Ws.Range("A3")
     
     
    End Sub

    Merci de vos éclairages

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    12 825
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 12 825
    Points : 28 731
    Points
    28 731
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Si la procédure nommée indicateur écrit dans la feuille où se trouve la procédure événementielle qui l'invoque, c'est comme un chien qui court après sa queue.
    En effet le but de la procédure est d'intercepter, entre autres, une modification de la valeur d'une cellule donc si tu écris dans A2 et que dans la procédure tu écris dans C8, la procédure va à nouveau intercepter l'événement
    Il y a donc lieu, avant d'invoquer la procédure nommée indicateur, de désactiver l'interception des événements avec l'instruction Application.EnableEvents = False sans oublier au retour de la procédure de réactiver l'interception des événements

    [EDIT]
    Quelques exemples

    Exemple 1
    Dans cette procédure, il n'y aura pas de souci parce-que le test sur l'adresse (B2) et le fait que l'écriture a lieu à une autre adresse le second passage ne provoquera pas de problème
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target As Range)
      With Target
        If .Address = "$B$2" Then
           Me.Range("G2").Value = .Value
        End If
      End With
    End Sub
    Exemple 2 (Le pire) où l'on ajoute un texte avant la valeur entrée dans la cellule B2
    J'écris Axelle dans la cellule B2 ce qui déclenche un événement
    Au deuxième passage, on aura Bonjour Bonjour Axelle
    Au troisième passage, on aura Bonjour Bonjour Bonjour Axelle
    et ainsi de suite, jusqu'au moment où le VBA va se mettre en erreur ou bien Excel qui ne répondra plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub Worksheet_Change(ByVal Target As Range)
      With Target
        If .Address = "$B$2" Then
           .Value = "Boujour " & .Value
        End If
      End With
    End Sub
    Exemple 3 pour éviter le scénario de l'exemple précédent
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Private Sub Worksheet_Change(ByVal Target As Range)
      With Target
        If .Address = "$B$2" Then
            Application.EnableEvents = False
           .Value = "Boujour " & .Value
            Application.EnableEvents = True
        End If
      End With
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

Discussions similaires

  1. [PPT-2010] Comment avoir un même son tout au long d'une présentation ?
    Par Grumpy64 dans le forum Powerpoint
    Réponses: 1
    Dernier message: 19/04/2011, 17h27
  2. Réponses: 7
    Dernier message: 01/04/2010, 16h47
  3. Réponses: 1
    Dernier message: 29/01/2008, 15h41
  4. Réponses: 3
    Dernier message: 29/10/2006, 13h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo