XL 2010 Incompatibilité de type [RÉSOLU]

BUDGETS

XLDnaute Impliqué
Bonjour,

Qui va m'aider à résoudre l'erreur d'incompatibilité de type qui apparaît dans la macro Sub ModifierlisteProduits. Si je remplace shMRP par shSRP, la même erreur se reproduit.
D'avance merci.
 

Fichiers joints

zebanx

XLDnaute Accro
Bonjour Budgets, Ikito

Faire F8 pour savoir où l'erreur se produit reste utile.

Et Cint parait bien incompatible avec un left de 4 sur D6.
Numéro_création_produits = CInt(Left(Range("D6").Value, 4))

J'ai rajouté une ligne à supprimer pour comprendre que la ligne n'est pas forcément fausse, si on a un chiffre à proposer en D4.
(et je me suis arrêté là..)

++
 

Fichiers joints

BUDGETS

XLDnaute Impliqué
J'ai remplacé CInt par CStr et là je n'ai plus l'erreur mais je reste bloqué sur la feuille Accueil au lieu que le programme aille sur la feuille SRP ou MRP
 

zebanx

XLDnaute Accro
Re-

"Je reste bloqué" : sur le même sub ?

Tapez F8 sur ce sub (sur chaque ligne), vous constaterez que l'on va bien sur une feuille "Liste Dessert Midi Retraite" mais que le find (ligne 338 sur ce module) ne donne rien puisque DMR0 n'existe pas sur la ligne 1. Donc le code revient comme c'est prévu sur la sheets("acceuil").

Utilisez F8, placez la souris sur la variable pour voir la valeur prise (cf écran joint) avatn de continuer par F8 sur les étapes suivantes. Et trouver facilement d'où vient le problème dans l'exécution du code.
Je fais vraiment souvent cela (ou debug.print) pour voir si l'exécution passe les étapes prévues.

xl-ment

1035278
 
Dernière édition:

BUDGETS

XLDnaute Impliqué
On n'a pas le temps de voir que l'on va bien sur la feuille liste dessert midi retraite. Pourquoi DMR0 ? Faut-il créer une colonne Identifiant dans la feuille Liste dessert midi retraite et y faire référence dans la macro ModifierListeProduits ?
 
Dernière édition:

zebanx

XLDnaute Accro
Ce n'est que la valeur prise par la variable.... 4 lettres sur la cellule D6 dans la feuille "accueil".

Pourquoi avoir choisi cela ? Eh bien c'est quand même à vous de savoir quelle valeur devrait être identifiée à ce stade pour être trouvée par Find dans la feuille "Liste Dessert Midi Retraite"-) :rolleyes:

Si cette valeur, par la méthode "FIND" :
- doit correspondre à la colonne "C" dans "Liste Dessert Midi Retraite" (çàd "DMR") alors on changera le paramétrage
Numéro_création_produits = CStr(Left(Range("D6").Value, 3))
- doit correspondre à la colonne "D" dans "Liste Dessert Midi Retraite" (çàd "DMR01") alors on changera le paramétrage
Numéro_création_produits = CStr(Left(Range("D6").Value, 5))
Après, si c'est la colonne B, le paramétrage est correct sauf qu'avec un seul exemple DMR0 ne "matche" pas avec CC01 (B1 sur Liste Dessert Midi Retraite) donc le code renvoie vers la feuille "accueil" puisque le FIND n'est pas retrouvé.

++
 

laurent950

