probleme sur une macro

probleme sur une macro - VB/VBA/VBS - Programmation

Marsh Posté le 03-12-2014 à 16:38:35    

voici mon probleme dans une feuil excel dans la cellule ("C3" ) j ais une cote tolerence exemple 12.00+/-0.10
dans la cellule ("C4" ) j ai une cote resultat donc je voudreis que si la cote dans C4 est dans la tolerence 11.90 a 12.10 la cote reste en noir
sinon si elle est hors tolerence exmple 11.85 ou 12.15 le resultat en rouge
voici mon code
 
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 As Double  
Dim Tolerance As Double  
bonjour  
voila sur une feuille excel dans la cellule ("C3" ) j aurais une cote tolerence exemple 12.00+/-0.10  
et dans la cellule (C"4" ) un resultat trouve mais je voudrais que le resultat si il est dans la tolerence exemple de 11.90 a 12.10 le resultat reste en noir  
sinon si il est hors tolerence exemple 11.85 ou 12.15 le resultat en rouge  
voici mon code mais cela ne marche pas  
 
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  
 
merci pour votre aide urgent

Reply

Marsh Posté le 03-12-2014 à 16:38:35   

Reply

Marsh Posté le 03-12-2014 à 23:48:31    

Pas besoin de macro, suffit d'utiliser la mise en forme conditionnelle. :??:

Reply

Marsh Posté le 04-12-2014 à 14:06:14    

:) je suis debutant j ais essaye la mise en forme conditionnelle mais avec la tolerence cela ne marche pas si vous avez le modele avec les explication pour bien comprendre comment sa fonctionne avec les tolerence
cordialement

Reply

Marsh Posté le 04-12-2014 à 19:04:45    

Disons qu'en voulant faire un all-in-one avec juste la colonne "côte tolérance" sans ajouter de colonne qui décompose cela ça complique un peu les choses mais ça reste largement faisable :
 
1- sélectionner la plage de données devant être mise en forme (C4)
2- onglet "accueil" --> "mise en forme conditionnelle" --> "Nouvelle règle..." --> "Utiliser une formule pour déterminer pour quelles cellules le format sera appliqué"
3- dans la barre de saisie de formule taper :
 

Code :
  1. =SI(ET(C4>=(CNUM(STXT(C3;1;CHERCHE("+/-";C3)-1))-CNUM(STXT(C3;CHERCHE("+/-";C3)+3;NBCAR(C3)-CHERCHE("+/-";C3)+3)));C4<=(CNUM(STXT(C3;1;CHERCHE("+/-";C3)-1))+CNUM(STXT(C3;CHERCHE("+/-";C3)+3;NBCAR(C3)*CHERCHE("+/-";C3)+3))));VRAI;FAUX)


 
4- choisir la mise en forme voulue pour le cas où la valeur rentre dans côte+/-tolérance
5- refaire de même pour le cas contraire
 
 
Que dit la formule?
Si C4 est supérieur ou égale à la côte moins la tolérance et inférieure ou égale à la côte plus la tolérance alors on renvoie VRAI sinon FAUX.
 
CHERCHE("+/-";C3) : renvoie la position du caractère à partir duquel est trouvé le motif "+/-"
NBCAR(C3) : renvoie le nombre de caractères total contenu dans C3
 
CNUM(STXT(C3;1;CHERCHE("+/-";C3)-1)) : récupère les caractères avant le "+/-" grâce aux positions (départ : premier caractère / fin : position du caractère où le motif "+/-" est trouvé moins 1) et les convertit en nombre c'est la côte.
CNUM(STXT(C3;CHERCHE("+/-";C3)+3;NBCAR(C3)-CHERCHE("+/-";C3)+3)) : récupère les caractères après le "+/-" grâce aux positions (départ :  position du caractère où le motif "+/-" est trouvé plus 3 / fin : nombre total de caractères moins position du caractère où le motif "+/-" est trouvé plus 3) et le convertit en nombre c'est la tolérance.
 
 
 
EDIT : Le point comme séparateur de décimale peut poser problème en fonction des paramètres régionaux choisis, il faut alors passer par l'outil de conversion des données pour préciser que dans ta cellule c'est le point qui sert de séparateur de décimales.


Message édité par MaybeEijOrNot le 04-12-2014 à 19:17:02
Reply

Marsh Posté le 05-12-2014 à 18:24:04    

bonjour
je vous remercie de votre aide
mais j ais trouve avec la macro et sa marche
merci beaucoup
j aurai un autre probleme a vous soumettre je vous l enverer  plus tard
cordialement ;)

Reply

