validation des données, erreur d'execution...

stormseye

XLDnaute Nouveau
Bonjour,

Après une après midi de recherche, j'abandonne ! La ligne surlignée contient une érreur. En effet, la validation des donnée fonctionne parfaitement si je la tape à la main, mais bloque par macro. Quelqu'un peut il m'épargner le suicide ???


Sub nommerchan()

Call Listecateg

Dim categ As String
Dim param As String
Dim listcateg As String
Dim feuil as string
Dim f1 as Sheet
Dim f2 as Sheet

feuil = ActiveSheet.Range("Q2").Value
Set f1 = Sheets(feuil)
Set f2 = ActiveSheet

'définition noms plages
categ = "categorie_" & f2.Range("Q2").Value
param = "parametre_" & f2.Range("Q2").Value
listcateg = "liste_categorie_" & f2.Range("Q2").Value

'RAZ plages précédentes
ActiveWorkbook.Names(listcateg).Delete
ActiveWorkbook.Names(categ).Delete
ActiveWorkbook.Names(param).Delete

'définie plage listecatégorie
ActiveWorkbook.Names.Add name:=listcateg, RefersTo:=Range("BN7", Range("BN7").End(xlDown))

'définie plage catégorie
f1.Activate
ActiveWorkbook.Names.Add name:=categ, RefersTo:=Range("A7", Range("A300").End(xlUp))

'définie plage parametre
ActiveWorkbook.Names.Add name:=param, RefersTo:=Range("B7", Range("B300").End(xlUp))


'redéfini menu déroulant données graphiques

f2.Activate
For Each cel In ActiveSheet.UsedRange

temp = 0

If cel.Interior.ColorIndex = 34 Then

With cel.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=" & listcateg
End With
End If

If cel.Interior.ColorIndex = 35 Then

If cel.Offset(0, -4).Value = "" Then
cel.Offset(0, -4).Value = Range("BN9").Value
temp = 1
End If

With cel.Validation
.Delete
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=Application.Offset(param, Application.Match(cel.Offset(0, -4).Value, categ, 0) - 1, 0, Application.CountIf(categ, cel.Offset(0, -4).Value))

'OU '"=DECALER(" & param & ";EQUIV(" & cel.Offset(0, -4).Address & ";" & categ & ";0)-1;0;NB.SI(" & categ & ";" & cel.Offset(0, -4).Address & "))"


If temp = 1 Then
cel.Offset(0, -4).Value = ""
End If

End If

Next

End Sub
 
Dernière édition:

JNP

XLDnaute Barbatruc
Re : validation des données, erreur d'execution...

Bonsoir :),
A tester, sans garantie, vu que pas de fichier de test :rolleyes:
Code:
.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:="=Offset(" & param & ",Match(" & cel.Offset(0, -4).adress & "," _
    & categ & ",0)-1,0,CountIf(" & categ & "," & cel.Offset(0, -4).Value & "))"
Bonne suite :cool:
 

Jam

XLDnaute Accro
Re : validation des données, erreur d'execution...

Salut Stormseye, JNP,

Suis pas sur de comprendre parfaitement ton code et ce que tu souhaites faire mais j'ai une (enfin plusieurs :rolleyes:) suggestion(s):
Apparemment tu veux donner un nom à une plage qui est ensuite utilisée comme plage de validation: Pourquoi ne pas créer une plage nommée variable et attribuer ce nom à la plage de validation. Tout ça pouvant se faire d'ailleurs sans macro.

Autres petites remarques:
Affecter Activesheet à une variable n'est pas une bonne chose car il peut y avoir des confusions. Il vaut mieux affecter une feuille précise...
De même, tu affectes une variable (en rouge), et dans les 3 lignes qui suivent tu n'utilises pas cette variable...je comprends pas bien l'intérêt :confused:. Et un petit With...End With sera aussi le bienvenue.
Set f2 = ActiveSheet

