LIste de donnees liée aux valeurs d'un tableau
Le
JP

Bonjour à tous,
J'utilise un code pour limiter les données dans une liste de validation d=
e données.
A l'origine, les tableaux de données étaient sur la même feuille. Pou=
r une raison d'organisation, je suis contraint de les mettre sur une autre =
feuille (feuille de "Donnees"). Depuis j'ai un plantage (erreur 1004) sur l=
a ligne suivante:
Adr = "=" & P.Range(Cells(X, 1), Cells(P.Rows.Count, 1)).Address
Quelqu'un aurait une idée!
Merci d'avance.
JP
Le code complet:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'**********************************************'
'* GERE LES LISTES DE VALIDATION DES HORAIRES *'
'**********************************************'
Dim F As Worksheet
Set F = Sheets("Donnees")
Dim rg As Variant, c As Variant, X As Long, P As Variant, Adr As Variant
Set rg = Intersect(Union(Range("L7:L107"), Range("O7:O107"), Range("R7:R1=
07")), Target)
If Not rg Is Nothing Then
For Each c In rg
With c
If .Offset(, -1) <> "" Then
If .Offset(, -1).Value2 <= 0.5 Then
X = Application.Match(.Offset(, -1), F.Range("D_AM"),=
0)
Set P = F.Range("F_AM")
Adr = "=" & P.Range(Cells(X, 1), Cells(P.Rows.Count=
, 1)).Address
ElseIf .Offset(, -1).Value2 > 0.5 Then
X = Application.Match(.Offset(, -1), F.Range("D_PM"),=
0)
Set P = F.Range("F_PM")
Adr = "=" & P.Range(Cells(X, 1), Cells(P.Rows.Count=
, 1)).Address
Else
.Validation.Delete
Exit Sub
End If
ActiveSheet.Unprotect
With .Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlert=
Stop, _
Operator:=xlBetween, Formula1:=Adr
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
ActiveSheet.Protect
End If
End With
Next
End If
End Sub
J'utilise un code pour limiter les données dans une liste de validation d=
e données.
A l'origine, les tableaux de données étaient sur la même feuille. Pou=
r une raison d'organisation, je suis contraint de les mettre sur une autre =
feuille (feuille de "Donnees"). Depuis j'ai un plantage (erreur 1004) sur l=
a ligne suivante:
Adr = "=" & P.Range(Cells(X, 1), Cells(P.Rows.Count, 1)).Address
Quelqu'un aurait une idée!
Merci d'avance.
JP
Le code complet:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'**********************************************'
'* GERE LES LISTES DE VALIDATION DES HORAIRES *'
'**********************************************'
Dim F As Worksheet
Set F = Sheets("Donnees")
Dim rg As Variant, c As Variant, X As Long, P As Variant, Adr As Variant
Set rg = Intersect(Union(Range("L7:L107"), Range("O7:O107"), Range("R7:R1=
07")), Target)
If Not rg Is Nothing Then
For Each c In rg
With c
If .Offset(, -1) <> "" Then
If .Offset(, -1).Value2 <= 0.5 Then
X = Application.Match(.Offset(, -1), F.Range("D_AM"),=
0)
Set P = F.Range("F_AM")
Adr = "=" & P.Range(Cells(X, 1), Cells(P.Rows.Count=
, 1)).Address
ElseIf .Offset(, -1).Value2 > 0.5 Then
X = Application.Match(.Offset(, -1), F.Range("D_PM"),=
0)
Set P = F.Range("F_PM")
Adr = "=" & P.Range(Cells(X, 1), Cells(P.Rows.Count=
, 1)).Address
Else
.Validation.Delete
Exit Sub
End If
ActiveSheet.Unprotect
With .Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlert=
Stop, _
Operator:=xlBetween, Formula1:=Adr
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
ActiveSheet.Protect
End If
End With
Next
End If
End Sub
Une liste de validation ne peux pas faire référence à des données sur une autre feuille.
Il faudra que tu nommes la plage et faire référence au nom que tu auras choisi.
--
Salutations
JJ
"JP"
Bonjour à tous,
J'utilise un code pour limiter les données dans une liste de validation de données.
A l'origine, les tableaux de données étaient sur la même feuille. Pour une raison d'organisation, je suis
contraint de les mettre sur une autre feuille (feuille de "Donnees"). Depuis j'ai un plantage (erreur 1004)
sur la ligne suivante:
Adr = "=" & P.Range(Cells(X, 1), Cells(P.Rows.Count, 1)).Address
Quelqu'un aurait une idée!
Merci d'avance.
JP
Le code complet:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'**********************************************'
'* GERE LES LISTES DE VALIDATION DES HORAIRES *'
'**********************************************'
Dim F As Worksheet
Set F = Sheets("Donnees")
Dim rg As Variant, c As Variant, X As Long, P As Variant, Adr As Variant
Set rg = Intersect(Union(Range("L7:L107"), Range("O7:O107"), Range("R7:R107")), Target)
If Not rg Is Nothing Then
For Each c In rg
With c
If .Offset(, -1) <> "" Then
If .Offset(, -1).Value2 <= 0.5 Then
X = Application.Match(.Offset(, -1), F.Range("D_AM"), 0)
Set P = F.Range("F_AM")
Adr = "=" & P.Range(Cells(X, 1), Cells(P.Rows.Count, 1)).Address
ElseIf .Offset(, -1).Value2 > 0.5 Then
X = Application.Match(.Offset(, -1), F.Range("D_PM"), 0)
Set P = F.Range("F_PM")
Adr = "=" & P.Range(Cells(X, 1), Cells(P.Rows.Count, 1)).Address
Else
.Validation.Delete
Exit Sub
End If
ActiveSheet.Unprotect
With .Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, _
Operator:=xlBetween, Formula1:r
.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
ActiveSheet.Protect
End If
End With
Next
End If
End Sub
C'est ce que j'ai fait me semble t-il.
D_AM; D_PM; F_AM et F_PM sont les plages où se trouvent les données. Ce sont des plages qui contiennent des horaires. Exemple D_AM 08:30 jusqu'à 12:00.
Je les ai mises dans une autre feuille, en l'occurrence, la feuille nommé e donnée.
C'est ce que tu me conseilles, ai-je bien compris?
JP
Pas vu ton code
Cela pourait ressembler à ceci (Non tester)
'---------------
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'**********************************************'
'* GERE LES LISTES DE VALIDATION DES HORAIRES *'
'**********************************************'
Dim F As Worksheet
Set F = Sheets("Donnees")
Dim rg As Variant, c As Variant, X As Long, P As Variant, Adr As Variant
Set rg = Intersect(Union(Range("L7:L107"), Range("O7:O107"), Range("R7:R107")), Target)
If Not rg Is Nothing Then
For Each c In rg
With c
If .Offset(, -1) <> "" Then
If .Offset(, -1).Value2 <= 0.5 Then
X = Application.Match(.Offset(, -1), F.Range("D_AM"), 0)
Set P = F.Range("F_AM")
Adr = "=" & P.Range(Cells(X, 1), Cells(P.Rows.Count, 1)).Address
ElseIf .Offset(, -1).Value2 > 0.5 Then
X = Application.Match(.Offset(, -1), F.Range("D_PM"), 0)
Set P = F.Range("F_PM")
'Adr = "=" & P.Range(Cells(X, 1), Cells(P.Rows.Count, 1)).Address
ActiveWorkbook.Names.Add Name:="Adr", RefersTo:="=" & P.Range(Cells(X, 1),
Cells(P.Rows.Count, 1)).Address
Else
.Validation.Delete
Exit Sub
End If
ActiveSheet.Unprotect
With .Validation
.Delete
.Add Type:=xlValidateList, Formula1:="r"
End With
ActiveSheet.Protect
End If
End With
Next
End If
'-----------------------
--
Salutations
JJ
"Jacky"
Le message d'erreur est: Erreur 1004 définie par l'application ou l'objet .
JP
Si tu le souhaites fait un classeur avec les données concernées et envoi...
--
Salutations
JJ
"JP"
Non, c'est la même chose.
Le message d'erreur est: Erreur 1004 définie par l'application ou l'objet.
JP
http://cjoint.com/?3BwsNLRYC9T
Le problème est dans l'onglet planning lorsque tu veux selectionner une d onnée heure dans une des cellules des colonnes L, O ou R.
J'ai remis la macro comme à l'origine quand les tableaux de données é taient dans le même onglet.
JP
http://cjoint.com/?DBxmIW94Fg5
--
Salutations
JJ
"JP"
J'ai fait le menage pour l'alléger au maximum.
http://cjoint.com/?3BwsNLRYC9T
Le problème est dans l'onglet planning lorsque tu veux selectionner une donnée heure dans une des cellules des
colonnes L, O ou R.
J'ai remis la macro comme à l'origine quand les tableaux de données étaient dans le même onglet.
JP
Je viens de l'intégrer au projet et bonne nouvelle c'est bon.
Puis-je te demander la différence qu'il y a entre:
Set P = Range("D_AM")
et
Set P = [F_AM]
Je me coucherai moins ignorant!
Merci
JP
<Set P = [D_AM]> et l'abréviation de <Set P = Evaluate("D_AM")>
Dans l'éditeur vba, un petit coup de F1 sur "Evaluate" donne pas mal d'explications.
--
Salutations
JJ
"JP"
Bonjour Jacky,
Je viens de l'intégrer au projet et bonne nouvelle c'est bon.
Puis-je te demander la différence qu'il y a entre:
Set P = Range("D_AM")
et
Set P = [F_AM]
Je me coucherai moins ignorant!
Merci
JP
JP