VBA : Inserer une formule recherchev dans une cellule
Résolu
rolynx
Messages postés
73
Date d'inscription
Statut
Membre
Dernière intervention
-
rolynx Messages postés 73 Date d'inscription Statut Membre Dernière intervention -
rolynx Messages postés 73 Date d'inscription Statut Membre Dernière intervention -
Bonjour à tous,
Je souhaite juste, en VBA, intégrer une formule dans une cellule.
Lorsque je suis dans une cellule sur la 1ere colonne :Si la celulle reste vide, je crée une nouvelle ligne en dessous lorsque je change de cellule
Jusque là, c'est ok.
Si je change la valeur de la cellule alors :
- J'insère dans la cellule se situant juste à droite sur la même ligne, ma fonction recherchev
- Je crée une ligne en dessous lorsque je change de cellule
Voici la formule à insérer (en mode excel classique) : RECHERCHEV("celluleactive";'Base article'!$A$3:$D$9;2;0)
cellule active reprenant bien sur les coordonnées de la cellule sur laquelle je me trouve.
Cette formule a une spécificité, il faut que la formule prenne en compte la cellule où je me trouve.
J'espère que vous avez saisi ma demande sinon je répondrai bien sur à vos interrogations.
Voici donc mon code qui ne fonctionne pas pour la 2eme partie et je n'arrive pas à m'en sortir.
Excusez moi pour certaines syntaxes qui pourraient vous faire mal aux yeux, je découvre et apprends sur le tas grâce à ceux que je peux trouver sur le net
Merci de votre aide !!!!
Je souhaite juste, en VBA, intégrer une formule dans une cellule.
Lorsque je suis dans une cellule sur la 1ere colonne :Si la celulle reste vide, je crée une nouvelle ligne en dessous lorsque je change de cellule
Jusque là, c'est ok.
Si je change la valeur de la cellule alors :
- J'insère dans la cellule se situant juste à droite sur la même ligne, ma fonction recherchev
- Je crée une ligne en dessous lorsque je change de cellule
Voici la formule à insérer (en mode excel classique) : RECHERCHEV("celluleactive";'Base article'!$A$3:$D$9;2;0)
cellule active reprenant bien sur les coordonnées de la cellule sur laquelle je me trouve.
Cette formule a une spécificité, il faut que la formule prenne en compte la cellule où je me trouve.
J'espère que vous avez saisi ma demande sinon je répondrai bien sur à vos interrogations.
Voici donc mon code qui ne fonctionne pas pour la 2eme partie et je n'arrive pas à m'en sortir.
Excusez moi pour certaines syntaxes qui pourraient vous faire mal aux yeux, je découvre et apprends sur le tas grâce à ceux que je peux trouver sur le net
Merci de votre aide !!!!
Private Sub Worksheet_Change(ByVal Target As Range)
Dim FORMULE As String
If Target.Column = 1 And Target.Value = "" Then
Application.EnableEvents = False
Cells(ActiveCell.Row, 1).EntireRow.Select
Selection.Insert Shift:=xlDown
Application.EnableEvents = True
Else
Application.EnableEvents = False
FORMULE = "=VLOOKUP(ActiveCell.Address,Base article!$A$3:$D$9,2,FALSE)"
Cells(Target.Row, 2).Formula = FORMULE
ActiveCell.EntireRow.Insert Shift:=xlDown
Application.EnableEvents = True
End If
End Sub
1 réponse
bonjour
Puisque tu découvres (bienvenue à bord du Titanic):
1/ évite au maximum les Select-Selection qui utilisent beaucoup de mémoire et ralentissent énormément les macros
2/ pourquoi écrire une formule qui va alourdir ton fichier alors que VBA peut te renvoyer la valeur cherchée
3/ n'oublie pas de traiter l'erreur possible (nom inconnu dans base article)
je te propose un code d'ici peu
Michel
Puisque tu découvres (bienvenue à bord du Titanic):
1/ évite au maximum les Select-Selection qui utilisent beaucoup de mémoire et ralentissent énormément les macros
2/ pourquoi écrire une formule qui va alourdir ton fichier alors que VBA peut te renvoyer la valeur cherchée
3/ n'oublie pas de traiter l'erreur possible (nom inconnu dans base article)
je te propose un code d'ici peu
Michel
et la maquette de travail
https://www.cjoint.com/?3Csj7E7uIt2
Nota: la macro SOS_events est très utile en cas de fausse manip !!! (ça, je sais faire)
Et en si peu de ligne !
Pour mon info car j'essaie de ne pas recopier bêtement et j'aime comprendre ce que j'écris.
2 petites choses :
Peux-tu m'expliquer ce que veut dire le target.count = 1
Peux tu rapidement m'expliquer la formule ".find" ? Je comprends bien la premiere valeur (target) qui correspond à la valeur recherchée mais pas le .Range("A2") et xlValues
Encore Merci !!!
Target.count compte le nombre de cellules sélectionnées
worksheet_change se déclenche sur le changement d' UNE SEULE Cellule
donc si pls celllulles---> Plantage de la macro
Find est un peu similaire à la formule EQUIV d'Excel
dans la colonne A cherche la valeur (xlvalues) de Target, en dessous de la cellule A2
là je demande la ligne mais je pourrai demander l'adresse,
ou créer la cellule
dim cellule as range
Set cellule=.Columns("A").Find(Target, .Range("A2"), xlValues)
tu trouveras de l'aide en ligne sur find à la rubrique "Range.find, méthode"
enfin pour potasser VBA
https://bidou.developpez.com/article/VBA/
Très complet, mais ca ne se lit pas comme un roman policier !