Vba insert row

zina1234 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention   -  
Jauster Messages postés 126 Date d'inscription   Statut Membre Dernière intervention   -
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
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   Statut Membre Dernière intervention   41
 
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 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Ah oui, je n'avais pas prêté attention au As Integer
0
zina1234 Messages postés 6 Date d'inscription   Statut Membre Dernière intervention  
 
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   Statut Membre Dernière intervention  
 
les amis il ya toujours le msg d'erreur 13
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
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   Statut Membre Dernière intervention   41
 
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