Code pour respecter une tolerence +/-

Résolu/Fermé
veve890 Messages postés 26 Date d'inscription mardi 18 novembre 2014 Statut Membre Dernière intervention 17 janvier 2015 - 19 nov. 2014 à 18:10
veve890 Messages postés 26 Date d'inscription mardi 18 novembre 2014 Statut Membre Dernière intervention 17 janvier 2015 - 4 déc. 2014 à 19:47
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
A voir également:

21 réponses

PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 19/11/2014 à 19:22
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
veve890 Messages postés 26 Date d'inscription mardi 18 novembre 2014 Statut Membre Dernière intervention 17 janvier 2015
20 nov. 2014 à 17:32
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
20 nov. 2014 à 19:40
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
veve890 Messages postés 26 Date d'inscription mardi 18 novembre 2014 Statut Membre Dernière intervention 17 janvier 2015
20 nov. 2014 à 20:05
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 20/11/2014 à 21:24
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 20/11/2014 à 22:40
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
veve890 Messages postés 26 Date d'inscription mardi 18 novembre 2014 Statut Membre Dernière intervention 17 janvier 2015
21 nov. 2014 à 16:08
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 21/11/2014 à 16:57
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
veve890 Messages postés 26 Date d'inscription mardi 18 novembre 2014 Statut Membre Dernière intervention 17 janvier 2015
21 nov. 2014 à 19:14
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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 21/11/2014 à 19:35
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
veve890 Messages postés 26 Date d'inscription mardi 18 novembre 2014 Statut Membre Dernière intervention 17 janvier 2015
22 nov. 2014 à 15:20
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
24 nov. 2014 à 14:18
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
veve890 Messages postés 26 Date d'inscription mardi 18 novembre 2014 Statut Membre Dernière intervention 17 janvier 2015
24 nov. 2014 à 20:40
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
24 nov. 2014 à 21:54
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
veve890 Messages postés 26 Date d'inscription mardi 18 novembre 2014 Statut Membre Dernière intervention 17 janvier 2015
Modifié par pijaku le 2/12/2014 à 07:49
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 25/11/2014 à 14:24
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
veve890 Messages postés 26 Date d'inscription mardi 18 novembre 2014 Statut Membre Dernière intervention 17 janvier 2015
Modifié par pijaku le 2/12/2014 à 07:49
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 26/11/2014 à 14:13
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
veve890 Messages postés 26 Date d'inscription mardi 18 novembre 2014 Statut Membre Dernière intervention 17 janvier 2015
Modifié par pijaku le 2/12/2014 à 07:49
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 26/11/2014 à 21:28
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
veve890 Messages postés 26 Date d'inscription mardi 18 novembre 2014 Statut Membre Dernière intervention 17 janvier 2015
Modifié par pijaku le 2/12/2014 à 07:49
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
27 nov. 2014 à 14:14
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
veve890 Messages postés 26 Date d'inscription mardi 18 novembre 2014 Statut Membre Dernière intervention 17 janvier 2015
28 nov. 2014 à 10:48
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 28/11/2014 à 14:08
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
veve890 Messages postés 26 Date d'inscription mardi 18 novembre 2014 Statut Membre Dernière intervention 17 janvier 2015
Modifié par pijaku le 2/12/2014 à 07:50
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
PlacageGranby Messages postés 393 Date d'inscription mercredi 26 mars 2014 Statut Membre Dernière intervention 7 mars 2019 26
Modifié par PlacageGranby le 1/12/2014 à 14:47
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