> Tous les forums > Forum Bureautique
 Modifier une macroSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
Gabrilou
  Posté le 16/05/2014 @ 21:08 
Aller en bas de la page 
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
For i% = Range(Range("I1"), Range("I1").End(xlDown)).Count To 2 Step -1
If Cells(i, 9).Value <> Cells(i - 1, 9).Value Then _
Rows(i).Insert Shift:=xlDown

Next
End Sub

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é
Titus68
 Posté le 16/05/2014 à 21:19 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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()


i=cstr(10) + "A" ' cstr() converti en chaine => i sera une chaine de caractères
msgbox i



Modifié par Titus68 le 16/05/2014 21:57
Gabrilou
 Posté le 16/05/2014 à 21:47 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucienne

Titus68 a écrit :

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 ?


Merci Titus68 pour ta réponse

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.

Titus68
 Posté le 16/05/2014 à 21:50 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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
Gabrilou
 Posté le 16/05/2014 à 22:04 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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.

En te remerciant

---
Sub LigneVide()
' Insérer une ligne vierge entre les séries de liste
For i% = Range(Range("I1"), Range("I1").End(xlDown)).Count To 2 Step -1
If Cells(i, 9).Value <> Cells(i - 1, 9).Value Then _
Rows(i).Insert Shift:=xlDown

Next
End Sub
---

Titus68
 Posté le 16/05/2014 à 22:17 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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
Gabrilou
 Posté le 16/05/2014 à 22:37 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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

Titus68
 Posté le 16/05/2014 à 23:12 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Peux-tu essayer comme çà :

Sub LigneVide() ' Insérer une ligne vierge entre les séries de liste
For i = Range(Range("I1"), Range("I1").End(xlDown)).Count To 2 Step -1
If CStr(Cells(i, 9).Value) <> CStr(Cells(i - 1, 9).Value) Then
Rows(i).Insert Shift:=xlDown
End If
Next
End Sub

Je viens de tester chez moi avec quelques valeurs et çà fonctionnait même sans le cstr().... Du coup, je suis un peu perdu quand à l'explication (comportement différent suivant la version ?) .



Modifié par Titus68 le 16/05/2014 23:20
Gabrilou
 Posté le 16/05/2014 à 23:20 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucienne

Yes !

Merci

Bonne nuit.

J'attends demain pour mettre en résolu

Publicité
Titus68
 Posté le 16/05/2014 à 23:26 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Bon c'est quand même çà, bizarre ...

En tout cas le principal c'est que çà fonctionne

bonne nuit également.

ferrand
 Posté le 16/05/2014 à 23:45 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Message original par Gabrilou

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
For i% = Range(Range("I1"), Range("I1").End(xlDown)).Count To 2 Step -1
If Cells(i, 9).Value <> Cells(i - 1, 9).Value Then _
Rows(i).Insert Shift:=xlDown

Next
End Sub

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.

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 !

ferrand
 Posté le 16/05/2014 à 23:53 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Petit complément :

If Cells(i, 9).Value <> Cells(i - 1, 9).Value Then _
Rows(i).Insert Shift:=xlDown

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
Rows(i).Insert Shift:=xlDown
End If

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.

Titus68
 Posté le 16/05/2014 à 23:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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
If Cells(i, 9).Value <> Cells(i - 1, 9).Value Then _
Rows(i).Insert Shift:=xlDown --> _ non plus c'est pour çà que j'ai renvoyé à la ligne + le end if

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
ferrand
 Posté le 17/05/2014 à 00:29 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

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

Titus68
 Posté le 17/05/2014 à 14:33 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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
Gabrilou
 Posté le 17/05/2014 à 16:47 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucienne

Bonjour vous deux et merci pour votre aide.

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

Titus68
 Posté le 17/05/2014 à 17:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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
' Controle que la liste ne contient pas de #N/A, si oui abandon de la procédure le temps de la correction manuelle
For i% = Range(Range("I1"), Range("I1").End(xlDown)).Count To 2 Step -1
If IsError(Cells(i, 9).Value) then
msgbox "Erreur (#N/A,#DIV/0,...) à la ligne " & i,vbexclamation,"ERREUR RENCONTREE"
exit sub
end if
next
' Si c'est ok on continue
For i% = Range(Range("I1"), Range("I1").End(xlDown)).Count To 2 Step -1
If cstr(Cells(i, 9).Value) <> cstr(Cells(i - 1, 9).Value) Then
Rows(i).Insert Shift:=xlDown
end if
Next
End Sub



Modifié par Titus68 le 17/05/2014 17:42
Publicité
Gabrilou
 Posté le 17/05/2014 à 21:45 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
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 ! La novice que je suis ne touche plus à rien et je mets en résolu.

Encore merci pour le temps consacré, c'est très apprécié.

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
26,99 €Carte mémoire microSDXC UHS-I SanDisk Ultra 200 Go à 26,99 €
Valable jusqu'au 27 Janvier

Amazon fait une promotion sur la mémoire microSDHC UHS-I SanDisk Ultra 200 Go qui passe à 26,99 € livrée gratuitement. On la trouve ailleurs à partir de 40 €. Cette carte mémoire offre des vitesses jusqu'à 90 Mo/s.


> Voir l'offre
349,99 €Casque réalité virtuelle Oculus Rift S à 349,99 €
Valable jusqu'au 25 Janvier

Amazon fait une promotion sur le casque de réalité virtuelle Oculus Rift S avec ses 2 manettes Oculus Touch à 349,99 € alors qu'on le trouve ailleurs à partir de 449 €. La livraison est gratuite. L'Oculus Rift S est un casque de Réalité Virtuelle pour PC qui vous permettra de tirer parti du meilleur de votre machine en matière de VR. Ce casque VR pour PC est le plus perfectionné conçu par Oculus. Plus ergonomique et plus performant, il est aussi plus confortable et plus efficace que ses prédécesseurs. L'immersion est parfaite, le rendu spectaculaire, les images éclatantes et bluffantes de réalisme. Sensations fortes garanties !


> Voir l'offre
22,99 €Clavier sans fil Logitech Wireless Desktop K400 Plus avec pavé tactile à 22,99 €
Valable jusqu'au 26 Janvier

Amazon solde le clavier sans fil Logitech Wireless Desktop K400 Plus à 22,99 €. Ce clavier sans fil dispose d'un large pavé tactile de 9 cm avec navigation multipoint pour un pointage à un doigt simplifié et un défilement vertical à deux doigts. Idéal pour contrôler votre ordinateur à distance, s'il est connecté à une TV par exemple. On le trouve ailleurs à partir de 40 €. 


> Voir l'offre

Sujets relatifs
Modifier des lignes VBA par macro
Modifier une macro sur plusieurs postes
comment modifier image bouton macro word 2007 ?
modifier, renommer bouton d'une macro
modifier une macro
aide pr modifier une macro dans word
comment modifier cette macro
2 pages par feuille dans macro excel
MODIFIER pagination et supprimer page blanche - WORD 2010
erreur macro
Plus de sujets relatifs à Modifier une macro
 > Tous les forums > Forum Bureautique