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 :

Problème de différence en VBA [XL-2016]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Ingénieur Fiabilté
    Inscrit en
    Octobre 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur Fiabilté
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 30
    Par défaut Problème de différence en VBA
    Bonjour a tous,

    Voila j'ai un petit problème que je n'arrive pas a résoudre.

    Avec un IF je compare la valeur d'une txt avec la valeur d'une lbl.

    Cela fonctionne bien sauf pour les ligne de code en rouge.

    Le problème avec les lignes de code en rouge, c'est que des que la valeur de la txt est > ou = a 100 , cela m'affiche directement la msgbox.


    Je ne comprend pas pourquoi cela ne fonctionne pas avec ces txt et lbl alors que les autres fonctionnent très bien.

    J'ai vérifié les paramètres des lbl et txt ils sont identiques aux autres lbl et txt

    Merci d'avance pour votre aide


    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
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    Private Sub cmdConf_Click()
        
        Dim O As String
        O = cmbChoix.Value
      
        'Déverrouillage Feuille pour execution maccro
        With Sheets(O)
            .Unprotect Password:="cmms18"
      
        'Verifie que tt les champs sont complet si oui ecris les valeurs dans les cellule adequat de la feuille
        
        Sheets(O).Cells(8, 3).NumberFormat = "dd mmm yyyy"
        
        If txtAf.Text = "" Then
            Sheets(O).Cells(10, 3) = lblAf.Caption
            Sheets(O).Cells(11, 3) = lblEn.Caption
        Else
            If txtAf.Text > lblAf.Caption Then
                Sheets(O).Cells(10, 3) = txtAf.Text
                Sheets(O).Cells(11, 3) = lblEn2.Caption
            Else
                MsgBox ("Air Frame Time must be superior than original !")
                Exit Sub
            End If
        End If
        
        If O = "FXED" Then
        
            If txtGP.Text = ("") Then
                Sheets(O).Cells(10, 8) = lblGP.Caption
            Else
                'If txtGP.Text > lblGP.Caption Then
                    Sheets(O).Cells(10, 8) = txtGP.Value
                'Else
                    'MsgBox ("GP Cycle must be superior than original !")
                    'Exit Sub
                'End If
            End If
        
            If txtPT.Text = ("") Then
                Sheets(O).Cells(11, 8) = lblPT.Caption
            Else
                If txtPT.Text > lblPT.Caption Then
                    Sheets(O).Cells(11, 8) = txtPT.Text
                Else
                    MsgBox ("PT Cycle must be superior than original !")
                    Exit Sub
                End If
            End If
        
        Else
            If txtRin.Text = ("") Then
                Sheets(O).Cells(10, 8) = lblRin.Caption
            Else
                If txtRin.Text > lblRin.Caption Then
                    Sheets(O).Cells(10, 8) = txtRin.Text
                Else
                    MsgBox ("Rin must be superior than original !")
                    Exit Sub
                End If
            End If
        
            If txtN2.Text = ("") Then
                Sheets(O).Cells(11, 8) = lblN2.Caption
            Else
                If txtN2.Text > lblN2.Caption Then
                    Sheets(O).Cells(11, 8) = txtN2.Text
                Else
                    MsgBox ("N2 must be superior than original !")
                    Exit Sub
                End If
            End If
            
            If txtSpray.Text = ("") Then
                Sheets(O).Cells(10, 12) = lblSpray.Caption
            Else
                If txtSpray.Text > lblSpray.Caption Then
                    Sheets(O).Cells(10, 12) = txtSpray.Text
                Else
                    MsgBox ("Spray Time must be superior than original !")
                    Exit Sub
                End If
            End If
        End If
        
        If txtHook.Text = ("") Then
            Sheets(O).Cells(9, 12) = lblHook.Caption
        Else
            If txtHook.Text > lblHook.Caption Then
                Sheets(O).Cells(9, 12) = txtHook.Text
            Else
                MsgBox ("Hook Time must be superior than original !")
                Exit Sub
            End If
        End If
        
        If txtCycle.Text = ("") Then
            Sheets(O).Cells(9, 8) = lblCycle.Caption
        Else
            If txtCycle.Text > lblCycle.Caption Then
                Sheets(O).Cells(9, 8) = txtCycle.Text
            Else
                MsgBox ("Cycle must be superior than original !")
                Exit Sub
            End If
        End If
        
        MsgBox ("Update Confirmed")
        
        Sheets(O).Cells(8, 3) = Date
        
           .Protect Password:="cmms18" 'Reverrouillage Feuille après exécution maccro
        End With
      
        
        cmbChoix.Locked = False
     
    
    End Sub

  2. #2
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Bonjour
    Tu compares quoi ? des chaînes de caractères ou des numériques ?
    Car, par exemple, "100" est plus petit que "2", alors que 100 est plus grand que 2
    Si tu dois comparer des numériques, il convient d'appliquer aux expressions numériques en chaîne de caractères une fonction de conversion.
    Intéresse-toi donc aux fonctions suivantes : Cint, Csng et Cdbl, (mais également Val si numériques décimaux avec le point comme séparateur décimal) dont c'est la vocation.

  3. #3
    Membre averti
    Homme Profil pro
    Ingénieur Fiabilté
    Inscrit en
    Octobre 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur Fiabilté
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 30
    Par défaut
    Je compare des chiffres qui sont dans des cellules excel, ces cellules excel sont au format nombre avec 2 décimal.

    Mais dans ce cas pourquoi cela fonctionne avec les autres ligne de code ?

  4. #4
    Expert confirmé
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 84
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Par défaut
    Citation Envoyé par Novagsk Voir le message
    Je compare des chiffres qui sont dans des cellules excel, ces cellules excel sont au format nombre avec 2 décimal.
    Il ne me semble pas que ceci (par exemple et entre autres)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If txtPT.Text > lblPT.Caption
    soit de nature à corroborer cette assertion.

  5. #5
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 173
    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 : 13 173
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Ce que Unparia (boujour Jacques), t'explique c'est que lorsque tu entres une valeur numérique dans une cellule d'excel elle est naturellement considérée comme un nombre alors qu'un contrôle TextBox est d'office une valeur alphanumérique donc 100 dans une cellule devient "100" dans un TextBox et que donc pour comparer deux valeurs numériques contenues dans des TextBox cela nécessite une conversion par une fonction VBA de conversion

    Considérons un UserForm ayant deux contrôles nommés TextBox1 et TextBox2 et qui à l'activation du formulaire prendront comme valeur les cellules A2 et B2 de la feuille active qui contiennent 100 et 2

    Exemple 1 sans conversion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub UserForm_Activate()
      With Me
      .TextBox1.Value = Range("A2").Value
      .TextBox2.Value = Range("B2").Value
       MsgBox .TextBox1.Value & " est " & IIf(.TextBox1.Value > .TextBox2.Value, "plus grand", "plus petit") & " que " & .TextBox2.Value
      End With
    End Sub
    Exemple 2 avec conversion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Private Sub UserForm_Activate()
      With Me
      .TextBox1.Value = Range("A2").Value
      .TextBox2.Value = Range("B2").Value
       MsgBox .TextBox1.Value & " est " & IIf(Val(.TextBox1.Value) > Val(.TextBox2.Value), "plus grand", "plus petit") & " que " & .TextBox2.Value
      End With
    End Sub
    Voici le message renvoyé pour
    Exemple 1 : 100 est plus petit que 2
    Exemple 2 : 100 est plus grand que 2
    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

  6. #6
    Membre averti
    Homme Profil pro
    Ingénieur Fiabilté
    Inscrit en
    Octobre 2014
    Messages
    30
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Ingénieur Fiabilté
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Octobre 2014
    Messages : 30
    Par défaut
    Il ne me semble pas que ceci (par exemple et entre autres)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If txtPT.Text > lblPT.Caption
    soit de nature à corroborer cette assertion.
    Hahah oui vu comme ca c'est sur.

    Ok je comprend le fait de s'assurer de comparer (comme me disait ma prof de Math au collège) des bananes avec des bananes 🍌 et non des pommes 🍏

    Mais ce que je n'arrive pas a comprendre c'est pourquoi dans ce cas je n"ai pas d'erreur avec les autre txt et lbl qui sont traiter par les autres boucle IF comme celle ci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    If txtRin.Text = ("") Then
                Sheets(O).Cells(10, 8) = lblRin.Caption
            Else
                If txtRin.Text > lblRin.Caption Then
                    Sheets(O).Cells(10, 8) = txtRin.Text
                Else
                    MsgBox ("Rin must be superior than original !")
                    Exit Sub
                End If
            End If
    Alors que c'est exactement les memes codes, et que les cellules de la feuille sont configurer en nombre. Et ca je trouve ca tout de meme louche

    Mais je vais regarder comment utiliser les fonctions dont unparia me parle.

    Merci

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

Discussions similaires

  1. Problème de date en vba-access 2000
    Par rob2-9 dans le forum Access
    Réponses: 1
    Dernier message: 30/08/2006, 12h13
  2. [C#][1.1] Problèmes de différences d'affichage I.E. / Firefox
    Par Monstros Velu dans le forum ASP.NET
    Réponses: 2
    Dernier message: 17/06/2006, 20h05
  3. Problème de requête en VBA
    Par otravaglini dans le forum Access
    Réponses: 2
    Dernier message: 20/04/2006, 11h19
  4. Type de données pour effectuer une différence en vba
    Par snoopy69 dans le forum Access
    Réponses: 4
    Dernier message: 03/03/2006, 07h49
  5. Problème avec open() [Excel VBA]
    Par Invité dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 28/11/2005, 16h21

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