Faire exécute un code VBA si une donnée à changer de valeur dans une plage...

CyberNeo99

XLDnaute Occasionnel
Bonjour à tous,

J'ai un petit problème, puisque je ne suis pas programmeur et que j'ai cherché le code pour ainsi réussir ce que je veux et que ma recherche a été vaine et bien je m'en remets à vous. J'ai un code VBA que je voudrait faire exécuter si une donnée change de valeur dans une plage donnée.

Disons de R35 à R74

J'ai le code

If Application.Intersect(Target, Range("R35:R74"))

Par contre pour le reste je n'ai pas d'idée, j'ai essayé

If Application.Intersect(Target, Range("R35:R74")) Is Change Then

Aucun résultat

Si quelqu'un connaît le code cela serait très très apprécier.

Je vais continuer de chercher. Peut être que je trouverai car pour l'autre problème que j,avais j'ai trouvé il ne me reste que celui si car si ue valeur change dans la plage je veux qu'il réexécute le code VBA pour ainsi faire un genre de Refresh


Grand Merci à l'avance


Neo
 
Dernière édition:
C

Compte Supprimé 979

Guest
Re : Faire exécute un code VBA si une donnée à changer de valeur dans une plage...

Bonjour CyberNeo99, Julberto

@Julberto ce n'est pas "SelectionChange" mais "Change" tout court
J'ai un code VBA que je voudrait faire exécuter si une donnée change de valeur dans une plage donnée

Ce qui donne le code
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Not Intersect(Target, Range("R35:R74")) Is Nothing Then
    MsgBox "haha"
  End If
End Sub

A+
 

CyberNeo99

XLDnaute Occasionnel
Re : Faire exécute un code VBA si une donnée à changer de valeur dans une plage...

Bonjour à vous 2,


Merci pour votre code. J'avais essayé ça hier et ça ne fonctionnait pas je ne sais pour qu'elle raison. Voici mon code


Private Sub Worksheet_Change(ByVal Target As Range)

If Application.Intersect(Target, Range("G35:G74")) Is Nothing Then Exit Sub 'limite l'action a la plage G35:G74
If Selection.Cells.Count > 1 Then Exit Sub 'limite l'action a une seule cellule
If Target.Value = "" Then 'condition : si la cellule est effacée
Target.Offset(0, 14).Value = "" 'efface la cellule de la colonne D
Else 'sinon


For I = 35 To 74

On Error Resume Next

If Sheets("Détail projet").Cells(I, 18) < Application.WorksheetFunction.VLookup(Sheets("Détail projet").Cells(I, 7), Sheets("Prévisions listées").Range("A2:V101"), 9, False) - (0.1 * (Application.WorksheetFunction.VLookup(Sheets("Détail projet").Cells(I, 7), Sheets("Prévisions listées").Range("A2:V101"), 9, False))) Then

Sheets("Détail projet").Cells(I, 21) = Application.WorksheetFunction.VLookup(Sheets("Détail projet").Cells(I, 7), Sheets("Prévisions listées").Range("A2:V101"), 19, False)

Else

If Sheets("Détail projet").Cells(I, 18) > Application.WorksheetFunction.VLookup(Sheets("Détail projet").Cells(I, 7), Sheets("Prévisions listées").Range("A2:V101"), 9, False) + (0.1 * (Application.WorksheetFunction.VLookup(Sheets("Détail projet").Cells(I, 7), Sheets("Prévisions listées").Range("A2:V101"), 9, False))) Then

Sheets("Détail projet").Cells(I, 21) = Application.WorksheetFunction.VLookup(Sheets("Détail projet").Cells(I, 7), Sheets("Prévisions listées").Range("A2:V101"), 20, False)

Else

Sheets("Détail projet").Cells(I, 21) = Application.WorksheetFunction.VLookup(Sheets("Détail projet").Cells(I, 7), Sheets("Prévisions listées").Range("A2:V101"), 18, False)

End If

End If

Next


End If

End sub



Le code qui se trouve n rouge c'est lui que je veux qu'il exécute lorsqu'une valeur change dans la plage R35 à R74.

J'ai mis le fameux

If Not Intersect(Target, Range("R35:R74")) Is Nothing Then

