Erreur d'exécution 13
Bonjour à tous
Le virus de la macro m'a repris, cette fois pour la création d'une base de lancement des OF (Ordre de Fabrication) dans l'usine de médicaments dont je suis responsable.
Les données étant confidentielles (les formules des médicaments), vous comprendrez que je ne puisse pas joindre le fichier Excel sur lequel je coince.
Pour faire court:
- j'ai différents onglets qui portent chacun le nom d'un médicaments
- sur la feuille de chaque médicaments, il y a la nomenclature de ce médicaments, c'est à dire les différents composants ainsi que la quantité unitaire de chaque composant
- sur la feuille de chaque médicaments, l'opérateur est appelé à renseigner le nombre de lots (de 1 à 25 lots) qu'il veut fabriquer pour ce médicament
- dès que l'opérateur a saisi le nombre de lot, les quantités nécessaires pour chaque lot sont calculées automatiquement, avec des formules excel toutes bêtes, ainsi que la quantité totale de chaque composant nécessaire pour fabriquer ces N lots
- j'ai ensuite une feuille de calcul qui regroupe tous les calculs pour tous les médicaments
- de cette feuille de calcul, je dois générer un OF pour chaque lot de chaque médicament
- j'ai donc une feuille OF, sur laquelle l'opérateur (après avoir renseigné chaque feuille de chaque médicament) choisit dans une cellule grâce à une liste déroulante le nom du médicament, puis dans une autre cellule, toujours grâce à une liste déroulante, il choisit le N° du lot de ce médicament dont il souhaite éditer un OF (LOT 1, LOT 2 etc etc)
- la feuille OF va chercher ses informations de la feuille Calcul
- comme tous les médicaments n'ont pas le même nombre de composant, je ne veux pas qu'il y ait de lignes vides sur cette feuille OF, donc j'ai crée une macro qui masque toute ligne vide au fur et à mesure de l'import des données de la feuille calcul
- cette macro marche très bien du LOT 1 jusqu'au LOT 4 pour chaque médicament, mais à partir du LOT 5, elle bug et me sort l'erreur d'exécution 13 :
Private Sub Worksheet_Change(ByVal Target As Range)
ActiveSheet.Unprotect ("PRT2015")
If Not Intersect(Target, Range("G6")) Is Nothing Then
Rows("13:49").Select
Selection.EntireRow.Hidden = False
Dim cel As Range
For Each cel In Range("B13:B49")
If cel = "" Then cel.EntireRow.Hidden = True
Next
End If
'ActiveSheet.Protect ("PRT2015")
End Sub
C'est dans la cellule G6 que je choisis le N° de lot dont je veux éditer l'OF
Et c'est dans B13:B49 que doivent s'afficher les composants du médicaments ainsi que leurs quantités pour le lot en question
ça bug là ou c'est surligné : If cel=""
J'espère que j'ai été assez clair et assez précis pour avoir votre aide
Merci d'acance
Hello chokchman,
Passe le mode pas à pas.
Places un point d'arrêt à gauche de la ligne incriminée, puis lance la macro.
A chaque fois le code va s'arrêter sur cette ligne, et tu pourras le reprendre en appuyant sur la touche F5. Au moment où le lot 5 doit être traité (juste avant d'avoir le message d'erreur), ajoute un espion sur la variable "cell" et regarde ce qu'elle contient
Je te remercie pour la rapidité de ta réponse, néanmoins, je ne suis pas assez calé en vba pour comprendre toutes les subtilités, en particulier l'histoire de l'espion:
d3d9x a écrit :Au moment où le lot 5 doit être traité (juste avant d'avoir le message d'erreur), ajoute un espion sur la variable "cell" et regarde ce qu'elle contient
Je ne sais pas comment le faire
Bonjour,
Vu comme ça pas de raison que ça plante ici.
Il faudrait le fichier, tu peux y mettre des recettes de cuisine à la place.
Sinon essaie avec ça (les cellules doivent être réellement vides, pas de formule ="") :
Range("B13:B49").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = TrueEn plus ça évite la boucle.
eric
eriiic a écrit :Sinon essaie avec ça (les cellules doivent être réellement vides, pas de formule ="") :
Range("B13:B49").SpecialCells(xlCellTypeBlanks).EntireRow.Hidden = TrueEn plus ça évite la boucle.
eric
Merci eric, mais les cellules en question ne sont pas "vides", elles contiennent des formules de rechercheV pour appeler des données de la feuille calcul (code de chaque composant, nom de chaque composant, unité de chaque composant et quantité de chaque composant). Et ma macro sert à masquer toute ligne dans laquelle l'appel de données n'aboutit à rien
Bonjour
J'ai modifié tous les noms des médicaments ainsi que les composants, maintenant je peux vous joindre mon fichier.
Les feuilles de chaque médicament (X, Y et Z) sont déjà pré-remplies avec le nombre de lots que je veux produire pour chaque médicament.
Il n'y a plus qu'a aller sur la feuille OF, pour générer les ordres de fabrication pour chaque lot de chaque médicament
C'est en C5 que l'on choisit le médicament (par liste déroulante) et c'est en G6 que l'on choisit le numéro du lot pour ce médicament.
Je vous laisse donc essayer pour les 3 médicaments, et vous allez voir que pour le LOT 1, le LOT 2, le LOT 3 et le LOT 4, l'OF est parfaitement généré, à partir du LOT 5 (et pour n'importe quel médicament!), ça bug
Merci pour votre patience
Pour ma part, j'ai une erreur de calcul "2023"
Tu testes si le contenu de ta cellule (sa valeur) est vide ( = "")
Le problème, c'est que la formule que tu tapes dans ta cellule est fausse (en tout cas chez moi), donc la valeur de la cellule est inconnue.
C'est à dire: si ????? = "" alors action
Sauf que tu ne sais pas ce que ???? vaut.
Peut être une piste à creuser?
d3d9x a écrit :Pour ma part, j'ai une erreur de calcul "2023"
Tu testes si le contenu de ta cellule (sa valeur) est vide ( = "")
Le problème, c'est que la formule que tu tapes dans ta cellule est fausse (en tout cas chez moi), donc la valeur de la cellule est inconnue.
C'est à dire: si ????? = "" alors action
Sauf que tu ne sais pas ce que ???? vaut.
Peut être une piste à creuser?
Ta réponse est logique, mais alors comment expliquer que ça marche pour les lot 1, 2, 3 et 4, et que ça ne plante qu'à partir du 5.
C'est les mêmes formules qui sont appliquées dans les cellules pour tous les lots, alors si je suis ta logique, mes formules étant fausses, ça devrait buger dès le lot 1
Je n'ai pas regardé la formule, je dis juste que dans ton onglet "OF", lorsque tu sélectionnes un LOT inférieur à 5 tout se passe bien, ton tableau se génère correctement, et à partir du lot 5 le tableau se remplit d'erreurs ^^ D'où le problème d'exécution de la macro
EDIT :
Ton erreur est ici
(CONCATENER($C$5;$A14);Calcul!$A$2:$I$493;H$6;FAUX)(Cellule E14,E15 etc.... de la feuille "OF")
Cas où tu es au lot 5 -> colonne de recherche = J (colonne 10)
Tu recherches dans un tableau qui fait 9 colonnes (A->I = 9 colonnes) la valeur "X1" (par exemple), et tu demandes de sortir le résultat de la 10ème colonne (colonne J). Normal que ça ne fonctionne pas
Dans la cellule E14 de la feuille "OF", la formule à saisir est donc:
=SI(ESTNA(RECHERCHEV(CONCATENER($C$5;$A14);Calcul!$A$2:$AD$493;H$6;FAUX));"";RECHERCHEV(CONCATENER($C$5;$A14);Calcul!$A$2:$AD$493;H$6;FAUX))et est à propager
Un grand merci à toi d3d9x
C'est vrai que je m'étais un peu perdu en copiant mes formules d'un autre tableau qui fonctionnait parfaitement mais qui était limité à 3 lots, et j'ai oublié de changer les bornes des cellules
Allez maintenant je dois prendre mon courage à 2 main pour ajouter les 30 médicaments qui me restent