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 )
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
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
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!
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.
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...
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.