J'ai une boucle for next avec une instruction if. Si l'instruction "If" est vraie, quittez le if et le suivant pour. Voici le code: Ce que je veux, c'est que si Rng1 n'est pas dans Range1, passez au prochain rng1. Je semble être une solution simple, mais je ne peux pas comprendre. Merci d'avance.
Sub me_test()
Dim Range1 As Range
Dim Rng1 As Range
Set Range1 = Application.Selection
Set Range1 = Application.InputBox("Please Select Your Range :", xtitledID, Range1.Address, Type:=8)
For Each Rng1 In Range1
If Intersect(Rng1, Range("B7:B15")) Is Nothing Then
MsgBox "Not within the perscribed range." & vbCr & "Please click OK to continue."
Else
Rng1.Value = "Good"
End If
Next
MsgBox "All Done"
End Sub
4 Réponses :
Sub me_test()
Dim Range1 As Range
Dim Rng1 As Range
Set Range1 = Application.Selection
Set Range1 = Application.InputBox("Please Select Your Range :", xtitledID, _
Range1.Address, Type:=8)
Set Range1 = Application.Intersect(Range1, ActiveSheet.Range("B7:B15"))
If Range1 is nothing then
MsgBox "No valid cells selected!"
else
Range1.Value = "Good"
end if
End Sub
Une intersection valide entre deux plages ne garantit pas que l'une d'elles est complètement contenue dans l'autre
Je le sais, mais ce n'était pas une exigence dans la question du PO.
Je fais référence à son commentaire "ce que j'essaie de faire, c'est d'éliminer la possibilité pour l'utilisateur de sélectionner une cellule ou une plage de cellules en dehors de la plage définie, plage1"
Je suivais la logique générale du code publié par l'OP, et "Ce que je veux, c'est que si Rng1 n'est pas dans Range1, alors passe au prochain rng1" - il semblait que le but était de traiter uniquement les cellules dans la plage souhaitée. Le tout n'est pas clair cependant.
Cela devrait fonctionner. Cela fonctionne de mon côté
Sub me_test()
Dim Range1 As Range
Dim Rng1 As Range
Dim rngIntr As Range
Set Range1 = Application.Selection
Set Range1 = Application.InputBox("Please Select Your Range :", xtitledID, Range1.Address, Type:=8)
For Each Rng1 In Range1
Set rngIntr = Intersect(Rng1.Cells, Range("B7:B15").Cells)
If rngIntr Is Nothing Then
MsgBox "Not within the perscribed range." & vbCr & "Please click OK to continue."
Else
Rng1.Value = "Good"
End If
Set rngInr = Nothing
Next
Set Range1 = Nothing
Set Rng1 = Nothing
MsgBox "All Done"
End Sub
Que diriez-vous de ceci: affichez uniquement la boîte de réception "Pas dans ..." si aucune des cellules sélectionnées ne se trouve dans la plage souhaitée. Sinon, continuez à parcourir la sélection et écrivez Bon dans chaque cellule qui croise la plage souhaitée.
Sub me_test2()
Dim Range1 As Range
Dim Rng1 As Range
Set Range1 = Application.Selection
Set Range1 = Application.InputBox("Please Select Your Range :", xtitledID, Range1.Address, Type:=8)
If Intersect(Range("B7:B15"), Range1) Is Nothing Then
MsgBox "Not within the perscribed range." & vbCr & "Please click OK to continue."
Else
For Each Rng1 In Range1
If Not Intersect(Rng1, Range("B7:B15")) Is Nothing Then
Rng1.Value = "Good"
End If
Next
MsgBox "All Done"
End If
End Sub
Peut-être:
Sub me_test()
Dim rng1 As Range
Do
Set rng1 = Application.InputBox("Please Select Your Range :", xtitledID, Selection.Address, Type:=8)
Loop While rng1 Is Nothing
If Union(rng1, Range("B7:B15")).Address = Range("B7:B15").Address Then
rng1.Value = "Good"
Else
MsgBox "Not within the perscribed range." & vbCr & "Please click OK to continue."
End If
MsgBox "All Done"
End Sub
Vous pouvez également rechercher une sélection de plage utilisée valide:
Sub me_test()
Dim rng1 As Range
Set rng1 = Application.InputBox("Please Select Your Range :", xtitledID, Selection.Address, Type:=8)
If Union(rng1, Range("B7:B15")).Address = Range("B7:B15").Address Then
rng1.Value = "Good"
Else
MsgBox "Not within the perscribed range." & vbCr & "Please click OK to continue."
End If
MsgBox "All Done"
End Sub
Je suis confus quant à ce que vous essayez de faire - "Ce que je veux, c'est que si Rng1 n'est pas dans Range1 alors aller au prochain rng1." - votre code le fait déjà, non? Il semble que vous ayez besoin d'une
Sortie pourquelque part? De plus, pour votre santé et celle des autres, vous devriez vraiment utiliser plus de variables descriptives queRng1etRange1- parlez de confusion! :)Désolé, si rng1 n'est pas dans range1, passez au prochain rng1. ce que j'essaie de faire intempestivement, c'est d'éliminer la possibilité pour l'utilisateur de sélectionner une cellule ou une plage de cellules en dehors de la plage définie, range1.