Insérer automatiquementune ligne en dessous

Résolu/Fermé
tryexcel Messages postés 11 Date d'inscription lundi 22 février 2016 Statut Membre Dernière intervention 26 février 2016 - Modifié par tryexcel le 22/02/2016 à 15:08
tryexcel Messages postés 11 Date d'inscription lundi 22 février 2016 Statut Membre Dernière intervention 26 février 2016 - 22 févr. 2016 à 18:05
Bonjour,

J'ai seulement quelques notions en VBA c'est pour cela que j'aurai besoin d'un peu d'aide pour une formule que je souhaite mettre en place.

Je souhaite insérer une ligne de manière automatique à chaque fois que la cellule du dessus est non vide.

En bref je souhaite que :

Si cellule "X" = non vide alors insertion d'une nouvelle ligne en dessous qui prend en compte les formules de la ligne du dessus.

Donc la nouvelle ligne insérée devra comporter les formules de la ligne du dessus

J'espère avoir été claire.. je remercie par avance la personne qui saura m'aider sur le sujet :)

2 réponses

Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
22 févr. 2016 à 14:50
Bjr,

Une piste :
Sub test()

Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row

For i = DernLigne to 1 Step -1

If Cells(i,1).value <> "" Then

Rows(i).Copy
Rows(i + 1).Insert Shift:=xlDown

End If

Next i

End Sub
0
tryexcel Messages postés 11 Date d'inscription lundi 22 février 2016 Statut Membre Dernière intervention 26 février 2016
22 févr. 2016 à 15:10
Bonjour Théo,

J'ai rajouté une photo pour que tu visualises mieux ce que je cherche. Les cellules vides de la colonne C contiennent des listes déroulantes. Si je sélectionne une donnée, je voudrai qu'une ligne en dessous se rajoute. or il faut que sur la ligne total l'ensemble des données se soient cumulées.

Je débute en VBA, peux tu m'expliquer le code ?
0
Theo.R Messages postés 575 Date d'inscription vendredi 11 juillet 2014 Statut Membre Dernière intervention 30 mars 2016 31
Modifié par Theo.R le 22/02/2016 à 15:25
Ok, alors pour l'explication de mon 1er code :
Sub test()

'On définit par DernLigne la dernière ligne dont la cellule A est non vide, cela constituera la fin de la boucle qui suit
Dim DernLigne As Long
DernLigne = Range("A" & Rows.Count).End(xlUp).Row

For i = DernLigne to 1 Step -1 'On utilise ici une boucle de type For i = a to b (....) Next i, la particularité est que le pas n'est pas 1 comme par défaut mais -1. En clair on va de DernLigne vers 1 dans l'ordre décroissant (DernLigne>1).
'La boucle décroissante est pratique pour un code qui ajoute/supprime des lignes, sinon la variable peut ne plus correspondre à ce qu'on cherche.

If Cells(i,1).value <> "" Then 'Cells(i,1).value est la valeur de la cellule Ai, la fonction If (=Si) s'active lorsque Ai n'est pas vide (<>"")

Rows(i).Copy 'Lorsque Ai n'est pas vide, on copie la ligne i ...
Rows(i + 1).Insert Shift:=xlDown '... puis on insère une ligne en dessous qui contient le collé de la ligne i. les formules sont décalées automatiquement.

End If

Next i

End Sub
0