Insérer automatiquementune ligne en dessous
Résolu
tryexcel
Messages postés
11
Date d'inscription
Statut
Membre
Dernière intervention
-
tryexcel Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
tryexcel Messages postés 11 Date d'inscription Statut Membre Dernière intervention -
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 :)

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 :)

A voir également:
- Ajouter plusieurs lignes excel vba
- Liste déroulante excel - Guide
- Formule moyenne excel plusieurs colonnes - Guide
- Aller à la ligne excel - Guide
- Word et excel gratuit - Guide
- Classer par ordre alphabétique excel plusieurs colonnes - Guide
2 réponses
Bjr,
Une piste :
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
Essayez la méthode qui suit. En fait cela activera l'ajout de ligne quand vous modifiez la cellule en C:C. Pour accéder aux feuilles/modules, Alt+F11 après avoir activé les macros :
1) Le premier code est à mettre dans le code de la feuille sur laquelle vous travaillez ("homme " pour votre cas) :
2) le 2nd est à mettre dans un Module VBA :
1) Le premier code est à mettre dans le code de la feuille sur laquelle vous travaillez ("homme " pour votre cas) :
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Or Target.Column <> 3 Then Exit Sub
If Target.Value = "" Then Exit Sub
'If Target.Count > 1 Then Exit Sub
If Flag = True Then Exit Sub
Flag = True
Dim LgneNext As Long
LgneNext = Target.Row + 1
Do Until Cells(LgneNext, 2).Value <> ""
LgneNext = LgneNext + 1
Loop
Rows(Target.Row & ":" & LgneNext - 1).Copy
Rows(LgneNext).Insert Shift:=xlDown
Flag = False
End Sub
2) le 2nd est à mettre dans un Module VBA :
Public Flag As Boolean
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Or Target.Column <> 3 Then Exit Sub
If Target.Value = "" Then Exit Sub
'If Target.Count > 1 Then Exit Sub
If Flag = True Then Exit Sub
Flag = True
Dim LgneNext As Long
LgneNext = Target.Row + 1
Do Until Cells(LgneNext, 2).Value <> ""
LgneNext = LgneNext + 1
Loop
Rows(Target.Row & ":" & LgneNext - 1).Copy
Rows(LgneNext).Insert Shift:=xlDown
Cells(LgneNext, 3).Value = ""
Cells(LgneNext, 2).Value = ""
Flag = False
End Sub
Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Count > 1 Or Target.Column <> 3 Then Exit Sub
If Target.Value = "" Then Exit Sub
'If Target.Count > 1 Then Exit Sub
If Flag = True Then Exit Sub
Flag = True
Dim LgneNext As Long
LgneNext = Target.Row + 1
Do Until Cells(LgneNext, 2).Value <> ""
LgneNext = LgneNext + 1
Loop
Rows(Target.Row & ":" & LgneNext - 1).Copy
Rows(LgneNext).Insert Shift:=xlDown
Cells(LgneNext, 3).Value = ""
Cells(LgneNext, 2).Value = ""
Cells(2 * LgneNext - Target.Row, 16).FormulaLocal = "=SOMME(P" & Target.Row & ":P" & 2 * LgneNext - Target.Row - 1 & ")"
Flag = False
End Sub
If Target.Count > 1 Or Target.Column <> 3 Then Exit Sub
If Target.Value = "" Then Exit Sub
'If Target.Count > 1 Then Exit Sub
If Flag = True Then Exit Sub
Flag = True
Dim LgneNext As Long
LgneNext = Target.Row + 1
Do Until Cells(LgneNext, 2).Value <> ""
LgneNext = LgneNext + 1
Loop
Rows(Target.Row & ":" & LgneNext - 1).Copy
Rows(LgneNext).Insert Shift:=xlDown
Cells(LgneNext, 3).Value = ""
Cells(LgneNext, 2).Value = ""
Cells(2 * LgneNext - Target.Row, 16).FormulaLocal = "=SOMME(P" & Target.Row & ":P" & 2 * LgneNext - Target.Row - 1 & ")"
Flag = False
End Sub
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 ?
de manière simple, mon code copie-colle la ligne dans une nouvelle ligne insérée en dessous lorsque A est non vide. C'est à vous de l'adapter à vos besoins. Il est possible de ne copier que certaines cellules de la ligne, ou d'ajouter d'autres conditions que "Ai non vide".
bref tout est possible, n'hésitez pas à demander si vous avez encore besoin d'aide
De B à P les cellules sont fusionnées mais sur la colonne Q j'ai besoin d'avoir les 3 lignes
Si oui, alors vous pouvez adapter le code en modifiant le pas de la boucle par exemple (-3 au lieu de -1).
Pouvez-vous joindre un document via www.cjoint.com pour avoir plus de détails sur les formules, etc. ?