| ||||||||
Astucienne ![]() | Dans une feuille existante, dans la colonne i, j'avais des chiffres en format standard. 1, 5, 10,15 etc.. À la fin, lorsque j'avais fini d'entrer les données 1) je faisais un tri dans cette colonne, du chiffre le plus petit au chiffre le plus grand. 2) j'appliquais la macro suivante qui m'insérait un rang vierge entre chaque série de chiffres. Sub LigneVide() ' Insérer une ligne vierge entre les séries de liste Next Il faut maintenant que pour certain chiffre, je modifie en ajoutant à côté une lettre, ce qui donne par exemple 10A, 15, 15C. Évidemment, la macro ne fonctionne plus à cause de la lettre ajoutée. J'ai une « erreur d'exécution "13 " incompatibilité de type ». De quelle façon modifier la macro pour qu'elle s'adapte à cette nouvelle numérotation ? Je vous remercie de votre aide.
Modifié par Gabrilou le 16/05/2014 21:29 | |||||||
Publicité | ||||||||
Astucien ![]() | Bonjour, Vite lu : Est-ce qu'il ne faudrait pas modifier le type de données de la colonne ? Vous avez le code qui provoque cette erreur d'exécution ? C'est sur si vous avez : i=10 + "A" => type incompatible (du numérique avec du caractère il aime pas trop) Essayer avec cstr()
Modifié par Titus68 le 16/05/2014 21:57 | |||||||
Astucienne ![]() | Titus68 a écrit :
Le type de données était, à l'origine, numérique. Il me faut maintenant différencier en ajoutant une lettre. Le type d'erreur est : erreur d'exécution 13, incomptabilité de type, comme je l'indiquais dans mon message initial, ce que je comprends fort bien puisque ce n'est plus une valeur numérique seulement.
| |||||||
Astucien ![]() | Rebonjour Gabrilou, J'ai rajouté une solution dans mon précédent message. Le type d'erreur est : erreur d'exécution 13, incomptabilité de type, comme je l'indiquais dans mon message initial, ce que je comprends fort bien puisque ce n'est plus une valeur numérique seulement Par de soucis, il y a toujours un moyen pour contourner le problème (restons optimiste) Modifié par Titus68 le 16/05/2014 21:53 | |||||||
Astucienne ![]() | Titus68 La macro originale n'est pas de mon cru. C'est un astucien qui me l'avait faite, car moi, j'en suis bien incapable. Et c'est pourquoi je n'ai aucune idée de l'endroit où insérer les modif. que tu m'apportes. J'ai encore besoin de toi s.v.p. --- Next
| |||||||
Astucien ![]() | Je n'ai pas testé sous Excel mais çà doit coincer sur la ligne if cells(i,9 ... non ? Je verrai bien : If cstr(Cells(i, 9).Value) <> cstr(Cells(i - 1, 9).Value) Then _ Rows(i).Insert Shift:=xlDown qui doit vouloir dire : si la valeur de la cellule (i,9) est différente de la valeur de la cellule (i -1,9) (celle du dessus) alors on insère une ligne vide (Rows(i).Insert Shift:=xlDown). car cells(i,9).value (ex: 15) doit sans doute être numerique et on doit certainement comparer avec Cells(i - 1, 9).Value qui doit être en caractères (ex: 15A) à un moment donné (ou le contraire) et il plante avec type incompatible. Modifié par Titus68 le 16/05/2014 22:30 | |||||||
Astucienne ![]() | Merci pour ton effort que j'apprécie beaucoup. J'ai bien essayé de remplacer cette ligne : If Cells(i, 9).Value <> Cells(i - 1, 9).Value Then _ Rows(i).Insert Shift:=xlDown par la tienne : If cstr(Cells(i, 9).Value) <> cstr(Cells(i - 1, 9).Value) Then _Rows(i).Insert Shift:=xlDown, mais j'ai une erreur de syntaxe | |||||||
Astucien ![]() | Peux-tu essayer comme çà : Sub LigneVide() ' Insérer une ligne vierge entre les séries de liste Je viens de tester chez moi avec quelques valeurs et çà fonctionnait même sans le cstr().... Modifié par Titus68 le 16/05/2014 23:20 | |||||||
Astucienne ![]() | Yes ! Merci Bonne nuit. J'attends demain pour mettre en résolu | |||||||
Publicité | ||||||||
Astucien ![]() | Bon c'est quand même çà, bizarre ... En tout cas le principal c'est que çà fonctionne bonne nuit également. | |||||||
![]() ![]() | Message original par Gabrilou Bonjour, La comparaison de valeurs numériques et littérales ne saurait entraîner d'erreur ! Si tu as : 1, 5, 10A, 15, 15C, l'ordre au niveau du tri sera : 1, 5, 15, 10A, 15C, ce qui peut ne pas te convenir... Les valeurs littérales sont classées comme supérieures aux valeurs numériques. Mais je ne vois rien qui puisse empêcher ta macro de fonctionner normalement selon les indications que tu donnes. S'il y a erreur, elle est forcément provoquée par un autre élément que tu n'as pas fourni ! | |||||||
![]() ![]() | Petit complément : If Cells(i, 9).Value <> Cells(i - 1, 9).Value Then _ Le code ci-dessus représente une seule ligne de programmation : le signe _ (underline) précédé d'une espace permet d'aller à la ligne sans interrompre la ligne programme. C'est équivalent à : If Cells(i, 9).Value <> Cells(i - 1, 9).Value Then ou If Cells(i, 9).Value <> Cells(i - 1, 9).Value Then Rows(i).Insert Shift:=xlDown Lors de la copie, la syntaxe peut ne pas être respectée et provoquer une erreur. | |||||||
Astucien ![]() | Bonsoir ferrand, J'ai eu 2 erreurs au moment de l'exécution : For i% = Range(Range("I1"), Range("I1").End(xlDown)).Count To 2 Step -1 --> le i% il n'a pas aimé, j'ai mis i mais en tout cas je n'ai effectivement pas eu de message incompatibilité de type. Il aurait fallu spécifier sur quelques lignes (en jaune) excel s'est arrêté et le code de cette ligne. Modifié par Titus68 le 17/05/2014 00:02 | |||||||
![]() ![]() | Bonsoir, Le i% signifie que la variable i (non déclarée) est de type Integer. Si tu supprimes le %, elle est toujours non déclarée mais de type Variant, ce qui n'a pour effet que de lui faire utiliser plus de mémoire, mais ce qui ne change rien au niveau de l'exécution. Pour ce qui est de la syntaxe, les 3 formes que j'ai donné dans mon dernier post, correspondent à une syntaxe correcte, si on utilise autre chose, on aura une erreur de syntaxe. Quant à l'erreur d'incompatibilité de type, je ne vois rien qui la justifie dans les indications de Gabrilou. S'il y en a une, elle provient donc d'autre chose qui n'a pas été indiqué ! NB- Je n'ai aucune erreur avec ses exemples et la macro d'origine... | |||||||
Astucien ![]() | Bonjour, Pour pallier au problème : Si tu as : 1, 5, 10A, 15, 15C, l'ordre au niveau du tri sera : 1, 5, 15, 10A, 15C, ce qui peut ne pas te convenir... une solution consisterait à passer la colonne en tant que texte et au niveau des valeurs rajouter des blancs devant. Au moment du tri il posera une question supplémentaire et il faudra lui indiquait que l'on souhaite trier en tant que texte. Pour cela par contre il faudra savoir quelle est la valeur maximale que l'on pourrait avoir. Exemple, en supposant que l'on peut avoir 999 comme valeur maxi : - pour les chiffres inférieurs à 10, mettre 2 espaces devant (ex: 3 deviendrait " 3", "4C" sera à changer en " 4C") - pour les chiffres >9 mais <100, mettre 1 espace devant (ex: 12 sera à changer en " 12", 24D deviendra " 24D") - pour les chiffre de 100 à 999 pas d'espace à rajouter devant (ex: 145 reste "145" et 357B reste "357B") Si la valeur maxi est 99, 1 seul espace à rajouter pour les chiffres < 10 Si la valeur maxi possible est 9999, 3 espace à rajouter devant si chiffres < 10, 2 espaces à rajouter si chiffres > 9 et <100, si chiffre >99 et <1000, 1 espace en plus devant, de 1000 à 9999 rien à changer). Etc, etc ... Après tout dépend à quoi servent ces valeurs et si çà n'a pas d'incidence sur autre chose.
Modifié par Titus68 le 17/05/2014 14:40 | |||||||
Astucienne ![]() |
Je ne peux mettre le fichier en ligne car il contient plusieurs feuilles et l'épurage prendrait du temps. Le problème que j'ai soulevé se produit d'un façon aléatoire (peux-être parce que d'une part, 1) je recopie cette feuille sur une autre ; 2) je fais un tri sur la colonne avant de mettre en route la macro). J'ai découvert que dans la colonne i, j'avais un #/NA et cela me donne à penser que c'est ce qui provoque peut-être l'erreur d'exécution 13. Quoique qu'il en soit, tu me demandais hier le code d'erreur, le voici : Je mets en résolu, mais s'il y a des commentaires, où une autre modification à faire, je vous en remercie à l'avance. Bon week end
| |||||||
Astucien ![]() | Bonjour Gabrilou, Pour le #N/A c'est peut-être possible que ce çà qui fasse planter la macro mais je ne sais pas comment reproduire le problème pour le tester (peut-être ferran ?). Pour la ligne indiquée, je ne voyais effectivement que celle-là. Pour controler le #N/A peut-être faire comme ceci (pas testé) : Sub LigneVide() ' Insérer une ligne vierge entre les séries de liste Modifié par Titus68 le 17/05/2014 17:42 | |||||||
Publicité | ||||||||
Astucienne ![]() | Titus68 Et bien je n'ai pas réussi à reproduire cette erreur après avoir fait plusieurs tests et changements, tellement que je ne sais plus lesquels. La dernière macro modifiée marche aussi, impeccable ! Encore merci pour le temps consacré, c'est très apprécié. | |||||||
|
Les bons plans du moment PC Astuces | Tous les Bons Plans | |||||||||||||||
|