'définition noms plages
categ = "categorie_" & ActiveSheet.Range("Q2").Value
param = "parametre_" & ActiveSheet.Range("Q2").Value
listcateg = "liste_categorie_" & ActiveSheet.Range("Q2").Value


Autres détails que je ne saisi pas bien:
il y a un début de boucle (
For Each cel In ActiveSheet.UsedRange) et je ne vois pas le Next... :p?
il y a un IF sans Then (
If cel.Interior.ColorIndex = 35 Then) sauf s'il s'agit d'un problème de présentation, mais j'ai un doute...

La définition de tes variables sont incohérentes: tu définis 3 variables string en début de procédure et pas f1, f2, temp...pourquoi ? Active l'option Option Explicit dans le menu Outils>Options du VBE qui t'obligera à déclarer systématiquement toutes tes variables.

Bref, pas bien facile de comprendre ton code et ce que tu souhaites réellement faire. J'espère que mes modestes remarques pourront t'aider à rendre ton code plus clair et plus concis.

Bon courage,

 

stormseye

XLDnaute Nouveau
Re : validation des données, erreur d'execution...

Merci Jam, je fait les modifications. Mais mon problème n'est pas la clarté de mon code, plutôt le fonctionnement des lignes rouges en particulier. En effet le code que j'ai écrit n'est qu'un "extrait", et un prototype ...

As tu des propositions pour l’erreur engendrée par les lignes rouges ? Ou quelqu'un d'autre ^^

Merci pour votre aide en tout cas !
 
Dernière édition:

M.Pomdapli

XLDnaute Nouveau
Re : validation des données, erreur d'execution...

Bonjour,

J'ai exactement le même problème. Erreur d'automation, l'objet invoqué s'est déconnecté de ses clients.

Je pense avoir eu la même démarche initiale et mon code bloque à la même ligne.
Mis à part que ma syntaxe soit plus légère :

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=c


"c" étant une string correspondant au nom d'une liste de cellules existantes sur une autre feuille.

Avez vous réussi à résoudre le problème ? Pouvez vous m'aider ?
 

Jam

XLDnaute Accro
Re : validation des données, erreur d'execution...

Salut Pomdapli,

As-tu utilisé les possibilités de débogage avant que l'erreur n'intervienne. Par exemple s'assurer que le contenu de c est bien ce à quoi il doit correspondre ?
Pour l'erreur, c'est un peu léger pour en dire plus.

Bon courage
 

Jam

XLDnaute Accro
Re : validation des données, erreur d'execution...

Re,

Les erreurs Automation proviennent en générale de 2 causes:
1. Variable incorrectement déclarée
2. Objet utilisé n'existant pas ou de version différente sur des machines/environnement différent

Pour le cas 1, mon conseil donné à stormseye est d'autant plus important à respecter. La meilleure chose à faire est d'utiliser Option Explicit en en-tête de module pour obliger à la déclaration de variables. Ça permet d'éviter beaucoup d'erreur.

Pour le cas 2, c'est souvent beaucoup plus difficile à tracer.

Bon courage
 

M.Pomdapli

XLDnaute Nouveau
Re : validation des données, erreur d'execution...

Salut Jam,

