Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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

10 réponses
Avatar
JP
Bonjour =E0 tous,=20

J'utilise un code pour limiter les donn=E9es dans une liste de validation d=
e donn=E9es.
A l'origine, les tableaux de donn=E9es =E9taient sur la m=EAme 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 =3D "=3D" & P.Range(Cells(X, 1), Cells(P.Rows.Count, 1)).Address

Quelqu'un aurait une id=E9e!

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 =3D Sheets("Donnees")

Dim rg As Variant, c As Variant, X As Long, P As Variant, Adr As Variant
Set rg =3D 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 <=3D 0.5 Then
X =3D Application.Match(.Offset(, -1), F.Range("D_AM"),=
0)
Set P =3D F.Range("F_AM")
Adr =3D "=3D" & P.Range(Cells(X, 1), Cells(P.Rows.Count=
, 1)).Address
ElseIf .Offset(, -1).Value2 > 0.5 Then
X =3D Application.Match(.Offset(, -1), F.Range("D_PM"),=
0)
Set P =3D F.Range("F_PM")
Adr =3D "=3D" & 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:=3DxlValidateList, AlertStyle:=3DxlValidAlert=
Stop, _
Operator:=3DxlBetween, Formula1:=3DAdr
.IgnoreBlank =3D True
.InCellDropdown =3D True
.InputTitle =3D ""
.ErrorTitle =3D ""
.InputMessage =3D ""
.ErrorMessage =3D ""
.ShowInput =3D True
.ShowError =3D True
End With
ActiveSheet.Protect
End If
End With
Next
End If

End Sub

10 réponses

Avatar
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" a écrit dans le message de news:

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
Avatar
JP
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
Avatar
Jacky
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" a écrit dans le message de news: leaf2k$cdp$
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" a écrit dans le message de news:

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



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

JP
Avatar
Jacky
Re..
Si tu le souhaites fait un classeur avec les données concernées et envoi...

--
Salutations
JJ


"JP" a écrit dans le message de news:

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

JP
Avatar
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 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
Avatar
Jacky
Tester comme ceci
http://cjoint.com/?DBxmIW94Fg5
--
Salutations
JJ


"JP" a écrit dans le message de news:

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
Avatar
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
Avatar
Jacky
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" a écrit dans le message de news:

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
Avatar
JP
Merci pour le coup de main et l'explication.

JP