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 rapideFor i =1To 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
Une autre solution avec cette macro dans le code de la feuille :
VB:
PrivateSub Worksheet_Change(ByVal Target As Range)Dim tablo, i&, x
With Range("A1", UsedRange).Resize(,11)
tablo =.Value 'matrice, plus rapideFor i =1To 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 =TrueEndWithEndSub
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:
PrivateSub Worksheet_Change(ByVal Target As Range)Dim tablo, i&, x
With Range("A1", UsedRange).Resize(,11)
tablo =.Value 'matrice, plus rapideFor i =1To 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 =TrueEndWithEndSub
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 rapideFor i =1To 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 =TrueEndWithEndSubSub Appel()Dim sh As Worksheet
ForEach sh In ThisWorkbook.Worksheets
'Placer un test ici si toutes les feuilles ne sont pas a traiter par exIf sh.Name Like"Tst_##"Then
ContrôleSaisie sh
ElseEndIfNextEndSub
- 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