Code pour respecter une tolerence +/-

Résolu
veve890 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -  
veve890 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention   -
bonjour voici mon deuxiemes probleme
j ai un textbox1 sur une feuille excel
je lui rentre une valeur exemple 12.00+/-0.05
je voudrai suivant le resultat dans la cellule G5
si 12.00 dans la cellule G3 une croix noir apparait
idem pour 12.05 et 11.95
parcontre si il depasse la tolerence maxi et mini une croix rouge en G4
et que le chiffre dans G devient rouge
merci de votre reponse a lavance

21 réponses

  • 1
  • 2
  1. PlacageGranby Messages postés 402 Statut Membre 26
     
    Il me semble que ce serait plus élégant d'avoir 2 saisies distinctes.
    La valeur et la tolérance, qui serait deux nombres qu'on peut manipuler.
    Ce qui serait relativement simple.

    Si tu tiens absoluement à avoir 12.00+/-0.05, avec les symbole, c'est du texte et non pas un chiffre.
    Donc, on peut trouver la position du +, et prendre les caractère le précédent pour ensuite le convertir cela en nombre pour avoir la valeur, et faire la même chose à partir du - jusqu'a la fin pour avoir la tolérance.

    Voici un exemple, sans VBA, et sans textbox, des formules excel seulement.

    https://www.cjoint.com/?DKttz32aX5E

    Si tu as besoin d'un textbox, le mieux c'est de nous fournir ton fichier sur cjoint (enlever données confidentielle au besoin), et nous allons travailler à partir de la.

    Cordialement
    0
    1. veve890 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
       
      bonjour
      merci de votre reponse mais j ais absolument besoin du textbox
      je vais essayer de vous envoyer une partie de mon programme
      mon textbox se trouve la ou ont rentre la cote avec la tolerence a trouve
      dans F41 se trouve la cote trouve
      donc si cette cote est dans la tolerence une croix en noir dans la cellule D41
      si c est hors tolerence une croix rouge dans la cellule E41 et la cote dans F41 en rouge aussi
      merci beaucoup de votre aide
      je vais essayer de vous envoyer la piece jointe
      cordialement
      0
    2. PlacageGranby Messages postés 402 Statut Membre 26
       
      Bonjour,
      Utilisez Cjoint pour mettre votre fichier en ligne et copier le lien ici,
      Nous allons travailler à partir de votre fichier.

      Il faudrait déterminer aussi quand la macro sera appelé.

      Je vois soit:
      quand le textbox perd le focus,
      ou mettre un bouton de commande pour indiquer qu'on a fini d'écrire dans le textbox
      0
    3. veve890 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
       
      bonjour je ne comprend pas cjoint
      pouvez vous m expliquer plus simplement
      pour determine quand la macro sera appele
      je prefaire que se soit au moment ou ont rentre le resultat
      dans la cellule F41
      merci encore pour votre aide
      cordialement
      0
    4. PlacageGranby Messages postés 402 Statut Membre 26
       
      Pour mettre le fichier en ligne.

      Se rendre sur www.cjoint.com

      Utiliser le bouton parcourir pour choisir le fichier a mettre en ligne.
      Utiliser le boutton "Créer le lien Cjoint".
      Et ca donne un lien.

      Dans mon message précédent, je vous ait donner un lien Cjoint qui pointe sur un fichier d'exemple que j'avais fait.

      Donc, il faut faire la même chose. un copier collé du lien ici.
      0
    5. PlacageGranby Messages postés 402 Statut Membre 26
       
      Bon, j'ai pris un peu d'avance

      Private Sub Worksheet_Change(ByVal Target As Range)
      Dim Valeur, Tolerance As Double
      
      If (Target.Row = 41) And (Target.Column = 6) Then   'Valide qu'on est en F41
          'Assigne la valeur et la tolérance à partir de Textbox1
          Valeur = Val(Left(TextBox1.Text, InStr(TextBox1.Text, "+") - 1))
          Tolerance = Val(Right(TextBox1.Text, Len(TextBox1.Text) - InStr(TextBox1.Text, "-")))
        
        'Efface le format et le contenu  (sinon on fini avec des X partout)
          Range("D41:F41").ClearFormats
          Range("D41:E41").ClearContents
      
          'Compare le contenu de target (F41) avec la valeur et  tolerance
          If (Target.Value > (Valeur + Tolerance)) Or (Target.Value < (Valeur - Tolerance)) Then
              'Si c'est à l'extérieur de l'intervale
              Range("E41").Value = "X"
              With Range("E41:F41").Font
                  .FontStyle = "Gras"
                  .Size = 12
                  .Color = 255
              End With
          Else
              'sinon c'est à l'intérieur de l'intervale
              Range("D41").Value = "X"
              With Range("D41").Font
                  .FontStyle = "Gras"
                  .Size = 12
                  .Color = 0
              End With
          End If
      End If
      End Sub
      0
  2. veve890 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
     
    rebonjour
    voici mon lien : https://www.cjoint.com/?0KvqkFM7g3g
    sinon j ai essayer votre code et le probleme qui s affiche c est impossible de modifier une cellule fudionnee avec F41 G41 L41
    merci
    0
  3. PlacageGranby Messages postés 402 Statut Membre 26
     
    Est-ce qu'il faut utiliser textbox1 ou textbox18 ? je vois qu'il y avait un textbox18 proche de la ligne 41 avec 12.00 +/1 0.10.
    Pour l'instant je modifie mon code pour utiliser textbox18.

    Aussi, la ligne qui cause l'erreur car elle est fusioné:
    il faut carrément supprimer cette partie du code car on ne peut pas supprimer le format car cela effacerait le tableau, la fusion, l'alignement.
    Donc il faut seulement s'attaquer à la couleur, j'ai enlever la grosseur 12 et le gras que j'avais mis dans le code pour laisser ton tableau uniformisé.

    Dans le fond, j'avais mis un peu d'extra pour que, en regardant mon code, tu vois comment ça se fait et que tu puisses le modifier selon tes gouts.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Valeur, Tolerance As Double
    
    If (Target.Row = 41) And (Target.Column = 6) Then   'Valide qu'on est en F41
        'Assigne la valeur et la tolérance à partir de Textbox1
        Valeur = Val(Left(TextBox18.Text, InStr(TextBox18.Text, "+") - 1))
        Tolerance = Val(Right(TextBox18.Text, Len(TextBox18.Text) - InStr(TextBox18.Text, "-")))
      
      'Efface le format et le contenu  (sinon on fini avec des X partout)
        
        Range("D41:E41").ClearContents
        Range("D41:F41").Font.Color = 0
        'Compare le contenu de target (F41) avec la valeur et  tolerance
        If (Target.Value > (Valeur + Tolerance)) Or (Target.Value < (Valeur - Tolerance)) Then
            'Si c'est à l'extérieur de l'intervale
            Range("E41").Value = "X"
            Range("E41:F41").Font.Color = 255
        Else
            'sinon c'est à l'intérieur de l'intervale
            Range("D41").Value = "X"
            Range("D41:F41").Font.Color = 0
        End If
    End If
    End Sub


    Voilà le fichier avec le code inclus.
    https://www.cjoint.com/?DKvrb6SIOPk
    Je l'ai renommé feuille_releve2 pour pas écraser ton originale.
    0
  4. veve890 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
     
    super cela marche très bien
    je vous remercie de votre aide
    c est gentil
    je pense que j aurais encore besoin de vous
    pour une fois remplis
    je veux que le fichiers s' enregistre dans une sauvegarde sur mon pc
    ou ce trouve d autre fichiers en premier il y aura des fichiers avec une dates 2015.2016.2017.2018 donc l idée c est déjà suivant la date surtout l année qui
    sera dans la cellule date A4 de ma feuille finiseur ex 10.01.2015 que que deja sa soit le fichiers 2015 qui soit selectionne et ensuite dans les fichiers avec les dates il y a d autre fichiers avec des numero ex: 0 a 10000 /10001 a 20000 etc et que selon la reference qui se trouveras dans la cellule E2 ex: 00850 s enregistre dans le fichiers 0 a 10000 et qui creer un fichiers si il n exsiste pas 00850 et s enregistre dedans
    a pres si vous avez une autre idees en gardent la date et le numero de reference moule je suis preneur

    merci et bon wek end
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. PlacageGranby Messages postés 402 Statut Membre 26
     
    Re-bonjour,

    On peut utiliser
    ActiveWorkbook.SaveAs Filename:="lenomquetuveux"

    Le nom est une chaine texte donc tu peux utiliser la concaténation avec l'opérateur &

    Si tu as dans A4 2015:
    ActiveWorkbook.SaveAs Filename:="Fichier_" & Range("A4").value & "_Test.xlsm"

    Va donner un fichier nommé Fichier_2015_Test.xlsm

    C'est seulement un exemple, tu m'as un peu perdu avec tout les chiffres, donc je te donne la marche à suivre.
    Exemple :
    "blah" & "blahblah" & Range("z19").value & "blah" & Range("P12").value & ".txt"

    Donc utiliser du texte entre guillemet et range("colonneligne").value avec des &

    Donc, il reste a placer la commande quelque part.
    Quand veux-tu appeler la sauvegarde ?
    Sur un bouton ou autre ?
    0
  7. veve890 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
     
    bonjour je retourne au probleme de tolerence
    j ai des cellule qui ne marche pas avec un textbox j uste deux cellules
    une avec la cote tolerence et l autre en dessous la cote trouve
    donc je voudrai que si la cote trouve reste dans la tolerence reste en noir sinin en rouge exemple c3 la cote tolerence et c4 la cote trouve
    merci d avance
    0
  8. PlacageGranby Messages postés 402 Statut Membre 26
     
    Bonjour,

    Premièrement, est-ce encore dans le même fichier ? J'assume que oui.
    Donne moi exactement dans quelle cellules et dans quelle feuille sont
    - Les valeurs
    - Les tolérances
    - Les cotes à évaluer

    La case C3 dans la feuille finisseur, c'est le titre, donc c'est probablement pas ca.
    Et dans la feuille Dimensionnel finisseur, je vois Volume origine, mais je ne sais pas ou est inscrite la tolérance ?

    Il faut comprendre que ces tableau ne signifie rien pour nous. nous ne savons pas comment il est rempli, ce qu'il fait, et à quoi il sert. Et nous ne pouvons pas toujours deviner.

    Donc il faut spécifier la position des cellules et dans quelle feuille, et dire ce qu'on veut changer.
    0
  9. veve890 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
     
    bonsoir je rentre du travail
    je vais vous expliquer
    cele se passe dans la feuille dimensionnel finisseur
    1 exemple : en C3 j aurais la cote tolerence et en C4 la cote trouve donc je voudrais que la cote en C5 si elle est dans la tolerence elle reste en noir si elle est hors tolerence en rouge et souligne
    2 exemple de cellule : cellule IJ10 cote tolerence a trouve et D10 cote trouve la meme chose que le 1 exemple mais attention au cellule fusionnees
    je mettrerais le code aux autres cellule idem au exempls
    merci
    cordialement
    0
    1. PlacageGranby Messages postés 402 Statut Membre 26
       
      J'imagine que tu peux réutiliser le code

      Change le row =41 et et column =6 pour la cellule que tu veux valider.
      et un peu partout, modifie les D41:E41 pour les cellule que tu veux valider.

      Les variables valeur et tolérance.
      tu peux assigner les cellule directement avec variable = range.value
      Exemple
      valeur = range("C4").value
      Si tu as des symbole dans C4 comme +/- il faut les enlever, réutiliser les fonction left, right, instr au besoin. Tu peux t'inspirer du code qu'on a déjà développé.
      Au lieu de end if
      si tu veux valider plusieurs cellule dans ta feuille.
      mettre elseif et repartir avec (Target.Row = XX) And (Target.Column = YY) Then
      et ce pour chaque cellule à valider.

      Private Sub Worksheet_Change(ByVal Target As Range)
      Dim Valeur, Tolerance As Double
      
      If (Target.Row = 41) And (Target.Column = 6) Then   'Valide qu'on est en F41
          'Assigne la valeur et la tolérance à partir de Textbox1
          Valeur = Val(Left(TextBox18.Text, InStr(TextBox18.Text, "+") - 1))
          Tolerance = Val(Right(TextBox18.Text, Len(TextBox18.Text) - InStr(TextBox18.Text, "-")))
        
        'Efface le format et le contenu  (sinon on fini avec des X partout)
          
          Range("D41:E41").ClearContents
          Range("D41:F41").Font.Color = 0
          'Compare le contenu de target (F41) avec la valeur et  tolerance
          If (Target.Value > (Valeur + Tolerance)) Or (Target.Value < (Valeur - Tolerance)) Then
              'Si c'est à l'extérieur de l'intervale
              Range("E41").Value = "X"
              Range("E41:F41").Font.Color = 255
          Else
              'sinon c'est à l'intérieur de l'intervale
              Range("D41").Value = "X"
              Range("D41:F41").Font.Color = 0
          End If
      End If
      End Sub
      0
  10. veve890 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
     
    bonjour
    j ai essayer de refaire le code
    mais cela ne marche pas
    et je ne comprend pas enlever les symbole +/- dans la cellule c4 comment ont va savoir si il y a une tolerence et de combien
    je vous envoie mon code si vous pouvez regarder
    merci
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Valeur, Tolerance As Double
    
    If (Target.Row = 4) And (Target.Column = 3) Then   'Valide qu'on est en F41
    Valeur = Range("C4").Value
        'Assigne la valeur et la tolérance à partir de Textbox1
        ''Valeur = Val(Left(TextBox18.Text, InStr(TextBox18.Text, "+") - 1))
        ''Tolerance = Val(Right(TextBox18.Text, Len(TextBox18.Text) - InStr(TextBox18.Text, "-")))
      
      'Efface le format et le contenu  (sinon on fini avec des X partout)
        
        Range("C5").ClearContents
        Range("C5").Font.Color = 0
        'Compare le contenu de target (F41) avec la valeur et  tolerance
        If (Target.Value > (Valeur + Tolerance)) Or (Target.Value < (Valeur - Tolerance)) Then
            'Si c'est à l'extérieur de l'intervale
          ''  Range("E41").Value = "X"
            Range("C5").Font.Color = 255
        Else
            'sinon c'est à l'intérieur de l'intervale
            Range("C5").Value = "X"
            Range("C5").Font.Color = 0
        End If
    End If
    End Sub
    0
  11. PlacageGranby Messages postés 402 Statut Membre 26
     
    Re-bonjour

    On va décortiquer ensemble

    Tolerance = Val(Right(TextBox18.Text, Len(TextBox18.Text) - InStr(TextBox18.Text, "-")))

    Donc, la clé ici c'est la partie instr() avec deux paramètre.
    Instr() permet de cherche dans un texte (premier paramêtre), un ou plusieurs symbol (ou chiffre, ou lettre).
    Donc si tu écris +/- 0.05
    Ce qu'on veut, c'est savoir ou est le -
    Donc instr(Range("C4").value, "-")

    Je cherche le - dans C4
    Ensuite, on apprend que le - est à la 3ieme position.
    Donc on veut prendre le texte de la 4ieme position jusqu'a la fin.

    C'est un jeu mathématique.
    C'est facile a partir de la gauche, on fait left 3, mais compter a partir de la droite, il faut faire la différence entre la position et le nombre total de caractère pour savoir ou s'arreter à partir de la droite.
    Len () nous permet d'avoir le nombre de caractère dans une chaine de texte.
    Donc Len(Range("C4".value) va nous retourner 8 dans le cas de +/- 0.05
    Il compte les espàce. donc on combine le tout pour compter 8 - 3 = 5
    On sait maintenant qu'il y a 5 caractère à partir de la droite jusqu'au -
    on inclus ca dans un right() qui nous retourne X caractère â partir de la droite.

    Ca finit par faire une belle fonction assez complexe.
    Simple quand on prend un morceau à la fois, mais case-tête quand on regarde le tout.
    Et pour finir. la fonction val() converti du texte en chiffre. c'est essentiel pour utiliser notre variable pour faire des calculs mathématique.

    Tolerance = Val(Right(TextBox18.Text, Len(TextBox18.Text) - InStr(TextBox18.Text, "-")))

    Voilà encore l'exemple de notre textbox. Il utilise les fonction instr() right() len() val(). On remplace textbox18.text par range("C4").value

    Mon but est de ne pas seulement te donner un programme sur mesure mais que tu puisses te débrouiller avec le code.

    Imagine,,,, dans 2 ans, il faut ajouter une ligne dans ton tableau, et je ne suis pas la.
    C4 est rendu en C5 etc etc.
    Plus rien ne va fonctionner avec VBA, il va falloir que tu adapter le code en conséquance, donc mieux vaut comprendre ce code pour pouvoir l'adapter si le besoin survient.
    0
  12. veve890 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
     
    bonjour j ai lu le message d hier et voici le code que jai fait
    mais il y a une erreur de syntaxe sur la ligne tolerence = val etc

    Private Sub Worksheet_Change(ByVal Target As Range)
     'code pour mettre soit une croix rouge ou une croix noir selon si ont est dans la tolerence du textbox et la cote trouve en rouge si ont est hors tolerence et une croix noir si ont est dans la tolerence
    
    Dim Valeur, Tolerance As Double
    'Dim Valeur, Tolerance As Integer
    
    'code pour cellule C4 avec C3
    If (Target.Row = 4) And (Target.Column = 3) Then   'Valide qu'on est en C4
        'Assigne la valeur et la tolérance à partir de Textbox1
        Valeur = Val(Left((Range("C3").Value), InStr(Range("C3").Value, "+") - 1))
        Tolerance = Val(Right(Range("C3").Value), Len(Range("C3").Value) - InStr(Range("C3").Value,"-")))
      Valeur = Range("C3").Value
      'Efface le format et le contenu  (sinon on fini avec des X partout)
        
        Range("C4").MergeArea.ClearContents
        Range("C4").Font.Color = 0
        'Compare le contenu de target (F41) avec la valeur et  tolerance
        If (Target.Value > (Valeur + Tolerance)) Or (Target.Value < (Valeur - Tolerance)) Then
            'Si c'est à l'extérieur de l'intervale
            Range("C4").Value = "X"
            Range("C4").Font.Color = 255
        Else
            'sinon c'est à l'intérieur de l'intervale
            Range("C4").Value = "X"
            Range("C4").Font.Color = 0
        End If
    End If
    End Sub

    je n arrive pas a trouver pourquoi cette erreur
    pouvez vous m expliquer
    cordialement
    0
  13. PlacageGranby Messages postés 402 Statut Membre 26
     
    Bonjour,

    Valeur = Val(Left((Range("C3").Value), InStr(Range("C3").Value, "+") - 1))
    Tolerance = Val(Right(Range("C3").Value), Len(Range("C3").Value) - InStr(Range("C3").Value,"-")))
    Valeur = Range("C3").Value 


    Rapidement je vois 2 problèmes.
    Tolerance n'est pas déclaré.
    Il manque Dim Tolerance as double.

    Aussi, je vois deux fois valeur = ....
    Donc la deuxième assignation va écraser la première,
    Valeur va toujours donner Valeur = Range("C3").Value
    et Valeur = Val(Left((Range("C3").Value), InStr(Range("C3").Value, "+") - 1)) devient inutile.
    0
  14. veve890 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
     
    re bonjour
    jje vien de refaire le code suivant vos dernieres remarque
    et voici le code
    Private Sub Worksheet_Change(ByVal Target As Range) 
    
    Dim Valeur, Tolerance As Double
     Dim Tolerance As Integer
    
     Tolerance = Val(Right(Range("C3").Value), Len(Range("C3").Value) - InStr(Range("C3").Value,"-")))
    
    mais la ligne au dessus reste en rouge et il y a rien qui se passe
    
      Valeur = Range("C3").Value
    
      Range("C4").MergeArea.ClearContents
        Range("C4").Font.Color = 0
    
        If (Target.Value > (Valeur + Tolerance)) Or (Target.Value < (Valeur - Tolerance)) Then
            'Si c'est à l'extérieur de l'intervale
            Range("C4").Value = "X"
            Range("C4").Font.Color = 255
        Else
            'sinon c'est à l'intérieur de l'intervale
            Range("C4").Value = "X"
            Range("C4").Font.Color = 0
        End If
    End If
    End Sub


    la je ne comprent pas pourqoi la ligne tolerence reste en rouge et je nest aucun message d erreur
    cordialement
    0
  15. PlacageGranby Messages postés 402 Statut Membre 26
     
    Re-bonjour

    Tolerance = Val(Right(Range("C3").Value), Len(Range("C3").Value) - InStr(Range("C3").Value,"-")))

    Quand on a plusieurs fonction l'une dans l'autre, c'est un bon exercice de compter le nombre de parenthèse.
    J'en compte 7 qui ouvrent, et 8 qui ferment.

    La fonction RIGHT() a besoin de deux paramètre, si on regarde les parenthèses, il recoit seulement l'information Range("C3").Value il ne sais pas combien de caractère retourné à partir de la droite, l'information est après la virgule, mais il ne regarde pas puisque la parenthèse est déjà fermé, donc erreur.

    Le code VBA ne pardonne pas, il veut absolument le bon nombre de paramètre pour chaque fonction et il faut soigneusement suivre les parenthèses. (on s'y perd facilement)
    0
  16. veve890 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
     
    bonjour
    pour les parenthese pourrier vous m envoyer un exemple avec plusieurs cas differents
    et a chaque cas se qui ne faut pas faire et se qui faut faire
    pour revenire a notre code
    si j ais bien suivi voila se que jai fait mais il y a rien qui marche pas da message derreur rien

    Private Sub Worksheet_Change(ByVal Target As Range)
    
    Dim Valeur, Tolerance As Double
     Dim Tolerance As Integer
    
    If (Target.Row = 4) And (Target.Column = 3) Then  
    
    
     Tolerance = Val(Right(Range("C3").Value, Len(Range("C3").Value) - InStr(Range("C3").Value, "-")))
      Valeur = Range("C3").Value
      
        
        Range("C4").MergeArea.ClearContents
        Range("C4").Font.Color = 0
        'Compare le contenu de target (F41) avec la valeur et  tolerance
        If (Target.Value > (Valeur + Tolerance)) Or (Target.Value < (Valeur - Tolerance)) Then
            'Si c'est à l'extérieur de l'intervale
            Range("C4").Value = "X"
            Range("C4").Font.Color = 255
        Else
            'sinon c'est à l'intérieur de l'intervale
            Range("C4").Value = "X"
            Range("C4").Font.Color = 0
        End If
    End If

    merci de votre aide
    0
  17. PlacageGranby Messages postés 402 Statut Membre 26
     
    Mettez une trace sur votre
    If (Target.Row = 4) And (Target.Column = 3) Then
    Dans l'éditeur visual basic, click dans la marge de gauche, et cela ajoute un point rouge.

    Donc, vous retournez dans excel et changez la valeur, Excel va basculer dans l'éditeur et s'arrêter à votre point d'arret.
    Vous faites ensuite F8 et il va executer ligne par ligne votre code.

    Première chose testé, va t'il entrer dans votre If (Target.Row = 4) And (Target.Column = 3) Then
    S'il n'entre pas, il y a erreur dans votre row =4 et column =3
    Ensuite, s'il entre, F8, il avance à la prochaine ligne.
    Vous survolez tolerance avec la souris. vous allez voir son contenu. Est-il égal à ce que vous pensez ?
    Ensuite, F8, regardez le contenu de valeur,, est-ce égal à ce que vous voulez ?

    Je ne veux pas vous donner la réponse tout de suite.
    C'est malheureux, mais dès que votre fichier excel va changer, vous aurez à modifier le code VBA en conséquence. donc je vous donne les pistes pour trouvez les erreurs et devenir autonome.

    En fait, 80% des réponses que je donne, je les ignorais, j'ai d'abord chercher dans ce forum un petit bout de code, puis un autre et un autre. Je teste, et j'adapte à la situation. Et en aidant les autres, je fini par m'améliorer aussi.

    Mais à la base, je sais faire des traces, évaluer le contenu des variable et vérifier si les boucles fonctionnes. Et quand je vois une erreur, je retourne sur le forum voir ce que j'ai mal compris.

    Donc on résume. Est-ce que le premier IF fonctionne, que contienne les variable tolérance et valeur, et ensuite, est-ce que le deuxième IF fonctionne pour changer la couleur. La seule façon de le savoir c'est d'exécuté le code pas à pas, et quand il n'agit pas tel que voulu, il faut analyser la ligne qui cause problème.
    0
  18. veve890 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
     
    bonjour
    j ai suivi vos conseille et le premier if fonctionne
    mais pour le deuxieme c est la le probleme il passe tout de suite du premier au end if en bas
    donc je v ais continuer a chercher
    je vous tiendrai au courant lundi de mes recherche
    cordialement
    0
  19. PlacageGranby Messages postés 402 Statut Membre 26
     
    Arrivé au deuxième IF,
    Placez votre souris au dessus de Target.Value, de Valeur et Tolerance.
    Vous devriez voir leur valeur après quelques secondes.

    Si chaque variable a le bon contenu, donc il faut regarder les opérateur < > les parenthèse, revalider la logique de notre question IF.

    Si les valeurs ne sont pas OK, alors ce n'est pas le IF lui même, mais les lignes précédentes qui assigne le contenu des variables.
    0
  20. veve890 Messages postés 18 Date d'inscription   Statut Membre Dernière intervention  
     
    bonjour
    voici mon code mais la je suis perdu

    Private Sub Worksheet_Change(ByVal Target As Range) 
    
    Dim Valeur As Double
    Dim Tolerance As Integer
    
    If (Target.Row = 4) And (Target.Column = 3) Then 
    
    quand ont arrive sur le 1 if sur les deux lignes de dessous valeur 0 tolerence 0 
    et range value j ais bien le nombre avec la tolerence en C3 exemple 12.0+/-0.05
    
    
    Valeur = Val(Left((Range("C3").Value),(Range("C3").Value, "+") - 1))
      Tolerance = Val(Right(Range("C3").Value, Len(Range("C3").Value) - InStr(Range("C3").Value, "-")))
    
    
    et sur le 2 eme if target value j ais bien la cote trouve 11.80 et valeur + tolerence 0
    
      If (Target.Value > (Valeur + Tolerance)) Or (Target.Value < (Valeur - Tolerance)) Then
    
    en dessous valeur 0 range C4 value 11.80 et font color 0
    Else
            Valeur = Range("C4").Value
            Range("C4").Font.Color = RGB (255, 0, 0)
    
    sur le 3 if target value 11.80 valeur + tolerence 0 sur les 2 fois
    
     If (Target.Value > (Valeur + Tolerance)) Or (Target.Value < (Valeur - Tolerance)) Then
           
    
    Else
    
    valeur 0 range C4 value 11.80 range fond color 0
    
    Valeur = Range("C4").Value
            Range("C4").Font.Color =0
    
        End If
    End If
    End If
    End Sub


    je click sur f8 et exactement la meme chose

    je reclick sur f8 et j arrive sur
    Tolerance = Val(Right(Range("C3").Value, Len(Range("C3").Value) - InStr(Range("C3").Value, "-")))

    et la sur toutes les valeur il y a 12 a la place de 0
    mais la tolérance toujours 0

    je re click sur f_ et la les tolérance marque 1 et les valeur toujours 12 et le reste idem au 1 if rien de change
    ensuite je fait f8 jusque end sub sa sarrette bien a chaque ligne et tous le reste ne bouge pas et le texte reste en noir

    j ais vraiment besoin d aide je suis perdu

    merci d avance
    0
  21. PlacageGranby Messages postés 402 Statut Membre 26
     
    Bonjour,

    Valeur, il semble manquer quelques petits morceau. Je vois le (Range("C3").Value, "+"), mais il manque INSTR
    Tolerance est déclaré comme un integer. Donc il peut avoir comme valeur un entier seulement, donc 0.05 devient zero.
    Dernière chose, j'ai enlever val(), car il semble que cela causait problème, mais pour la tolérance seulement.

    Donc, voici le code corrigé avec les petites corrections.

    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Valeur As Double
    Dim Tolerance As Double
    
    If (Target.Row = 4) And (Target.Column = 3) Then
        'Assigner Valeur et Tolerance
        Valeur = Left(Range("C3").Value, InStr(Range("C3").Value, "+") - 1)
        Tolerance = Right(Range("C3").Value, (Len(Range("C3").Value) - InStr(Range("C3").Value, "-")))
        
        'Compare le contenu de target (F41) avec la valeur et tolerance
        If (Target.Value > (Valeur + Tolerance)) Or (Target.Value < (Valeur - Tolerance)) Then
            'Si c'est à l'extérieur de l'intervale
            Range("C4").Font.Color = 255
        Else
            'sinon c'est à l'intérieur de l'intervale
            Range("C4").Font.Color = 0
        End If
    End If
    End Sub
    0
  • 1
  • 2