Vba insert row

Fermé
zina1234 Messages postés 6 Date d'inscription mardi 27 février 2018 Statut Membre Dernière intervention 4 février 2019 - 28 févr. 2018 à 13:37
Jauster Messages postés 126 Date d'inscription jeudi 7 décembre 2017 Statut Membre Dernière intervention 31 août 2018 - 1 mars 2018 à 11:42
j'ai tenté de créer une macro qui insert une nouvelle ligne si la cellule contient une virgule mais le message d'erreur 13 apparait.

Sub insertrow()

'insert a row if cell contains ","
Dim Lastrow As Integer
Lastrow = ActiveSheet.Cells(Rows.Count, 1).End(xlUp).Row

For Each c In Range("L1:L" & Lastrow)
If c.Value Like "*,*" Then
c.Offset(1, 0).EntireRow.Insert
End If

Next c

End Sub


merci d'avance
A voir également:

4 réponses

eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
28 févr. 2018 à 14:13
Bonjour,

Tu fais un For Each sur un objet qui s'agrandit.
Utilise plutôt une boucle de ce type :
For lig = Lastrow to 1 step -1

step -1 car c'est inutile de tester une ligne que tu viendrais d'insérer d'une part, et d'autre part tu rencontrerais le même pb : les lignes de fin ne seraient pas testées.
eric
0
Jauster Messages postés 126 Date d'inscription jeudi 7 décembre 2017 Statut Membre Dernière intervention 31 août 2018 40
Modifié le 28 févr. 2018 à 14:38
Salut zina1234 (et salut eriiic),

Sauf erreur de ma part une erreur 13 ne concerne que 2 possibilités uniquement (?) :
- Soit le fichier est en mode lecture et ne peut pas être modifié
- Ou une variable est mal déclarée

Dans ce cas LastRow dépasse surement 32767.
Donc en plus d'utiliser la méthode d'Eriiic qui effectivement permet de vérifier aussi les lignes en-dessous des nouvelles lignes insérées, je vous conseille de vérifier votre variable LastRow à l'aide d'un espion VBA.

Si la variable dépasse vraiment 32767 il faudra la déclarer comme Long ou encore Dim LastRow&
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
28 févr. 2018 à 18:09
Ah oui, je n'avais pas prêté attention au As Integer
0
zina1234 Messages postés 6 Date d'inscription mardi 27 février 2018 Statut Membre Dernière intervention 4 février 2019
28 févr. 2018 à 18:36
bonjour merci pour vos réponses, pour info le lastrow ne dépasse pas les 200 rows.
0
zina1234 Messages postés 6 Date d'inscription mardi 27 février 2018 Statut Membre Dernière intervention 4 février 2019
1 mars 2018 à 09:05
les amis il ya toujours le msg d'erreur 13
0
eriiic Messages postés 24570 Date d'inscription mardi 11 septembre 2007 Statut Contributeur Dernière intervention 23 avril 2024 7 215
1 mars 2018 à 09:17
Bonjour,

où en es-tu dans ton code ?
Merci de le mettre, de l'indenter, d'utiliser la balise Code (icone <>) et d'indiquer la ligne en erreur.
eric
0
Jauster Messages postés 126 Date d'inscription jeudi 7 décembre 2017 Statut Membre Dernière intervention 31 août 2018 40
1 mars 2018 à 11:42
UPDATE : Post du même auteur avec problème similaire ici : https://forums.commentcamarche.net/forum/affich-35233320-vba-formule-inseree-si-cellule-vide

Solution proposée :
Vous avez surement des #N/A dans votre colonne L. Quand votre code arrive sur cell.Value, la cellule avec #N/A ne peut pas être lue et VB affiche une erreur 13 de typ mismatch.

Ou bien vous récupérez une BDD sans #N/A, ou vous retirez les #N/A d'une manière ou d'une autre, ou vous gerez ceci avec un error handler.
0