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 :

Conflit avec un Event [Toutes versions]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Février 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2012
    Messages : 49
    Points : 51
    Points
    51
    Par défaut Conflit avec un Event
    Bonjour j'ai un petit problème, j'ai un event :
    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim objet As AcadObject
        Dim objetSelectionne As AcadObject, CouleurOriginale As Integer
        'AcadDoc est un lien sur le dessin en cours
    On Error Resume Next
        Set AcadDoc = GetObject(, "Autocad.application").ActiveDocument
        Set AcadObj = GetObject(, "Autocad.application")
     
        For nc = 12 To 250 Step 2
     
            If Target.Column = nc Then
     
                'If Target.Cells.Value <> "" Then
     
     
                    Set objetSelectionne = AcadDoc.HandleToObject(Target.Cells.Value)
                    Cells(1, 1).Select
                    'CouleurOriginale = objetSelectionne.Color
                    Call SetForegroundWindow(FindWindowA(vbNullString, AcadObj.Caption))
     
                    AutoCAD.Application.ActiveDocument.SendCommand ("z o p  z e 1 ")
                    'Select.objetSelectionne
                    Update
     
                    'objetSelectionne.Color = CouleurOriginale
     
                'Else
                    Exit For
                'End If
            End If
        Next
    End Sub
    et le problème est que j'ai beaucoup d'autres lignes de code qui rentre en conflit avec celui-ci exemple :

    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
    23
    Sub RazQte()
    'On Error Resume Next
        Range("I11:IV1000") = ""
     
        Range("L10:IV1000").Select
        Range("IV1000").Activate
        With Selection.Interior
            .Pattern = xlNone
            .TintAndShade = 0
            .PatternTintAndShade = 0
        End With
        Selection.Borders(xlDiagonalDown).LineStyle = xlNone
        Selection.Borders(xlDiagonalUp).LineStyle = xlNone
        Selection.Borders(xlEdgeLeft).LineStyle = xlNone
        Selection.Borders(xlEdgeTop).LineStyle = xlNone
        Selection.Borders(xlEdgeBottom).LineStyle = xlNone
        Selection.Borders(xlEdgeRight).LineStyle = xlNone
        Selection.Borders(xlInsideVertical).LineStyle = xlNone
        Selection.Borders(xlInsideHorizontal).LineStyle = xlNone
     
        Range("a1").Select
     
    End Sub
    Le souci est que l'evenement ce lance à chaque fois qu'une cellule (colomne 12 step 2) est activée, du coup à chaque fois que j'ai une macro qui selection les cellules en question l'evenement se lance et j'obtien une erreur.
    Je voudrai savoir si on peut stoper l'evenement à certin endroit et le relancer à d'autre.

    Voila, merci de votre aide.
    Cordialement

  2. #2
    Membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Février 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2012
    Messages : 49
    Points : 51
    Points
    51
    Par défaut
    C'est bon j'ai trouvé une solotion qui marche presque dans tout les cas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     If Target.Cells.Count = 1 Then
     
                 <!-- ----Instruction---- -->
     
    End if
    +1 Pour moi

  3. #3
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut Problème d'envoi de la globalité de la réponse
    Il faudrait aussi désactive les évènements juste avant la Sélection d'une cellule au sein de la procédure SelectionChange.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.EnableEvents = False
    Cells(1, 1).Select
    Application.EnableEvents = True
    PS: C'est le problème d'utilisation non nécessaire des Select

    Ta 2ème procédure peut être écrite comme ceci et sans aucune sélection ni appel de la procédure SelectionChange.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Sub RazQte()
     
    With Worksheets("Feuil1")
        .Range("I11:IV1000").ClearContents
        With .Range("L10:IV1000")
            With .Interior
                .Pattern = xlNone
                .TintAndShade = 0
                .PatternTintAndShade = 0
            End With
            .Borders.LineStyle = xlNone
        End With
    End With
    End Sub
    Tu fera ceci, tu auras +10
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  4. #4
    Membre du Club
    Homme Profil pro
    Apprenti
    Inscrit en
    Février 2012
    Messages
    49
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Apprenti
    Secteur : Bâtiment Travaux Publics

    Informations forums :
    Inscription : Février 2012
    Messages : 49
    Points : 51
    Points
    51
    Par défaut
    C'est pas faux

    Mais mon code à quelque peu changer depuis :

    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
    23
    24
    25
    26
    27
    28
    29
    30
    31
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Dim objet As AcadObject
        Dim objetSelectionne As AcadObject, ColorOriginale As Integer
        Dim StHandle As Variant
        'AcadDoc est un lien sur le dessin en cours
     
        Set AcadDoc = GetObject(, "Autocad.application").ActiveDocument
        Set AcadObj = GetObject(, "Autocad.application")
     
        For nc = 12 To 250 Step 2
     
            If Target.Column = nc Then
    On Error Resume Next
                If Target.Cells.Count = 1 Then
     
                    If Target.Cells.Value = "" Then
     
                    Else
                        Set objetSelectionne = AcadDoc.HandleToObject(Target.Cells.Value)
                        ColorOriginale = objetSelectionne.Color
                        Call SetForegroundWindow(FindWindowA(vbNullString, AcadObj.Caption))
                        StHandle = ActiveCell.Value
                        objetSelectionne.Color = RGB(0, 0, 0)
                        AutoCAD.Application.ActiveDocument.SendCommand ("z et z o (handent """ & StHandle & """)  z .5xp ")
                        objetSelectionne.Color = ColorOriginale
                        Range("a1").Select
                    End If
                End If
            End If
        Next
    End Sub
    et il marche très bien, à l'exception que : si l'utilisateur rend une cellule d'une colomne 12,14,16,18,20,...,12+2n <>"" et qu'il la selection l'event va s'executer. Mais C'est tout.

    je vais mettre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Application.EnableEvents = False
                        Cells(1, 1).Select
                        Application.EnableEvents = True
    Je vais mettre ce code c'est plus prudent, mais il ne me semble pas utile vu que ma cellule a1="" et ne fait pas partie d'une des colomnes de ma fonction if.
    Merci.
    Cordialement.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. erreur de compilation - conflit avec Sleep
    Par timsah dans le forum C++Builder
    Réponses: 5
    Dernier message: 02/02/2006, 17h52
  2. [POO] Conflit avec objet ayant le meme name
    Par ozzmax dans le forum Langage
    Réponses: 7
    Dernier message: 11/01/2006, 17h06
  3. [intermédiaire][TOpenDialog] conflit avec opendir
    Par thecaptain dans le forum C++Builder
    Réponses: 9
    Dernier message: 21/12/2005, 02h50
  4. [vb.net][datagrid] probleme avec l'event lostfocus
    Par graphicsxp dans le forum Windows Forms
    Réponses: 2
    Dernier message: 10/10/2005, 13h24

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