Vba insert row

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

4 réponses

  1. Contributeur
    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
    1. 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
      1. Contributeur
        Ah oui, je n'avais pas prêté attention au As Integer
        0
      2. bonjour merci pour vos réponses, pour info le lastrow ne dépasse pas les 200 rows.
        0
      3. les amis il ya toujours le msg d'erreur 13
        0
    2. Contributeur
      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
      1. 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