Worksheet_change sur une colonne avec conditions
Bonjour à tous,
Voilà mon problème. Je souhaiterai effectuer un Worksheet_change sur ma Feuill1 du Fichier Joint.
L'idée est la suivante. Je veux que ma macro se lance dès qu'on a un changement dans la colonne E (plus précisement dans la colonne E de la ligne 3 à la fin). Ceci a été codé comme suit pour l'instant :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row >= 3 And Target.Row <= Range("H" & Rows.Count).End(xlUp).Row) And Target.Column = 5 Then
Niaaa niaaa niaaa
End If
End SubMais je désire ajouter comme condition que la macro se lance seulement si Cells(Target.Row,27).Value = "Aluminium" (ça j'arrive à le coder), ça donne ça :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Row >= 3 And Target.Row <= Range("H" & Rows.Count).End(xlUp).Row) And Target.Column = 5 _
And Cells(Target.Row,27).Value = "Aluminium" Then
Niaaa niaaa niaaa
End If
End SubEt maintenant ça se complique... J'aimerais que la macro se déclenche non seulement si on a un changement sur la colonne E entre les lignes 3 et la dernière ligne (colonne H utilisée car elle contient plein de A) ET [ si la valeur de la cellule à la colonne 27 de la même ligne est Aluminium OU si la valeur de la colonne 27 +13, 27+26, 27+39, etc.. est égale à Aluminium - en gros tous les 13 colonnes jusqu'à la colonne 6500 ]
Merci d'avance pour votre aide
Je pourrai toujours m'arrêter au deuxième morceau de code et balancer un If cells(Target.Row,27 + multiple de 13 - vous comprenez) = "Aluminium" Then Nianianinainian
Mais je préférerais qqch directement intégré dans le Target.
D'avance merci
Bonjour
Il me semblait d'avoir répondu à cette question (dans une vie antérieure peut-être
A essayer
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cel As Range
Dim Depart As String
Dim Ok As Boolean
If Target.Row >= 3 And Target.Row <= Range("H" & Rows.Count).End(xlUp).Row And Target.Column = 5 Then
With Rows(Target.Row)
Set Cel = .Find(what:="Aluminium", LookIn:=xlValues, lookat:=xlWhole)
If Not Cel Is Nothing Then
Depart = Cel.Address
Do
If (Cel.Column - 27) Mod 13 = 0 Then
Ok = True
Exit Do
End If
Set Cel = .FindNext(Cel)
Loop While Depart <> Cel.Address
End If
End With
If Ok = False Then Exit Sub
MsgBox "Traitement de la suite de la macro"
'
' Niaaa niaaa niaaa
'
End If
End SubBonjour Banzai64.
Merci beaucoup pour ta réponse.
Je ne comprends pas, le code bug en me sortant "ARgument nommé introuvable" au niveau du Set Cel = .Find(etc...)
Par ailleurs j'aimerais dans la macro Niaaaniaaaniaaa réutiliser la position d'Aluminium sur la ligne.
En gros si on a un changement sur la 3ème colonne et qu'on a de l'alu sur l'une des colonnes -27 modulo 13 = 0 alors on va travailler sur les colonnes juste avant l'occurence de l'Alu.. Donc il me faut la position de l'alu dans la ligne.
A noter que sur chaque ligne, il peut y avoir zéro, un, deux ou plusieurs Aluminium. Et qu'il me faudra la position de tous.
J'imagine que ma demande est un peu compliquée.
Merci beaucoup en tout cas.
Bonjour
En principe je teste (rapidement) ce que je fais, mais cette erreur je ne l'avais pas
Alors pas facile à trouver
Tu as fais un copier coller ?
Pour ta 2ème question c'est simple
A toi de faire des tests
Option Explicit
Private Sub Worksheet_Change(ByVal Target As Range)
Dim Cel As Range
Dim Depart As String
If Target.Row >= 3 And Target.Row <= Range("H" & Rows.Count).End(xlUp).Row And Target.Column = 5 Then
With Rows(Target.Row)
Set Cel = .Find(what:="Aluminium", LookIn:=xlValues, lookat:=xlWhole)
If Not Cel Is Nothing Then
Depart = Cel.Address
Do
If (Cel.Column - 27) Mod 13 = 0 Then
MsgBox "les conditions sont remplies"
'
' Niaaa niaaa niaaa
'
End If
Set Cel = .FindNext(Cel)
Loop While Depart <> Cel.Address
End If
End With
End If
End SubBon ben rien à dire c'est nickel chrome.
Merci merci beaucoup Banzai64.
Tu m'as bien dépanné !!!