Run-time error 1004, Liste en cascades

Hellowa

XLDnaute Junior
Bonjour a toutes et à tous,
Pour fêter mes 20 ans, Excel a décidé d'enchainer les runtime error. Et il a gagné, je n'arrive pas a désactiver la derniere.
Quelqu'un voit-il l'erreur sur mon code?
Code:
'Run-time errore 1004'
Merci d'avance, a bientot!
Eloi.

Petite explication sur mon code: Il sert à créer un menu déroulant de liste.
J'expérimente une façon de faire des liste en cascade un peu périlleuse, mais ça avance!!
(Ou pas :D)

Code:
Sub Validation_menu2(lig As Double)
'
'Macro pour configurer la validation de cellules


'
Dim nom_Class As String
Dim liste2 As String

nom_Class = Sheets(1).Cells(lig, 2).Value

i = 0
j =1
k = 0


    While i < 1 Or j < 2000[COLOR="Red"]
        If Sheets("Bibliotheque").Cells(j, 1).Value = nom_Class Then[/COLOR]
            liste2 = Sheets("Bibliotheque").Cells(j, 2).Value
            i = 1
        End If
    k = j
'Je sauvegarde la valeur de j pour reprendre la recherche a partir d'ici
'J'étais obligé de faire la recherche de valeurs en 2 fois, pour uine question de mise en forme de la liste : liste= valeurA,valeurB,valeurC etc..
    Wend
i = 0
j = 0

    For j = k To Sheets("Bibliotheque").[A65536].End(xlUp).Row
        If Sheets("Bibliotheque").Cells(j, 1).Value = nom_Class Then
            liste2 = Sheets("Bibliotheque").Cells(j, 2).Value
        End If
    Next j
Cette partie est la fin du code, elle permet de rajouter le menu déroulant.
Code:
   Sheets(1).Cells(lig, 3).Select
    With Selection.Validation
        .Delete
        .Add Type:=xlValidateList, Operator:= _
        xlBetween, Formula1:=liste
        .IgnoreBlank = True
        .InCellDropdown = True
        .InputTitle = ""
        .ErrorTitle = ""
        .InputMessage = ""
        .ErrorMessage = ""
        .ShowInput = False
        .ShowError = False
    End With
End Sub
 

Hellowa

XLDnaute Junior
Re : Run-time error 1004, Liste en cascades

Ha mince... Ca me lance dans une boucle infinie. Voici le code qui appelle la macro du post précédent:
Code:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
'On fait la colonne "type"
If Not Intersect(Target, Range("C14:C65200")) Is Nothing Then
If Sheets(1).[B65536].End(xlUp).Row > 14 Then
'On cherche la derniere ligne
'On regarde
        Range("C" & Sheets(1).[B65536].End(xlUp).Row).Select
        Call Validation_menu2(Sheets(1).[B65536].End(xlUp).Row)
    Else

End If
End If
End Sub
:(
 

Hellowa

XLDnaute Junior
Re : Run-time error 1004, Liste en cascades

Ca avance, j'ai résolu mon problème.
Je met ici mon fichier, ça peut toujours servir à quelqu'un.
Pour info, il permet (pas encore) de faire des listes en cascade à 3 niveaux pour remplis des bons de commande!
(N'hésitez pas a donner votre avis, ça ne peut être que plus constructif pour moi!)
Merci, a bientot,
Eloi, qui entre aujourd'hui dans sa 3ème décade!
 

Pièces jointes

  • Hellowa_ListeCascades.zip
    24.8 KB · Affichages: 46

Hellowa

XLDnaute Junior
Re : Run-time error 1004, Liste en cascades

Bonjour à tous, le forum,
J'ai 2 soucis mineurs sur ma macro...
Les menu déroulants en cascade fonctionnent dans l'ensemble plutôt bien, d'ailleurs j'ai expérimenté une technique légerement différente de [HTML=http://boisgontierjacques.free.fr/pages_site/listes_cascade.htm]Jacques Boisgontier[/HTML].

Toutes les solutions fonctionnent SAUF lorsque je souhaite utiliser les menus: Atelier->Outils.

J'ai aussi un autre souci, lorsque je veux "Créer un Fax", la mise en page ne se fait pas correctement...

Merci d'avance à ceux qui jetterons un oeil à mon projet,
Au plaisir de vous lire,
Eloi.
 

Pièces jointes

  • Menu_Cascade_XLD_Hellowa.zip
    46 KB · Affichages: 31

maninweb

XLDnaute Nouveau
Re : Run-time error 1004, Liste en cascades

Bonjour Hellowa...

tout d'abord joyeux anniversaire :)

J'ai regarde sur ton code et je voudrais proposer quelques remarques
générales, qui ont cependant moins avoir avec ta dernière question.

L'utilisation de Sub auto_open() est moins recommandée, à partir de la
version 2000 de Excel, il est préférable d'utliser l'èvenement...
Code:
Private Sub Workbook_Open()

  MsgBox "Bonjour"
  
End Sub

Afin d'éviter des erreurs ou bien plutôt minimiser les possibilités d'erreurs,
il est préférable d'adresser les object complètement, example, au lieu de...
Code:
liste = Sheets(2).Cells(11, 1).Value
plutôt ceci...
Code:
liste = ThisWorkbook.Worksheets(2).Cells(11, 1).Value
ou bien cette forme...
Code:
With ThisWorkbook.Worksheets(2)

  liste = .Cells(11, 1).Value
  
End With
ThisWorkbook peut être utilisé quand le code est exécuté dans le même
classeur, au cas ou tu voudras adresser un autre classeur, tu peux utiliser...
Code:
With Application.Workbooks("NomDuClasseur").Worksheets(2)

  liste = .Cells(11, 1).Value
  
End With
Dans ton code, tu utilise de temps en temps les notations suivantes...
Code:
Sheets(2).[A65536].End(xlUp).Row
Selon mon avis personel, il est préférable d'utiliser...
Code:
ThisWorkbook.Sheets(2).Cells(65536,1).End(xlUp).Row
Dernière remarque, il est préférable d'utiliser
Code:
Option Explicit
au début de chaque module. Ainsi Excel vérifie avant exécution du code,
si toutes les variables ont bien été déclarées. Par exemple, il manque
la déclaration de i dans Sub Validation_menu1(). Au cas où des variables
ne sont pas déclarées Excel essaye de trouver le type automatiquement,
(Variant en général) cependant ceci ne marche pas dans tous les cas.

Salut
 

Discussions similaires