Microsoft 365 code s'execute 2 fois

dereck

XLDnaute Nouveau
Bonjour a tous,
voici le souci , j'ai un textbox pour lequel le code est le suivant :

VB:
Private Sub AeroportDep_Change()

Dim derligne, i, j, C, pays, code

AeroportDep.Value = UCase(AeroportDep.Value)

If Len(AeroportDep.Value) = 3 Then


    Workbooks.Open Filename:="D:\Documents\Temp_Cotation\CHRONO COTATION 2019 PNR Temp.xlsm"
    Workbooks("CHRONO COTATION 2019 PNR Temp.xlsm").Activate
    code = AeroportDep.Value
    Sheets("Code").Select
    'Range("A2").Select
    'Range(Selection, Selection.End(xlDown)).Select
       Set C = Columns("A:A").Find(What:=code, After:=ActiveCell, LookIn:=xlFormulas _
    , LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)
    
        If C Is Nothing Then
                
            MsgBox "Code Aéroport Inconnu"
            Workbooks("CHRONO COTATION 2019 PNR Temp.xlsm").Close
            Exit Sub
            Else
            C.Select
            pays = ActiveCell.Offset(0, 1).Value
            PaysDep.Value = pays
            End If
        Set C = Nothing
Workbooks("CHRONO COTATION 2019 PNR Temp.xlsm").Close
End If

End Sub

et donc une fois que j'ai mes 3 lettre dans le textbox en fait le code s'execute 2 fois de suite et je ne comprends pas pourquoi :rolleyes:

Merci par avance de votre aide
 
Solution
Bonsoir Dereck, bonsoir le forum,

Ta macro agit au changement de la TextBox. Le seul fait de changer la casse relance automatiquement l'événement Change. Si tu fais tourner pas à pas (touche [F8]) tu verras qu'après la ligne :

VB:
AeroportDep.Value = UCase(AeroportDep.Value)
la lecture du code relance l'événement Change et donc l'exécute deux fois.

Pour remédier à ce problème je te propose la solution suivante :
1. En haut du module de ton Userform (en première ligne) déclare une variable boléenne TEST :

Code:
Private TEST As Boolean
2. Remplace ton code par celui-ci :
Code:
Private Sub AeroportDep_Change()
Dim derligne, i, j, C, pays, code

If TEST =...

Robert

XLDnaute Barbatruc
Repose en paix
Bonsoir Dereck, bonsoir le forum,

Ta macro agit au changement de la TextBox. Le seul fait de changer la casse relance automatiquement l'événement Change. Si tu fais tourner pas à pas (touche [F8]) tu verras qu'après la ligne :

VB:
AeroportDep.Value = UCase(AeroportDep.Value)
la lecture du code relance l'événement Change et donc l'exécute deux fois.

Pour remédier à ce problème je te propose la solution suivante :
1. En haut du module de ton Userform (en première ligne) déclare une variable boléenne TEST :

Code:
Private TEST As Boolean
2. Remplace ton code par celui-ci :
Code:
Private Sub AeroportDep_Change()
Dim derligne, i, j, C, pays, code

If TEST = True Then Exit Sub
If Len(AeroportDep.Value) = 3 Then
    TEST = True
    Workbooks.Open Filename:="D:\Documents\Temp_Cotation\CHRONO COTATION 2019 PNR Temp.xlsm"
    Workbooks("CHRONO COTATION 2019 PNR Temp.xlsm").Activate
    code = AeroportDep.Value
    Sheets("Code").Select
    'Range("A2").Select
    'Range(Selection, Selection.End(xlDown)).Select
    Set C = Columns("A:A").Find(What:=code, After:=ActiveCell, LookIn:=xlFormulas _
    , LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)
    If C Is Nothing Then
        MsgBox "Code Aéroport Inconnu"
        Workbooks("CHRONO COTATION 2019 PNR Temp.xlsm").Close
        Exit Sub
    Else
        C.Select
        pays = ActiveCell.Offset(0, 1).Value
        PaysDep.Value = pays
    End If
    Set C = Nothing
    Workbooks("CHRONO COTATION 2019 PNR Temp.xlsm").Close
End If
If TEST = True Then AeroportDep.Value = UCase(AeroportDep.Value)
End Sub

Ce système permet d'empêcher le redoublement de l'événement Change. Il a comme inconvénient de ne faire apparaître les majuscules qu'au troisième caractère...
 

dereck

XLDnaute Nouveau
Bonsoir Dereck, bonsoir le forum,

Ta macro agit au changement de la TextBox. Le seul fait de changer la casse relance automatiquement l'événement Change. Si tu fais tourner pas à pas (touche [F8]) tu verras qu'après la ligne :

VB:
AeroportDep.Value = UCase(AeroportDep.Value)
la lecture du code relance l'événement Change et donc l'exécute deux fois.

Pour remédier à ce problème je te propose la solution suivante :
1. En haut du module de ton Userform (en première ligne) déclare une variable boléenne TEST :

Code:
Private TEST As Boolean
2. Remplace ton code par celui-ci :
Code:
Private Sub AeroportDep_Change()
Dim derligne, i, j, C, pays, code

If TEST = True Then Exit Sub
If Len(AeroportDep.Value) = 3 Then
    TEST = True
    Workbooks.Open Filename:="D:\Documents\Temp_Cotation\CHRONO COTATION 2019 PNR Temp.xlsm"
    Workbooks("CHRONO COTATION 2019 PNR Temp.xlsm").Activate
    code = AeroportDep.Value
    Sheets("Code").Select
    'Range("A2").Select
    'Range(Selection, Selection.End(xlDown)).Select
    Set C = Columns("A:A").Find(What:=code, After:=ActiveCell, LookIn:=xlFormulas _
    , LookAt:=xlPart, SearchOrder:=xlByColumns, SearchDirection:=xlNext, _
    MatchCase:=False, SearchFormat:=False)
    If C Is Nothing Then
        MsgBox "Code Aéroport Inconnu"
        Workbooks("CHRONO COTATION 2019 PNR Temp.xlsm").Close
        Exit Sub
    Else
        C.Select
        pays = ActiveCell.Offset(0, 1).Value
        PaysDep.Value = pays
    End If
    Set C = Nothing
    Workbooks("CHRONO COTATION 2019 PNR Temp.xlsm").Close
End If
If TEST = True Then AeroportDep.Value = UCase(AeroportDep.Value)
End Sub

Ce système permet d'empêcher le redoublement de l'événement Change. Il a comme inconvénient de ne faire apparaître les majuscules qu'au troisième caractère...
Bonjour Robert
Merci cela marche parfaitemement !! ;)
 

Discussions similaires

Statistiques des forums

Discussions
312 098
Messages
2 085 265
Membres
102 844
dernier inscrit
atori2