Code pour respecter une tolerence +/-

Résolu
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

Résumé de la discussion

Un utilisateur souhaite vérifier, via VBA dans Excel, qu'une valeur saisie (par exemple 12.00+/-0.05) respecte une tolérance et colorier C4 en rouge si elle est hors plage. Des réponses privilégient l'extraction de la valeur et de la tolérance à partir du texte 12.00+/-0.05 dans une cellule, puis la comparaison via une macro Worksheet_Change et la coloration de C4. La solution proposée lit Valeur et Tolérance depuis C3, en séparant le nombre et le signe '+', puis compare Target.Value avec Valeur ± Tolérance et bascule la couleur de C4. D'autres solutions évoquées incluent l'utilisation de deux cellules distinctes pour valeur et tolérance ou des formules Excel sans VBA, alternative lorsque le VBA n'est pas souhaité.

Bobot (l’IA à votre service)
  1. bonjour
    je vous remercie pour le code mais sa ne marche toujours pas sa reste en noir
    la ne ne comprend pas
    et si je passer a 2 textbox a la place des cellules
    pouvez vous me trouver le code et me le detailler pas pas pour que je le comprene
    cordialement
    1. Si vous placez 2 textbox.sans mettre de symbole +/-
      Donc
      Valeur = Val(textbox2.text)
      Tolerance = Val(textbox3.text)

      Si je peux suggérer.
      Ce serait peut-etre mieux de ne pas utiliser de textbox.
      Les dernières version d'Excel permette un formatage conditionnel.

      Voir ce magnifique lien
      www.commentcamarche.net/contents/1962-excel-mise-en-forme-conditionnelle

      Souvent, il est mieux d'utiliser un onglet pour entrer les données qui n'est pas beau mais efficace.
      Et un autre onglet qui lui est formaté pour être beau.et qui va prendre ses valeurs dans l'onglet précédent.

      Exemple :
      https://www.cjoint.com/?DLbr1cXp2JD

      C'est sur que de ne pas utiliser de textbox va probablement demander une refonte complète du formulaire. La programmation c'est difficile, et vous aventurer sur du code VBA vous rend dépendante des forums et de l'aide des autres.
      Si votre projet n'est pas urgent, vous pouvez continuer a essayer d'apprendre la programmation, mais
    2. @PlacageGranbyje v ais essayer de chercher sans les textbox
      je pense que je ne suis pas loin de trouver reste le probleme
      que si le resultat n est pas dans la tolerence ne se mes pas en rouge
      au niveau du delai j aurai aime que se soit pres pour le debut janvier
      apres se probleme il me restera a trouver les code pour enregistrerpar a port a deux cellules
      je vous expliquerai sa plus en detaille
      bonne soiree
      cordialement
    3. Modérateur
      Bonjour,

      Lorsque vous placez du code sur notre forum, merci d'utiliser les balises code à votre disposition.
      Le mode d'emploi (au cas ou) est ICI.

      Cordialement,
      Pijaku
    4. @PlacageGranbybonsoir
      voila soit en enlevent else j arrive soit a mettre le resultat en rouge ou noir
      idem si je change de coter une > j ai essayer toutes les combinaison
      mais je ne trouve pas comment faire
      la je croit vraiment avoir besion de votre solution avec explication
      cordialement
    5. @PlacageGranbybonsoir
      voila j ais enfin trouve mais je suis retourne sur l idee du textbox
      et sa marche
      merci de votre aide
      cordialement
  2. 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
    1. 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
      1. 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.
        1. 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
          1. 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.
            1. 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
              1. 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)
                1. 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
                  1. 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.
                    1. 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
                      1. 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.
                        1. 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
                          1. 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
                            1. 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
                          2. 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.
                            1. 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
                              1. 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 ?
                                1. 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
                                  1. 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.
                                    • 1
                                    • 2