Macro pour insérer un ligne sous condition

Fermé
yannick - 20 avril 2015 à 22:28
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 - 21 avril 2015 à 00:22
Bonjour,

J'ai un fichier excel avec des données sorties d'une base de données.

En colonne A, j'ai un ordonnancement.
Exemple
1
2
3
4
6
7
8

Vous remarquez qu'on passe de 4 à 6.
Je cherche donc une macro pour insérer une ligne si les chiffres ne se suivent pas (si on passe de 4 à 6, il faut insérer une ligne entre les deux ; si on passe de 4 à 7, il faut insérer deux lignes).

Merci pour votre aide !!!
A voir également:

2 réponses

Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523
20 avril 2015 à 23:09
Bonsoir,

Sub Test()
Dim Ligne As Long, i As Long, n As Long
For Ligne = Range("A" & Rows.Count).End(xlUp).Row To 2 Step -1
If Range("A" & Ligne) > Range("A" & Ligne - 1) + 1 Then
n = Range("A" & Ligne) - Range("A" & Ligne - 1) - 1
For i = 1 To n
Rows(Ligne).Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove
Next i
End If
Next Ligne
End Sub


A+
0
Super, ca fonctionne bien. Par contre, j'ai un message
Erreur d'exécution '13' :
Incompatibilité de type

Quand je fais Débogage,
la ligne : If Range("A" & Ligne) > Range("A" & Ligne - 1) + 1 Then
est surligné en jaune
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523 > yannick
20 avril 2015 à 23:38
Si tu as un en-tête de colonne, essaie avec:
For Ligne = Range("A" & Rows.Count).End(xlUp).Row To 3 Step -1

A+
0
oui, c'est même plus qu'un entête, j'ai plusieurs lignes au dessus de mon tableau à travailler
0
Gyrus Messages postés 3334 Date d'inscription samedi 20 juillet 2013 Statut Membre Dernière intervention 9 décembre 2016 523 > yannick
21 avril 2015 à 00:22
Tu dois donc limiter la boucle suivant la position de la plage de données à contrôler.
Si la première donnée est en ligne 15 :
For Ligne = Range("A" & Rows.Count).End(xlUp).Row To 16 Step -1

A+
0
Mike-31 Messages postés 18318 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 26 avril 2024 5 076
Modifié par Mike-31 le 21/04/2015 à 00:20
Bonsoir,

Un peu tard mais j'étais sur ce code qui crée la série, créer un bouton activex

Option Explicit

Private Sub CommandButton1_Click()
Dim i, x As Integer
For i = Range("A65536").End(xlUp).Row To 2 Step -1
If Cells(i + 1, 1) > Cells(i, 1) + 1 Then
x = Cells(i + 1, 1) - Cells(i, 1) - 1
Rows(i + 1).Resize(x).Insert
End If
Next
For i = 2 To Range("A65536").End(xlUp).Row-1
Cells(i + 1, 1) = Cells(i, 1) + 1
Next
End Sub

A+
Mike-31

Une période d'échec est un moment rêvé pour semer les graines du savoir.
0