Sélectionner une plage variable
Bonjour à tout ceux qui passe sur ce post,
je suis novice sur vba mais pas en programmation, donc j'arrive pas mal à me débrouiller avec les aides de ce site.
Cependant, j'ai un problème pour sélectionner une plage variable... Je m'explique :
Dim nb_lignes As Integer
nb_lignes = WorksheetFunction.CountA(Range("B26:B300")) 'Fonction NBVAL
Range("B23").Value = nb_lignes
je veux sélectionner les cases de B26 jusqu'à B26+nb_lignes
Je n'ai pas trouvé la solution à mon problème.
Quelqu'un peut m'aider ?
Merci d'avance
David
Bonsoir
Sans connaitre comment sont organisées tes données : Il peut y avoir beaucoup de solutions
Une idée
Sub test()
Dim nb_lignes As Integer
nb_lignes = WorksheetFunction.CountA(Range("B26:B300")) 'Fonction NBVAL
Range("B23").Value = nb_lignes
Range("B26:B" & 26 + Range("B23")).Select
End SubMerci pour ta réponse Banzai ! Je savais même pas qu'on pouvait écrire ca de cette façon !
Je vais essayer de l'appliquer.
En fait ce que je veux faire, c'est une validation de la case B10 (par exemple) avec une liste (menu déroulant) à partir des données dans B26:B300, Sauf que je ne veux pas qu'il y apparaisse des "blancs". Donc je fait un tri du tableau B26:B300 pour que toutes les données se retrouvent en haut du tableau, j'utilise la fonction NBVAL pour savoir combien de données il y a et je cherche à sélectionner de la case B26 à B26+le nombre de données présentes.
Est-ce que je pourrais mettre Range("B26:B" & 26 + Range("B23")) dans
Range("B10").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=plage"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Bon ça ne marche pas pour la validation... Quelqu'un connaitre peut-être une astuce ?
J'ai essayé avec ça :
Sub Création_menu_déroulant()
Dim nb_lignes As Integer
nb_lignes = WorksheetFunction.CountA(Range("B26:B300")) 'Fonction NBVAL
Range("B23").Value = nb_lignes
Dim plage As Range
Set plage = Range("B26:B" & 26 + Range("B23"))
Range("B11").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=plage"
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End Sub
Je suis sous office 97 pendant encore quelques semaines, bientôt sous office 2010, ça pourrait avoir un rapport ??
Bonjour
Quand tu marques du code dans tes messages utilises les balises Code (à gauche au dessus de la fenêtre de saisie)
Essaies
Sub Création_menu_déroulant()
Dim nb_lignes As Integer
nb_lignes = WorksheetFunction.CountA(Range("B26:B300")) 'Fonction NBVAL
Range("B23").Value = nb_lignes
Dim plage As Range
Set plage = Range("B26:B" & 26 + Range("B23"))
Range("B11").Select
With Selection.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=" & plage.Address
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End SubOu cette version simplifiée
Sub Création_menu_déroulant_Simplifiee()
With Range("B11").Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=" & Range("B26:B" & Range("B" & Rows.Count).End(xlUp).Row).Address
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
End SubC'est parfait ! Ca marche très bien.
J'ai pas encore essayé la deuxième solution, mais au moins la première marche
Merci