Peut être que je ne le mets pas au bon endroit ou encore que j'écris mal la séquence du code et ainsi il ne s'exécute pas. Je le mets entre le "End sub" et le "End if" suivi du code en rouge et j'ai beau changer une valeur dans la plage R35 à R74 et il ne refait pas le calcul du code pour ainis changer la valeur du code en rouge....

Si vous avez des questions ne vous gêné pas. Peut être que je ne suis pas assez clair ou encore quelque chose m'échappe...


Grand Merci à l'avance


Neo
 
C

Compte Supprimé 979

Guest
Re : Faire exécute un code VBA si une donnée à changer de valeur dans une plage...

Salut,

Ton code me semble correcte ;)
As-tu mis ton code au bon endroit, a savoir, dans la feuille ou tu fais tes modifications

Sinon, si possible, joinds nous ton fichier

A+
 

CyberNeo99

XLDnaute Occasionnel
Re : Faire exécute un code VBA si une donnée à changer de valeur dans une plage...

Bonjour BrunoM45,


Oui absolument je l'ai mis dans la feuille où je veux qu'il s'exécute.

Si je change la valeur dans la colonne G le code s'exécute et change la valeur de la colonne où il doit mettre une valeur via le VLookup. Si j'efface le contenue de la cellule de la colonne G alors il efface le contenue de la colonnne où il doit mettre la valeur du VLookup.

Ce que je ne comprend pas il ne veut pas exécuter le code si je mets

If Not Intersect(Target, Range("R35:R74")) Is Nothing Then

Et le code en rouge pour que si je change une valeur dans la plage R35 à R74 et bien il puisse refaire le calcul de la formule VLookup.


Si tu trouves quelque chose de mon côté je continue de chercher le pourquoi ou encore coment écrire le code car avec ce que vous m'avez dit ça doit être le code il suffit de trouver comment écrire la séquence pour qu'il exécute le code....


je viens de voir que j'ai une problématique du genre si une cellule de la colonne R est vide je veux que la cellule de la colonne U de la même ligne soit vide. En fait c'est comme le test qui se fait au début avec la colonne G. Je ne sais où l'intégré ce type de code pour la colonne R. J'ai essayé mais je n'arrive à faire ce que je veux....



Grand Merci à l'avance



Neo
 
Dernière édition:

CyberNeo99

XLDnaute Occasionnel
Re : Faire exécute un code VBA si une donnée à changer de valeur dans une plage...

Bonjour,

Je joint un exemple. J'arrive au résultat que je veux mais il me reste la partie que je veux que si la quantité en colonne B change la colonne D doit changer de valeur. Si la colonne B, la quantité est vide en colonne D la cellule doit être vide aussi....


Grand Merci à l'avance


Neo
 

Pièces jointes

  • Insertion de formule dans une cellule si autre cellule non vide par code VBA v4.xls
    31.5 KB · Affichages: 121
  • Insertion de formule dans une cellule si autre cellule non vide par code VBA v4.xls
    31.5 KB · Affichages: 120
  • Insertion de formule dans une cellule si autre cellule non vide par code VBA v4.xls
    31.5 KB · Affichages: 136

CyberNeo99

XLDnaute Occasionnel
Re : Faire exécute un code VBA si une donnée à changer de valeur dans une plage...

Bonjour à tous,


J'ai trouvé la solution à ma problématique. Je joint le fichier.



Private Sub Worksheet_Change(ByVal Target As Range)



If Not Application.Intersect(Target, Range("B2:B10")) Is Nothing Then

If Selection.Cells.Count > 1 Then Exit Sub 'limite l'action a une seule cellule
If Target.Value = "" Then 'condition : si la cellule est effacée
Target.Offset(0, 2).Value = "" 'efface la cellule de la colonne D
Else 'sinon



For I = 2 To 10



On Error Resume Next

If Sheets("Feuil1").Cells(I, 2) < Application.WorksheetFunction.VLookup(Sheets("Feuil1").Cells(I, 1), Sheets("Tableau").Range("A2:G11"), 4, False) - (0.1 * (Application.WorksheetFunction.VLookup(Sheets("Feuil1").Cells(I, 1), Sheets("Tableau").Range("A2:G11"), 4, False))) Then

Sheets("Feuil1").Cells(I, 4) = Application.WorksheetFunction.VLookup(Sheets("Feuil1").Cells(I, 1), Sheets("Tableau").Range("A2:G11"), 6, False)

