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
Vidéos High-Tech et Jeu Vidéo
Téléchargements
Vos réponses
Gagnez chaque mois un abonnement Premium avec GNT : Inscrivez-vous !
Trier par : date / pertinence
Jacky
Le #26001662
Bonjour,
Quelqu'un aurait une idée!



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
JP
Le #26001722
Bonjour Jacky,

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
Jacky
Le #26001712
RE..
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"
Bonjour,
Quelqu'un aurait une idée!



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



JP
Le #26001772
Non, c'est la même chose.
Le message d'erreur est: Erreur 1004 définie par l'application ou l'objet .

JP
Jacky
Le #26001802
Re..
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
JP
Le #26001842
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 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
Jacky
Le #26002692
Tester comme ceci
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
JP
Le #26003062
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
Jacky
Le #26003412
Re..
<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
Le #26003582
Merci pour le coup de main et l'explication.

JP
Publicité
Poster une réponse
Anonyme