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

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