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 :

33base-aide.xlsm (79.41 Ko)

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 , j'essaie cela juste après manger !

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.

43exemple.xlsm (19.19 Ko)

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

Rechercher des sujets similaires à "activer macro contient texte"