Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
XL 2019Mettre un "X" automatiquement dans une cellule selon critères valeurs sur la même ligne
Boostez vos compétences Excel avec notre communauté !
Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force.
Apprenez, échangez, progressez – et tout ça gratuitement !
👉 Inscrivez-vous maintenant !
j'aurai besoin via (Macro) à ce que que dans une colonne s'affiche automatiquement "X" selon plusieurs critères des valeurs se trouvant sur la même ligne.
serait-il possible d'avoir la solution dans un module (à la suite d'un VBA déjà existant j'ai 30 feuilles identique) et non dans la feuille pour que cette action se lance en dernier
Dans ce cas, il faut utiliser la solution de @job75 qui parcourt toute la plage de donnée :
Code
VB:
Sub ContrôleSaisie(sh As Worksheet)
Dim tablo, i&, x
With sh.Range("A1", sh.UsedRange).Resize(, 11)
tablo = .Value 'matrice, plus rapide
For i = 1 To UBound(tablo)
x = tablo(i, 3)
tablo(i, 11) = IIf(tablo(i, 1) = "X" And tablo(i, 2) = "MAISON" And (x = "AA" Or x = "BB" Or x = "CC"), "X", "")
Next
Application.EnableEvents = False
.Columns(11) =...
Bonjour à toutes & à tous, bonjour @ced91300
Je re propose une solution par formule et non vba :
En K3
=SI(($A3="X")*($B3="MAISON")*(($C3="AA")+($C3="BB")+($C3="CC"));"X";"")
Je suis sur mon téléphone, je ne peux pas écrire de macro ...
Voir pièce jointe
À bientôt
Re,
J'ai récuoéré mon PC, voici une version via macro :
le code dans le code de la feuil1 :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim lgn As Long
If Target.Count = 1 And InStr("-1-2-3-11-", "-" & Target.Column & "-") <> 0 Then
Application.EnableEvents = False
lgn = Target.Row
If UCase(Me.Cells(lgn, 1)) = "X" And UCase(Me.Cells(lgn, 2)) = "MAISON" And InStr("-AA-BB-CC-", "-" & UCase(Me.Cells(lgn, 3)) & "-") <> 0 _
Then
Me.Cells(lgn, 11) = "X"
Else
Me.Cells(lgn, 11).ClearContents
End If
Application.EnableEvents = True
End If
End Sub
Une autre solution avec cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tablo, i&, x
With Range("A1", UsedRange).Resize(, 11)
tablo = .Value 'matrice, plus rapide
For i = 1 To UBound(tablo)
x = tablo(i, 3)
tablo(i, 11) = IIf(tablo(i, 1) = "X" And tablo(i, 2) = "MAISON" And (x = "AA" Or x = "BB" Or x = "CC"), "X", "")
Next
Application.EnableEvents = False
.Columns(11) = Application.Index(tablo, , 11)
Application.EnableEvents = True
End With
End Sub
Elle se déclenche quand on modifie ou valide une cellule quelconque.
Elle est très rapide car elle utilise un tableau VBA.
En revanche, je souhaite l'avoir à la suite d'un vba déjà existant dans module et non dans la feuille (j'ai 30 feuilles identique) et quand je lance le vba cela m'efface certains résultats donnés par ta solution.
Une autre solution avec cette macro dans le code de la feuille :
VB:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim tablo, i&, x
With Range("A1", UsedRange).Resize(, 11)
tablo = .Value 'matrice, plus rapide
For i = 1 To UBound(tablo)
x = tablo(i, 3)
tablo(i, 11) = IIf(tablo(i, 1) = "X" And tablo(i, 2) = "MAISON" And (x = "AA" Or x = "BB" Or x = "CC"), "X", "")
Next
Application.EnableEvents = False
.Columns(11) = Application.Index(tablo, , 11)
Application.EnableEvents = True
End With
End Sub
Elle se déclenche quand on modifie ou valide une cellule quelconque.
Elle est très rapide car elle utilise un tableau VBA.
serait-il possible d'avoir la solution dans un module (à la suite d'un VBA déjà existant j'ai 30 feuilles identique) et non dans la feuille pour que cette action se lance en dernier
serait-il possible d'avoir la solution dans un module (à la suite d'un VBA déjà existant j'ai 30 feuilles identique) et non dans la feuille pour que cette action se lance en dernier
Dans ce cas, il faut utiliser la solution de @job75 qui parcourt toute la plage de donnée :
Code
VB:
Sub ContrôleSaisie(sh As Worksheet)
Dim tablo, i&, x
With sh.Range("A1", sh.UsedRange).Resize(, 11)
tablo = .Value 'matrice, plus rapide
For i = 1 To UBound(tablo)
x = tablo(i, 3)
tablo(i, 11) = IIf(tablo(i, 1) = "X" And tablo(i, 2) = "MAISON" And (x = "AA" Or x = "BB" Or x = "CC"), "X", "")
Next
Application.EnableEvents = False
.Columns(11) = Application.Index(tablo, , 11)
Application.EnableEvents = True
End With
End Sub
Sub Appel()
Dim sh As Worksheet
For Each sh In ThisWorkbook.Worksheets
'Placer un test ici si toutes les feuilles ne sont pas a traiter par ex
If sh.Name Like "Tst_##" Then
ContrôleSaisie sh
Else
End If
Next
End Sub
- Navigue sans publicité - Accède à Cléa, notre assistante IA experte Excel... et pas que... - Profite de fonctionnalités exclusives Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel. Je deviens Supporter XLD