XL 2016 raccourcir code if

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Bonjour à toutes et à tous,

Réflexion du dimanche matin après petit dej - nettoyage frimousse -ptit coup de peigne et p'tit brossage de dent comme dirait notre cher Staple1600,

Je voudrait raccourcir une code il et je ne sais pas faire.

Voilà ce que ça donne actuellement :
VB:
If Cells(ActiveCell.Row, 7) = "" And Cells(ActiveCell.Row, 10) = "" And Cells(ActiveCell.Row, 12) = "" And Cells(ActiveCell.Row, 17) = "" And Cells(ActiveCell.Row, 18) = "" Cells(ActiveCell.Row, 22) = "" And Cells(ActiveCell.Row, 20) = "" And [T3] <> "OK" Then [T3] <> "OK" Then

Est-il possible de coder autrement pour regrouper les conditions ="" en une seule ?

Avec mes remerciements,
Je vous souhaite à toutes et à tous, un très beau dimanche,
Amicalement,
lionel,
 

Staple1600

XLDnaute Barbatruc
Re

Donc en guise d'apéro (oui je sais il est un peu tôt)
Un début de piste
VB:
Sub test()
Dim x&
x = 7 'numéro de ligne donc x=activecell.row dans ton exemple
If Application.CountA(Cells(x, 7), Cells(x, 10), Cells(x, 12), Cells(x, 17), Cells(x, 18), Cells(x, 20), Cells(x, 22)) = 0 Then
MsgBox "plage vide"
Else
MsgBox "plage avec au moins une cellule pleine"
End If
End Sub
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re-Bonjour JM, Eriiiic, le Forum

J'ai du mal interpréter vos codes LOL
Les 2 coincent

Je précise que je peux être sur n'importe quelle ligne d'où le "Cells(ActiveCell.Row, )"
le but du code :
si l'une des cellules col 7,10,12,17,18,20,22
(de la ligne active)
est différente de "" et la cellule T3 = 1 alors MsgBox "PAS OK"
sinon MsgBox "TOUT bon"
Je joins le fichier test.
Pourriez-vous m'aider encore une fois ?

Gros mercis :)
lionel,
 

Pièces jointes

  • raccourcir_code_if.xlsm
    19.5 KB · Affichages: 3

Staple1600

XLDnaute Barbatruc
Re

Au départ , il y avait OK en T3 et maintenant c'est 1...
Donc toujours dans le garage ;) (cf message#9)
VB:
Sub test3()
Dim p As Range
Set p = Range("G1,J1,L1,Q1,R1,T1,V1").Offset(ActiveCell.Row - 1)
If (Application.CountA(p) = 7) * ([T3] = 1) Then
MsgBox "PAS OK"
Else
MsgBox "Tout Bon"
End If
End Sub
PS:
Inutile de préciser (et d'appuyer le trait avec du gras)
Je précise que je peux être sur n'importe quelle ligne d'où le "Cells(ActiveCell.Row, )"
Puisqu'ActiveCell.Row est présent dans le code d'eriiiic et dans le mien!
:rolleyes: :eek:
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Merci JM pour m'avoir à nouveau répondu :)

Voilà le code tel que j'ai tenté de l'adapter :
VB:
Public Sub BoutonRechercheJM()
    Dim p As Range
    Set p = Range("Cells(ActiveCell.Row, 7),Cells(ActiveCell.Row, 10),Cells(ActiveCell.Row, 12),Cells(ActiveCell.Row, 17),Cells(ActiveCell.Row, 18),Cells(ActiveCell.Row, 20),Cells(ActiveCell.Row, 22").Offset(ActiveCell.Row - 1)
    If (Application.CountA(p) = 7) * ([T3] = 1) Then
    MsgBox "PAS OK"
    Else
    MsgBox "Tout Bon"
    End If
    End Sub

Mais ça beugue toujours :)
Je continue à chercher,
lionel,
 

Staple1600

XLDnaute Barbatruc
Re

C'est pénible des fois...
Fais ce simple test, en étant dans le cellule A10 par exemple
VB:
Sub test3()
Dim p As Range
Set p = Range("G1,J1,L1,Q1,R1,T1,V1").Offset(ActiveCell.Row - 1)
Msgbox p.Address
End Sub
On te propose une syntaxe que visiblement tu ne cherches pas à comprendre...
 

Usine à gaz

XLDnaute Barbatruc
Supporter XLD
Re JM merci pour ta patience :)

Ton code ci-dessous fonctionne très bien :

VB:
Public Sub BoutonRechercheJM()
    Dim p As Range
    Set p = Range("G1,J1,L1,Q1,R1,T1,V1").Offset(ActiveCell.Row - 1)
    If (Application.CountA(p) <> 7) * ([T3] = 1) Then
    MsgBox "PAS OK"
    Else
    MsgBox "Tout Bon"
    End If
    End Sub

Mais je peux être sur n'importe ligne active et c'est "la ligne active" qui doit être analysée
lionel,
 

Discussions similaires

Réponses
8
Affichages
501
Réponses
14
Affichages
1 K

Statistiques des forums

Discussions
312 321
Messages
2 087 246
Membres
103 498
dernier inscrit
FAHDE