XLDnaute Impliqué
Bonsoir,
Pour la premiere ligne le numéro rechercher est : 0001
donc :
Mauvais
'Numéro_création_produits = CInt(Left(Range("D6").Value, 4))
Bon
(Car je pense qu'il faut récuperer le format aussi)
Numéro_création_produits = Format(CInt(Split(Range("D6").Value, "-")(1)), "0000")

Laurent
 
Dernière édition:

BUDGETS

XLDnaute Impliqué
Si j'ai bien compris, le chiffre correspond au nombre de caractères compris dans la colonne.
Numéro_création_produits = Format(CInt(Split(Range("D6").Value, "-")(1)), "0000")
J'ai recopié ta formule dans mon programme. Je clique dans la cellule C6, je choisis DMR, je clique dans la cellule D6, je choisi DMR01-01. Je clique sur Modifier Produit et la même chose de reproduit : retour sur la feuille accueil. Voir plus haut la réflexion de ZEBANK, feuille liste dessert midi retraie qui ne trouve pas donc retour sur la feuille Accueil.
 

laurent950

XLDnaute Impliqué
je choisi DMR01-01
DMR01-0001

donc dans la feuille : Liste dessert midi retraite (Colonne A:A) le numéro de : Numéro création dessert midi retraite est égale à 1

donc

si c'est le cas (Faux pour DMR01-0001 et donc vrais pour DMR01-1)

après correction dans la feuille Liste dessert midi retraite (Colonne A:A) le numéro de : Numéro création dessert midi retraite avec le bon format

Les formats doivent être équivalent ?
donc Numéro création dessert midi retraite est égale à 0001 (il faut un format personnalisé pour que cette recherche s'effectue) cf copie d'écran

laurent
 

Fichiers joints

Dernière édition:

BUDGETS

XLDnaute Impliqué
Oui, DMR01-0001 mais je reviens automatiquement sur la feuille Accueil sans voir qu'il y a eu une tentative d'accès à Liste dessert midi retraite. Je voudrais accéder à SRP avec "Modification d'un référentiel" en A1 ou à MRP avec "Modification d'un référentiel" en A1. Dans les deux cas, ce qui a été saisie devra apparaître. Après, il y aura un autre problème à résoudre.
 

BUDGETS

XLDnaute Impliqué
DMR01-0001

donc dans la feuille : Liste dessert midi retraite (Colonne A:A) le numéro de : Numéro création dessert midi retraite est égale à 1

donc

si c'est le cas (Faux pour DMR01-0001 et donc vrais pour DMR01-1)

après correction dans la feuille Liste dessert midi retraite (Colonne A:A) le numéro de : Numéro création dessert midi retraite avec le bon format

Les formats doivent être équivalent ?
donc Numéro création dessert midi retraite est égale à 0001 (il faut un format personnalisé pour que cette recherche s'effectue) cf copie d'écran

laurent
Le problème d'aller sur SRP ou MRP n'est toujours pas résolu. Problème résolu.
Maintenant, il y a deux autres problèmes à résoudre. On continue ou je crée un nouveau sujet ?
 
Dernière édition:

laurent950

XLDnaute Impliqué
Bonsoir Budget,
Je ne sais pas résoudre ce problème. juste qu'il y a surement une incompatibilité dans la recherche à cette endroit :

dans la colonne A:A vous chercher quoi ? (Ce qu'il y a de noté dans votre fichier c'est à dire 1)
dans cette variable :
Numéro_création_produits (Soit l’extraction de votre code)
Numéro_création_produits = CInt(Left(Range("D6").Value, 4))

donc si la recherche est 1 : dans la colonne A:A (Il doit bien être inscrit 1)
et dans cette variable inscrit aussi 1 donc Format(CInt(Split(Range("D6").Value, "-")(1)), "0")

vous avez noté cela : CInt(Left(Range("D6").Value, 4))
Nb : CInt c'est une fonction qui converti un nombre en integer

Pour en venir au fait : C(Range("D6").Value, 4) / vous faite une extraction de DMR0-0001
a gauche de DMR0-0001 et vous recupérer les 4 premiers caractéres soit DMR0
et Bien sur Cint la fonction qui convertie en chiffre integer DMR0 ceux qui est impossible.

Donc :
a partir de la droite et les 4 caractéres avec / Right(Range("D6").Value, 4) / c'est 0001
OU 1 Caractéres avec / Right(Range("D6").Value, 1) / c'est 1

Maintenant que c'est bon on peux convertir en integer avec cint(Right(Range("D6").Value, 1)) / Pour 1
ou cint(Right(Range("D6").Value, 4)) / Pour 0001

après si ont veux être sur a 100% ont inclus le format a la variable
Format(cint(Right(Range("D6").Value, 1)), "0") / Soit les résultat possible de 0 à 9
ou
Format(cint(Right(Range("D6").Value, 4)), "0000") / Soit les résultat possible de 0 à 9999

Fonction si dessous de recherche :

Set Rech_Liste_dessert_midi_retraite = Columns("A:A").Find(What:=Numéro_création_produits, After:=Range("A1"), LookIn:=xlValues, Lookat:=xlWhole, SearchOrder:=xlByColumns, SearchDirection:=xlNext, MatchCase:=False, SearchFormat:=False)

Peut être une réponse à vos questions

Laurent
 

BUDGETS

XLDnaute Impliqué
Le fichier modifié avec vos précédentes informations pour dessert midi retraite qui semble fonctionner. On arrive bien sur la feuille SRP ou MRP. Maintenant, il y a deux autres problèmes à résoudre : après une tentative de modification, sierreur(index...) disparaît tant dans la feuille SRP que dans la feuille MRP. Dans ces deux feuilles, il sera prévu l'impossibilité de modifier le contenu des cellules B3 à B7 incluses.
 

Fichiers joints

laurent950

XLDnaute Impliqué
Bonsoir Budget
J'ai juste vu ce point d'incompatibilité de type dans votre code. J'espère avoir répondu à votre interrogation sur ce point, en espèrent que vous avez peut-être appris quelques choses de nouveau ce soir et que cela vous a enrichie de connaissance. j'ai fait ce que j'ai pu. Pour le reste j'ai plus d'idée.
Cordialement
Laurent
 

Discussions similaires


Haut Bas