Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Problème avec insertion de rangées automatique

7 réponses
Avatar
mononcle_sylvain
Bonjour,
J'ai créé un fichier Excel avec, dans la colonne «A», les chiffres de
1 à 31 (jours du mois).

Dans la colonne «B», l'utilisateur indique le nombre de travaux
accomplis en cette journée.

Dans les autres colonnes, il y a:
- Des données entrées par l'utilisateurs au sujet du travail;
- Des formules qui renvoies un résultat à l'utilisateur.

J'aimerais que chaque fois qu'il inscrit un nombre de travaux plus
grand que «1», un nombre de rangées équivalent au nombre de travaux
-1, s'insère automatiquement en dessous pour qu'il puisse entrer les
données de chaque travail, avec la même date dans la colonne «A», et
les mêmes formats de cellule et les mêmes formules que dans la rangée
précédente.

Normalement, je travaille avec Access, mais ce client voudrait avoir
ça en Excel, ce qui me complique beaucoup les choses, car je m'y
connait peu en Excel.

Merci!
MonOncle

7 réponses

Avatar
Pierre Fauconnier
Bonsoir

Tu peux copier cette macro dans le module de la feuille concernée. Ici,
toute la ligne est recopiée pour une valeur en B > 1, ce qui fait que si tu
entres 2 en B, le 2 est recopié également.

Note également que si la personne avait saisi 2, puis qu'elle corrige en
saisissant 3, elle insérera au total 5 lignes. La macro est donc à fignoler
en fonction de ce que tu souhaites obtenir


--
Cela convient-il?
----
Pierre Fauconnier
"Si j'étais Dieu, je démissionnerais pour que les gens arrêtent de se battre
en mon nom." (Le Chat...)
(remplacer NOSPAM par pfi pour me répondre. Merci)


---
MonOncle wrote:
Bonjour,
J'ai créé un fichier Excel avec, dans la colonne «A», les chiffres de
1 à 31 (jours du mois).

Dans la colonne «B», l'utilisateur indique le nombre de travaux
accomplis en cette journée.

Dans les autres colonnes, il y a:
- Des données entrées par l'utilisateurs au sujet du travail;
- Des formules qui renvoies un résultat à l'utilisateur.

J'aimerais que chaque fois qu'il inscrit un nombre de travaux plus
grand que «1», un nombre de rangées équivalent au nombre de travaux
-1, s'insère automatiquement en dessous pour qu'il puisse entrer les
données de chaque travail, avec la même date dans la colonne «A», et
les mêmes formats de cellule et les mêmes formules que dans la rangée
précédente.

Normalement, je travaille avec Access, mais ce client voudrait avoir
ça en Excel, ce qui me complique beaucoup les choses, car je m'y
connait peu en Excel.

Merci!
MonOncle


Avatar
mononcle_sylvain
Tu peux copier cette macro dans le module de la feuille concernée.


Quelle macro?

PS: Je tiens à préciser que je veux faire une insertion de rangée et
non pas une simple copie. En effet, si l'utilisateur a déjà entré les
données du jour 2, je ne veux pas que les calculs soient faussés lors
de l'ajout d'une rangée pour le jour 1.

Avatar
popi
Salut MonOncle,
je vois pas ce que tu lui reproche à la macro de Pierre ;-)
çà devrait se rapprocher de çà :


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
If Target > 1 Then
Rows(Target.Row + 1 & ":" & Target.Row + (Target - 1)).Insert
Shift:=xlDown
Rows(Target.Row & ":" &
Target.Row).SpecialCells(xlCellTypeFormulas, 23).Select
For Each c In Selection
c.Select
Col = Mid([c].Address, 2, InStr(2, [c].Address, "$") - 2)
coord = Col & c.Row & ":" & Col & c.Row + (Target - 1)
Selection.AutoFill Destination:=Range(coord),
Type:=xlFillDefault
Next
Range("A" & Target.Row).Select
For i = 2 To Target
ActiveCell(i, 1) = ActiveCell
ActiveCell(i, 2) = ""
Next
End If
End If
End Sub

@+ popi
Avatar
mononcle_sylvain
Je vais l'essayer lundi matin.
Merci beaucoup!
Avatar
Pierre Fauconnier
Salut Popy

J'avais, par mégarde, choisi "encre sympathique" comme couleur de police...
;-)
Plus sérieusement, j'ai fait copier, mais pas coller... :(

Comme tu as répondu à notre oncle, je ne la recrée pas... ( fainéant, va...)

Bon week-end


popi wrote:
Salut MonOncle,
je vois pas ce que tu lui reproche à la macro de Pierre ;-)
çà devrait se rapprocher de çà :


Private Sub Worksheet_Change(ByVal Target As Range)
If Target.Column = 2 Then
If Target > 1 Then
Rows(Target.Row + 1 & ":" & Target.Row + (Target -
1)).Insert Shift:=xlDown
Rows(Target.Row & ":" &
Target.Row).SpecialCells(xlCellTypeFormulas, 23).Select
For Each c In Selection
c.Select
Col = Mid([c].Address, 2, InStr(2, [c].Address, "$")
- 2) coord = Col & c.Row & ":" & Col & c.Row +
(Target - 1) Selection.AutoFill
Destination:=Range(coord), Type:=xlFillDefault
Next
Range("A" & Target.Row).Select
For i = 2 To Target
ActiveCell(i, 1) = ActiveCell
ActiveCell(i, 2) = ""
Next
End If
End If
End Sub

@+ popi


Avatar
Pierre Fauconnier
Heu, elle est resté dans mon copier-coller. Comme Popi a répondu, je ne la
recrée pas... Désolé pour cette erreur

Bon week-end


--
Pierre Fauconnier
"C'est lorsqu'il y a un temps mort qu'il faut tuer le temps..." (Le Chat de
Geluck (enfin, je crois...))
(remplacer NOSPAM par pfi pour me répondre. Merci)


---
MonOncle wrote:
Tu peux copier cette macro dans le module de la feuille concernée.


Quelle macro?

PS: Je tiens à préciser que je veux faire une insertion de rangée et
non pas une simple copie. En effet, si l'utilisateur a déjà entré les
données du jour 2, je ne veux pas que les calculs soient faussés lors
de l'ajout d'une rangée pour le jour 1.



Avatar
mononcle_sylvain
Merci à vous deux.
J'ai travaillé un peu votre code pour l'adapter à mon application,
mais ce départ m'a été d'un grand secours.

Encore merci!

MonOncle
Montréal
(Québec)