Conseil Worksheet_change

Rootdown

XLDnaute Junior
Bonjour,
j'épluche le forum depuis une demi heure et je ne comprend pas trop le fonctionnement de worksheet change, et de ce fait je ne suis pas vraiment que ce soit ce dont j'ai besoin.

Je souhaite que lorsque l'on modifie, la valeur du cellule de la colonne A ou de la colonne B, alors le calcul A*B soit réalisé et se mette en colonne c, sur la même ligne que la modification.

Pour l'instant j'ai pas réussi a faire un worksheet change qui fonctionne :rolleyes:

Suis je sur la bonne voie ou pas ? Merci de votre aide.
 

Macpoy

XLDnaute Impliqué
Re : Conseil Worksheet_change

bonsoir le forum,
bonsoir Rootdown?

un début de macro à mettre dans le code de la feuille :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Range("A2") <> "" Then
Range("C2") = Range("A2") * Range("B2")
End If
End Sub

à completer.
bonne soirée.
 

ROGER2327

XLDnaute Barbatruc
Re : Conseil Worksheet_change

Bonsoir à tous
Vous pouvez essayer ceci :
Code:
[COLOR="DarkSlateGray"][B]Private Sub Worksheet_Change(ByVal Target As Range)
Dim oCel As Range
   If Not Intersect(Target, Union(Columns(1), Columns(2))) Is Nothing Then
      Application.EnableEvents = False
      On Error Resume Next
      For Each oCel In Target
         If Not IsEmpty(Cells(oCel.Row, 1)) And Not IsEmpty(Cells(oCel.Row, 2)) Then
            Cells(oCel.Row, 3).Value = Cells(oCel.Row, 1).Value * Cells(oCel.Row, 2).Value
         Else
            Cells(oCel.Row, 3).Value = Empty
         End If
      Next oCel
      On Error GoTo 0
      Application.EnableEvents = True
   End If
End Sub[/B][/COLOR]
ROGER2327
#2940
 

Lii

XLDnaute Impliqué
Re : Conseil Worksheet_change

Bon soir,

puisque c'est fait ... (sans contrôle de validité)
Code:
Private Sub Worksheet_Change(ByVal Target As Range)
  If Target.Column = 1 Then
    Application.EnableEvents = False  'pour éviter un second appel lors de la mise à jour du produit
    Target.Offset(0, [B][COLOR="Red"]2[/COLOR][/B]) = Target * Target.Offset(0, 1) '[B][COLOR="red"]2[/COLOR][/B] colonnes à droite donc de A à C
    Application.EnableEvents = True
  End If
  If Target.Column = 2 Then
    Application.EnableEvents = False
    Target.Offset(0, [B][COLOR="blue"]1[/COLOR][/B]) = Target * Target.Offset(0, -1) '[B][COLOR="Blue"]1[/COLOR][/B] colonne à droite donc de B à C
    Application.EnableEvents = True
  End If
End Sub
 

Rootdown

XLDnaute Junior
Re : Conseil Worksheet_change

bonsoir le forum,
bonsoir Rootdown
un début de macro à mettre dans le code de la feuille
Merci Macpoy. Mais ca n'iras parce que j'ai déja des donénes dans les cellules.
Pourquoi avez vous choisi selectionchange plutot que change ?

Bonsoir à tous
Vous pouvez essayer ceci​

Merci Roger.
Je dois avouez que j'ai du mal avec les if not.
Sinon je pense que j'aurais le même problème qu'avec la proposition de Macpoy avec les isempty puisqu'il y a déja données.

Bon soir,
puisque c'est fait ... (sans contrôle de validité)
J'ai essayé et cela fonctionne parfaitement.
J'avais peur en cas d'insertion de ligne que tout se recalcule (ceci est intégré dans un tableau assez long) mais ca ne se ressent pas si c'est le cas.

Merci a tous pour votre aide ;)
 

Rootdown

XLDnaute Junior
Re : Conseil Worksheet_change

Oui c'est ce que je fait, mais ca plante souvent :D