Else

If Sheets("Feuil1").Cells(I, 2) > Application.WorksheetFunction.VLookup(Sheets("Feuil1").Cells(I, 1), Sheets("Tableau").Range("A2:G11"), 4, False) + (0.1 * (Application.WorksheetFunction.VLookup(Sheets("Feuil1").Cells(I, 1), Sheets("Tableau").Range("A2:G11"), 4, False))) Then

Sheets("Feuil1").Cells(I, 4) = Application.WorksheetFunction.VLookup(Sheets("Feuil1").Cells(I, 1), Sheets("Tableau").Range("A2:G11"), 7, False)

Else

Sheets("Feuil1").Cells(I, 4) = Application.WorksheetFunction.VLookup(Sheets("Feuil1").Cells(I, 1), Sheets("Tableau").Range("A2:G11"), 5, False)

End If

End If

Next

End If


End If






If Application.Intersect(Target, Range("A2:A10")) Is Nothing Then Exit Sub 'limite l'action a la plage A2:A10
If Selection.Cells.Count > 1 Then Exit Sub 'limite l'action a une seule cellule
If Target.Value = "" Then 'condition : si la cellule est effacée
Target.Offset(0, 3).Value = "" 'efface la cellule de la colonne D
Else 'sinon



For I = 2 To 10



On Error Resume Next

If Sheets("Feuil1").Cells(I, 2) < Application.WorksheetFunction.VLookup(Sheets("Feuil1").Cells(I, 1), Sheets("Tableau").Range("A2:G11"), 4, False) - (0.1 * (Application.WorksheetFunction.VLookup(Sheets("Feuil1").Cells(I, 1), Sheets("Tableau").Range("A2:G11"), 4, False))) Then

Sheets("Feuil1").Cells(I, 4) = Application.WorksheetFunction.VLookup(Sheets("Feuil1").Cells(I, 1), Sheets("Tableau").Range("A2:G11"), 6, False)

Else

If Sheets("Feuil1").Cells(I, 2) > Application.WorksheetFunction.VLookup(Sheets("Feuil1").Cells(I, 1), Sheets("Tableau").Range("A2:G11"), 4, False) + (0.1 * (Application.WorksheetFunction.VLookup(Sheets("Feuil1").Cells(I, 1), Sheets("Tableau").Range("A2:G11"), 4, False))) Then

Sheets("Feuil1").Cells(I, 4) = Application.WorksheetFunction.VLookup(Sheets("Feuil1").Cells(I, 1), Sheets("Tableau").Range("A2:G11"), 7, False)

Else

Sheets("Feuil1").Cells(I, 4) = Application.WorksheetFunction.VLookup(Sheets("Feuil1").Cells(I, 1), Sheets("Tableau").Range("A2:G11"), 5, False)

End If

End If

Next

End If



End Sub


Le code en rouge est l'ajout que j'ai fait pour ainsi arriver à faire en colonne B ce qu'il se faisait en colonne A. Il suffisait de savoir où mettre le code car c'était le même principe....

Je suis plutôt content d'avoir trouver ça seul car je ne suis pas programmeur et tout le code je l'ai créer à taton en quelque sorte, j'avais une bonne idée mais comme je ne connais pas la synthaxe et le reste alros j'ai pris des bouts de code que j'ai mis ensemble et avec ma logique Math le tout c'est bien ficelé.

Je joint le fichier si cela peut aider quelqu'un qui veut arriver à faire quelque chose de semblable...


Merci encore


Neo
 

Pièces jointes

  • Insertion de formule dans une cellule si autre cellule non vide par code VBA v5.xls
    35.5 KB · Affichages: 134
  • Insertion de formule dans une cellule si autre cellule non vide par code VBA v5.xls
    35.5 KB · Affichages: 116
  • Insertion de formule dans une cellule si autre cellule non vide par code VBA v5.xls
    35.5 KB · Affichages: 146

CyberNeo99

XLDnaute Occasionnel
Re : Faire exécute un code VBA si une donnée à changer de valeur dans une plage...

Bonjour,