Etant moi aussi partisan de l'outil Option Explicit, j'ai bien vérifié que toutes mes variables étaient correctement déclarées. J'ai aussi vérifié dans la fenêtre des variables que "c" stocke bien la bonne valeur et faisant défiler pas à pas les instructions du programme avec la touche 'F8'.
Voici un extrait du programme (l'instruction rebelle est en rouge) :

Worksheets("inventaire-devis").Activate
'mise à jour des champs de choix déroulant

For i = 1 To fin
For j = 1 To nc
c = "=" & Cells(4, j) & 1
With Cells(4 + i, j).validation
.Delete

.Add Type:=xlValidateList, AlertStyle:=xlValidAlertStop, Operator:= _
xlBetween, Formula1:=c

.IgnoreBlank = True
.InCellDropdown = True
.InputTitle = ""
.ErrorTitle = ""
.InputMessage = ""
.ErrorMessage = ""
.ShowInput = True
.ShowError = True
End With
Next j
Next i

End Sub


Je joint le classeur dans lequel je j'utilise la macro.

Je souhaite que tout les cellules du tableau de la feuille "inventaire_devis" possèdent des listes de choix déroulantes qui proposent un résumé de la base de données. Pour se faire il faut cliquer sur le bouton "réinitialiser les champs de choix déroulant" qui fait appel à 'Sub ETRderoule()' dans le module 1. C'est là que l'erreur d'automation fait sont entrée.

Ce qui est étrange, car j'utilise le même code dans la sub Filtration() affectée à une pivate sub evenementielle (worksheet_change) dont l'objet est d'actualiser les champs de la dernière ligne modifiée en fonction des entrées dans les cellules...
 

Pièces jointes

  • BDD exemple.xls
    130 KB · Affichages: 73
  • BDD exemple.xls
    130 KB · Affichages: 64
  • BDD exemple.xls
    130 KB · Affichages: 63

Tirou

XLDnaute Occasionnel
Re : validation des données, erreur d'execution...

Après quelques tests, j'obtiens une version non buggée; à voir si cela te va.

Pour la déclaration de c, utilises plutôt
Code:
c = Cells(4, j).Value & 1

Pour moi, c'est le "=" qui posait soucis... à voir si il est nécessaire pour toi.

J'avoue que par espion, j'avais bien une string avec ta déclaration, mais penses plutôt à prendre la valeur de la cellule et pas la cellule complète (qui, concaténée à un nombre donne un string o_O )
 
Dernière édition:

M.Pomdapli

XLDnaute Nouveau
Re : validation des données, erreur d'execution...

Tirou,

Merci à toi, tu a réussi à résoudre mon problème ! :)
Tu as mis le doit sur un point important : lorsqu'on veux affecter une chaîne de caractère à une variable string à partir d'une cellule, ça marche beaucoup mieux si on utilise '.Value '

ps : le signe "=" ne pose pas de problème chez moi.

Merci Beaucoup à tout ceux qui se sont penché sur l'erreur d'automation.


La perfection n'est jamais dans l'homme, mais elle est parfois dans ses intentions.
 

Jam

XLDnaute Accro
Re : validation des données, erreur d'execution...

Pompadli, Tirou,

J'ai pas l'erreur chez moi. Donc difficile de trouver d'où peut provenir le problème. Le conseil de Tirou est effectivement bon à appliquer.
Par contre je suis en train de regarder ton code et y'a des petites choses à redire ;)

D'ailleurs avant même de revenir dessus je te conseillerai de gérer tes noms d'une tout autre manière. Le mieux est d'utiliser une fonction de plage variable directement dans le nom (utilisation de DECALER et NBVAL). Comme cela plus besoin de gérer cela avec du code car le contenu du nom est toujours à jour !

@+
 

M.Pomdapli

XLDnaute Nouveau
Re : validation des données, erreur d'execution...

Minute papillon ! Je me suis un peu emballé...

Lorsque je lance la macro depuis l'onglet VBA (une foi les modifs de Tirou apportées) tout fonctionne parfaitement.
Mais lorsque je lance la macro à partir du bouton sur la feuille, l'erreur d'automation réapparaît... Zut de Zut !!!:confused:

Je ne comprend pas pourquoi, mais je pense que ça a un lien avec les multiples ouvertures de feuilles non ?

Jam,

Ta suggestion m’intéresse. Aurais tu un petit exemple sous la main pour m'illustrer ca ?
 

Discussions similaires

Statistiques des forums

Discussions
311 720
Messages
2 081 896
Membres
101 833
dernier inscrit
sandra25