J'ai une petite question sur ce code,
pourquoi lorsque je copie 2 valeurs dans les colonnes 1 ou 2 (concernées par le worksheet_change) est ce qu'il y a un plantage : incompatibilité de type.
Je pensais que pour les deux lignes (ou plus) le worksheet change s'appliquait, qu'il recalculait simultanément toute les lignes ou il y avait des données de copiées ?
:confused:
 

ROGER2327

XLDnaute Barbatruc
Re : Conseil Worksheet_change

Re...
Oui c'est ce que je fait, mais ca plante souvent :D

J'ai une petite question sur ce code,
pourquoi lorsque je copie 2 valeurs dans les colonnes 1 ou 2 (concernées par le worksheet_change) est ce qu'il y a un plantage : incompatibilité de type.
Je pensais que pour les deux lignes (ou plus) le worksheet change s'appliquait, qu'il recalculait simultanément toute les lignes ou il y avait des données de copiées ?
:confused:
J'ai longuement testé la procédure que je propose (comme toujours) sans la faire planter.
Dire "ça plante souvent" n'apporte aucun élément de réflexion. Il serait plus utile de dire sur quel type de données vous rencontrez un problème.
Déposez donc votre classeur pour qu'on puisse voir ce qui peut créer un problème. On y gagnera tous notre temps.​
ROGER2327
#2951
 

Rootdown

XLDnaute Junior
Re : Conseil Worksheet_change

Comme vous êtes aimable...

Ce que je voulais dire, c'est qu'en temps que débutant je teste les procédures
pour essayer de comprendre leurs fonctionnement, et ca arrive que ca plante.
Je ne parlais pas de ce que vous proposiez. On s'est mal compris.

Sinon, pour ma question précédente, si quelqu'un peut m'expliquez pourquoi ca plante si je veux par exemple copier la plage b2:b3 en b5:b6 ?
incompatibilité de type.
Je pensais que pour tout change dans les target définis worksheet_change s'appliquait, qu'il recalculait simultanément toute les lignes qui changeait.
Est ce plus clair ?
 

Pièces jointes

  • worksheetchange.zip
    6.2 KB · Affichages: 22

ROGER2327

XLDnaute Barbatruc
Re : Conseil Worksheet_change

Re...
(...)
Je ne parlais pas de ce que vous proposiez. On s'est mal compris.
(...)
Effectivement, nous nous sommes mal compris. J'ai cru que le message #7 répondait au message #6. En ouvrant votre classeur, je me suis rendu compte que la procédure renvoyant des erreurs pour incompatibilité de types n'est pas celle que je proposais.
Merci de m'excuser pour cette incompréhension.​
ROGER2327
#2953
 

Fo_rum

XLDnaute Accro
Re : Conseil Worksheet_change

Salut

tu as ce message "incompatibilté de type" quand une saisie n'est pas numérique !

Le code de Roger gère bien cela et même tout (notamment les copies ou déplacements de plage de multiples cellules qu'on oublie trop souvent).
 
Dernière édition:

ROGER2327

XLDnaute Barbatruc
Re : Conseil Worksheet_change

Re...
Salut

tu as ce message "incompatibilté de type" quand une saisie n'est pas numérique !

Le code de Roger gère bien cela et même tout (notamment les copies ou déplacements de plage de multiples cellules qu'on oublie trop souvent).
Merci d'avoir pris la peine de lire mon code. Mais je ne jurerais pas que j'ai prévu toutes les éventualités. J'ai effectivement imaginé qu'on puisse remplir plusieurs cellules en même temps par copier/coller (c'est d'ailleurs ainsi qu'on peut appliquer la procédure à des données existant avant sa mise en place), que certaines valeurs ne soient pas numériques, ou que d'autres soient supprimées. Mais il se peut, qu'en cherchant bien, la procédure soit prise en défaut : il faudrait être fort téméraire, ou imprudent, ou inconscient pour prétendre qu'on écrit du code parfait !
ROGER2327
#2956
 

Discussions similaires

Statistiques des forums

Discussions
312 492
Messages
2 088 930
Membres
103 984
dernier inscrit
maliko67