C'est encore moi. Cette fois tout marche dans mon code mais j'aimerais pouvoir faire exécuter ce code à la fermeture du fichier lors de sa sauvegarde car il reste toujours la possibilité qu'une personne change la valeur que le VLookup va placer dans la cellule de la colonne D et je voudrais qu'il puisse refaire le calcul pour que la bonne valeur soit palcer dans cette cellule. La façon que je vois est lors de la sauvegarde du fichier en mettant dans ThisWorkBook avec BeforeClose il suffirati de mettre le code sauf que je vois un autre problème si je mets le code

If Not Application.Intersect(Target, Range("B2:B10")) Is Nothing Then


il n'identifie pas quelle feuille....

Je me demandais si c'est possible d'appeler dans ThisWorkBook la macro du code Worksheet_Change ??? Si ou comment doit-on écrire le code....


Grand Merci à l'avance


Neo
 

Pierrot93

XLDnaute Barbatruc
Re : Faire exécute un code VBA si une donnée à changer de valeur dans une plage...

Bonjour,

Pas tout suivi, mais déjà si tu utilises la ligne suivant dans la procédure "BeforeClose" de "thisworkbook" ;

Code:
If Not Application.Intersect(Target, Range("B2:B10")) Is Nothing Then
il ne va pas connaitre l'argument "target", il est intégré à la procédure "Worksheet_Change"....
(identifie la cellule modifiée)....

bon après midi
@+
 

CyberNeo99

XLDnaute Occasionnel
Re : Faire exécute un code VBA si une donnée à changer de valeur dans une plage...

Bonjour Pierrot93,

Si j'ai bien compris ce que tu dis c'est ce que je pensais à dire qu'avec le code

If Not Application.Intersect(Target, Range("B2:B10")) Is Nothing Then

Il ne peut savoir qu'elle feuille, la cible car le code

Range("B2:B10")

ne comprend pas la feuille, quelle feuille.... J'ai essayé de mettre le nom de la façon suivante

If Not Application.Intersect(Target, Sheets("Feuil1").Range("B2:B10")) Is Nothing Then

Il ne reconnaît pas ce type de code.

Je ne sais comment écrire le code pour lui identifer la feuille cible.

L'autre façon serait d'appeler le code de Worksheet_Change d'une feuille en particulier comme on appele une macro d'un module du genre

Call le nom de la macro

Je ne sais aps si cela se fait....

Grand Merci


Neo
 

Pierrot93

XLDnaute Barbatruc
Re : Faire exécute un code VBA si une donnée à changer de valeur dans une plage...

Re,

A noter également que tu peux aussi utiliser l'événement "Private Sub Worksheet_Calculate()
" de la feuille en question, celui-ci se déclenchant après re-calcul de la feuille....
 

Pierrot93

XLDnaute Barbatruc
Re : Faire exécute un code VBA si une donnée à changer de valeur dans une plage...

Re,

pour appeler la procédure à partir d'un autre module :
Code:
Feuil1.Worksheet_Change Sheets("NomFeuille").Range("A1")

est passé en paramètre une cellule comme argument de la procédure "change"... Celle ne devant pas être déclarée comme "private", supprimer ce mot sur la déclaration dans le module....
 

PAPA WALKER

XLDnaute Junior
Re : Faire exécute un code VBA si une donnée à changer de valeur dans une plage...

Bonjour à tous,
Je cherche aussi à gérer cette fonction

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

Ce que je cherche à faire c'est de renseigner une cellule dans une colonne donnée lorsqu'une valeur ou plusieurs valeurs d'une plage sont modidiées

Exemple

J'ai une plage qui va de la colonne I à M (I2:M2) par exemple (la plage sera tjs sur les même colonnes et une seule ligne qui changera au fil des MAJ
Si je modifie une des valeurs ou plusieurs valeurs de cette plage, j'aimerais renseigner une cellule de la colonne A et B pour cette même ligne.
Peut-on faire cette Mise à jour une seule fois (par exemple au changement de ligne?)
Ou est-on condamné à le faire autant de fois que l'on fait de modifications sur la même ligne?

Je joins un fichier descriptif.

Merci d'avance de votre aide
 

Pièces jointes

  • changement val et plage.xlsx
    12 KB · Affichages: 138

Discussions similaires

Statistiques des forums

Discussions
312 329
Messages
2 087 334
Membres
103 519
dernier inscrit
Thomas_grc11