Activer macro si cellule contient un texte
Bonjour à tous,
J’aurai grand besoin d’aide suite au projet un peu ambitieux de ma part de vouloir créer un relevé de mesure (fichier REF aide) qui est renseigné à partir de certificats d’étalonnage et d’une base de données.
Je m’explique de manière plus précise :
Dans un premier temps on a une base de données (base aide) dans laquelle on doit renseigner les champs de saisi avec diverses informations (Numéro de chrono, client, référence de l’appareil etc…).
Le but est de créer un fichier Excel (relevé de mesure) sur lequel dès que l’on saisit un numéro de référence (chrono) cela affiche de manière automatique toutes les autres informations de la base de données dans ce relevé (jusqu’ici tout va bien, l’outil RECHERCHEV fait très bien l’affaire !).
D’autre part j’ai créé des macros qui recopie les valeurs d’incertitudes ( U dans les fichiers DATRON...) depuis des certificats d’étalonnage de divers appareils appelés DATRON00404, DATRON 00504…
Le problème que je rencontre est le suivant :
Parmi les informations que l’on recherche depuis la bases de données il y a « Etalon », je souhaiterai que si l’étalon qui s’affiche se trouve être « GENERATEUR MULTIFONCTIONS 001.12 », cela déclenche la macro DATRON00112.
Etant débutant sur les macros avec quelques recherches j’ai essayé la chose suivante sur la feuille CV :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A38")) Is Nothing Then
End If
If Range("A38").Value Like "*001.16*" Then DATRON00116
Exit Sub
If Range("A38").Value Like "*001.12*" Then DATRON00112
Exit Sub
If Range("A38").Value Like "*004.04*" Then DATRON00404
Exit Sub
If Range("A38").Value Like "*005.04*" Then DATRON00504
Exit Sub
End Sub
(Oui j’imagine que plus d’un connaisseur doit sursauter devant les erreurs…)
En partant de l’idée que si la cellule contient le terme « 001.12 » alors on déclenche la macro DATRON00112 (qui vient copier les valeurs d’incertitudes sur la feuille « relevé »)
J’ai utilisé l’outil Worksheet_Change qui fait que dès que je change n’importe quelle valeur une macro se déclenche, CEPENDANT je voulais que cela se produise UNIQUEMENT lorsqu’en A38 sur la feuille « CV » on trouve le morceau de texte (ex : 001.12) qui m’intéresse et que le changement d’une valeur quelconque n’active pas toutes les autres macros.
Je remercie d’avance ceux ou celles qui prêteront attention à ma requête, et reste disponible s’il y a besoin d’éclaircissement autour de ma demande.
Mes cinq fichiers sont les suivants :
Bonjour Moody, bonjour le forum,
Je n'ai ouvert aucun fichier donc pas testé la proposition ci-dessous mais, si j'ai bien compris tes explications, je verrais les choses comme ça :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("A38")) Is Nothing Then Exit Sub
If Target.Value Like "*001.16*" And Sheets("CV").Range("A38") Like "*001.16*" Then DATRON00116: Exit Sub
If Target.Value Like "*001.12*" And Sheets("CV").Range("A38") Like "*001.12*" Then DATRON00112: Exit Sub
If Target.Value Like "*004.04*" And Sheets("CV").Range("A38") Like "*004.04*" Then DATRON00404: Exit Sub
If Target.Value Like "*005.04*" And Sheets("CV").Range("A38") Like "*005.04*" Then DATRON00504: Exit Sub
End Sub
Merci pour ta réponse
Alors je viens d'essayer cela ne fonctionne pas,
J'ai copier/coller ce que tu m'as conseillé de faire dans VBA dans la parti "Feuil6 CV"et par exemple il se produit ceci :
- Je change le numéro CHRONO 16081650 =>16081651 les données change sur la feuille CV (client, date etc...)
- En A38 j'avais SIMULATEUR DE TENSION 001.16 => GENERATEUR MULTIFONCTIONS 001.12
- Sur la feuille "relevé", deux macros s'enclenchent (je voudrais uniquement que la macro DATRON00112 s'active)
- Ce n'est pas la macro qui correspond à "001.12" qui s'active mais la dernière que j'ai testé manuellement dans VBA
Cela outrepasse largement mes compétences à ce stade :/
Bonjour Moody, bonjour le forum,
Désolé mais aujourd'hui j'ai trop la flemme de me plonger dans ce genre de problèmes où il faut ouvrir plusieurs fichiers pour comprendre...
D'accord Thauthème et merci quand même à toi bonne fin de journée , en espérant que quelqu'un puisse m'aider.
Bonjour à tous;
J'ai crée un fichier très simplifié pour illustrer mon problème :
Sur le fichier on a un tableau contenant les numéros chrono et différents appareils étalons. On saisit un numéro chrono ce qui fait apparaître l'étalon correspondant au numéro choisit (par un RECHERCHEV).
Je souhaiterais qu'en fonction du résultat du RECHERCHEV on déclenche une macro attribuée à un étalon.
Bonjour Moody, bonjour le forum,
Peut-être avec deux macros événementielles distinctes, puisque F7 est le résultat d'une formule :
Private Sub Worksheet_Change(ByVal Target As Range)
If Not Application.Intersect(Target, Range("I3")) Is Nothing Then Exit Sub
If Target.Address = "$I$3" Then
If [I3] = "1" Then REMPLIR1
If [I3] = "2" Then REMPLIR2
If [I3] = "3" Then REMPLIR3
End Sub
Private Sub Worksheet_Calculate()
If Range("F7").Value Like "*001.16*" Then Module1.ETALON12
If Range("F7").Value Like "*001.12*" Then Module1.ETALON16
If Range("F7").Value = "kaz 004.04" Then Module1.ETALON3
If Range("F7").Value = "jefi4 005.04" Then Module1.ETALON4
End Sub
Sinon, il te faut absolument éviter les Select inutiles qui ne font que ralentir l'exécution du code !
Range("I5").Select
ActiveCell.FormulaR1C1 = "0"
s'écrit :
Range("I5").FormulaR1C1 = "0"
ou mieux encore :
Range("I5").Value = "0"
C'est une règle d'or...
Bonjour Thauthème et merci encore à toi,
Je suis actuellement entrain d'essayer la méthode que tu proposes (qui marche très bien sur mon fichier simplifié avec seulement un soucis "Bloc End If sans If") sur le fichier qui servira au final. Cela pourrait me prendre quelque temps, mais te tiens informé des avancées de mon projet.Tes conseils sont en tous cas très enrichissant sur l'utilisation de VBA.
Bonjour à tous,
J'ai rencontre un problème de type :
"Erreur d’exécution '-2147417848 (80010108)':
La méthode 'FormulaArray' de l'objet 'Range' a échoué
En effet, en saisissant mon numéro chrono, la cellule F7 affiche bien l'étalon correspondant..
à l'aide la macro suivante :
Private Sub Worksheet_Calculate()
If Range("F7").Value Like "*001.16*" Then Module1.ETALON16
If Range("F7").Value Like "*001.12*" Then Module1.ETALON12
Je veux déclencher une macro contenant le calcul d'une somme (impérativement) par la fonction FormulaArray (qui indépendamment de son déclenchement par le terme "001.16" fonctionne très bien) comme ceci :
Sub ETALON16()
'
' ETALON16 Macro
'
Range("I5").FormulaArray = _
"=Sum(A4,A7)" <= La macro affiche le message d'erreur à ce niveau en mode pas à pas détaillé
Range("I6").FormulaArray = _
"=Sum(A5,A8)"
End Sub
Je pense pour ma part qu'Excel se met à remplir la cellule I5 à l'infini car je ne sais pas comment traduire sur Visual Basic le fait que lorsque le terme 001.16 s'affiche dans la cellule F7, alors je veux que Excel déclenche une seule fois le calcul en FormulaArray.
J'aimerai connaitre votre avis, comment éviter ce problème en précisant que je dois impérativement utiliser "FormulaArray" pour par la suite utiliser des formules matricielles