Marsh Posté le 07-12-2014 à 16:56:05    

Bonjour  
voici mon gros problème
je voudrai enregistrer mon classeur
dans un dossier ou il y a des sous dossiers  
avec chacun une date 2015 , 2016 , 2017 , 2018 , 2019 , 2020 ect
et dans ses dossiers années il y a d autres sous dossiers
Apellés  , STD , 0 a 10000 , 10001 a 15000 , 15001 a 15500 , 15501 a 20000 , 20001 a 30000 , 30001 a 40000 , 40001 a 50000 , 50001 a 60000 , 60001 a 70000 , 70001 a 80000 , 80001 a 90000 , 90001 a 100000
donc dans chaque dossier dans la cellule C1 de la sheet menu il y a l année en cours qui  s’affichera automatiquement donc je voudrai déjà suivant la date dans C1 qu’ il  choisisse le bon dossier date
exemple si dans C1 il y a 2015 donc le dossier 2015 et sélectionne
 
2 eme parties ensuite dans B1 sheet menu se trouvera la référence du produit entrée de le début du formulaire
Exemple : IS 14054 MA
Et en A1 sheet   menu   la date du jour exemple : 07/01/2015
Je voudrai que mon dossier a l enregistrement prenne comme nom  IS 14054 MA-07/01/2015 se qui se trouve dans B1 et A1  
Et que comme la référence en B1 est 14054 qu il choisisse le sous dossier 10001 a 15000 et si il n existe pas de dossier déjà crée 14054 il le créer dossier 14054 ou si il existe déjà  qui  s enregistre dedans
Merci de votre aide
:)

Reply

Marsh Posté le 08-12-2014 à 00:53:19    

filesystemobject est ton ami pour ce genre de chose (dont tu aura les détails en ajoutant comme référence 'microsoft scripting runtime' si je ne me trompe pas)
Et tu ne saura pas créer de fichiers avec des "/" dans le nom ;)


Message édité par Arl Guhr le 08-12-2014 à 00:58:30

---------------
il s'appel le ronge me doute
Reply

Marsh Posté le 08-12-2014 à 09:35:23    

merci de votre aide je vais essayer d étudier filesystemobject
mais sa alaire d être  complique je vous tiendrai au courant  
merci cordialement :)

Reply

Marsh Posté le 17-12-2014 à 14:15:34    

bonjour
voici le code que j ais fais pour essayer d enregistrer mon fichier excel
au moment de l enregistrement le fichier doit prendre la date du jour+
se qui se trouve dans la cellule B1 de la feuille active
exemple ; 17-12-2014_IS 15210 MA.xltm
 
Sub trouverlechemindufichier() :bounce:  
On Error Resume Next
 
Dim Chemin As String, Fichier As String
Dim Nom As String
Dim Filename As String
 
   
    Nom = Day(Date) & "-" & Month(Date) & "-" & Year(Date) & "_" & ActiveWorkbook.Name
   
Chemin = ThisWorkbook.Path
Fichier = Chemin & "\" & Range("B1" ) & ".xltm"
ActiveWorkbook.SaveAs Filename:=Fichier
 ActiveWorkbook.SaveCopyAs ActiveWorkbook.Path & "\" & Nom
    rep = MsgBox("Votre base de données est sauvegardée sous le nom : " & Nom, vbYes + vbInformation, "Copie sauvegarde classeur" )
Filename = Fichier
 
   
    ActiveWorkbook.SaveAs Filename:= _
       "C:\Users\A03GEN-10097\fiches de controle\Filename.xltm", FileFormat:= _
        xlOpenXMLTemplateMacroEnabled, Password:="", WriteResPassword:="", _
        ReadOnlyRecommended:=False, CreateBackup:=False
         
     End Sub
 
mais le probleme N°1 c est qu il y a 3 fichiers qui s enregistre
le premier avec la date 17-12-2014. Filname
le deuxieme Filename
le troixieme IS 15210 MA
je n arrive pas a trouver je demande votre aide
je voudrai un seule fichier nome la date du jour + le resultat de B1 et .xltm pour prendre en compte les macro
merci

Reply

Marsh Posté le 17-12-2014 à 22:07:44    

Un truc dans le genre?  
 
chemin = thisworkbook.path & "\" & format("dd-mm-yyyy",date) & "_" & range("B1" ) & ".xlsm"
thisworkbook.saveas filename:=chemin
 
 
Sinon, quand tu crée des fichiers avec une date, je te conseille de plutôt utiliser "yyyy-mm-dd". Comme ça, les fichiers se classeront plus facilement par date.


---------------
il s'appel le ronge me doute
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed