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 -
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
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:
- Vba for each row
- Downloader for pc - Télécharger - Téléchargement & Transfert
- Idm for mac - Télécharger - Téléchargement & Transfert
- Copytrans heic for windows - Télécharger - Visionnage & Diaporama
- Instagram for pc - Télécharger - Divers Communication
- Microsoft store download for pc - Guide
4 réponses
Bonjour,
Tu fais un For Each sur un objet qui s'agrandit.
Utilise plutôt une boucle de ce type :
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
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
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&
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&
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
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
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.
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.