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

insérer ligne dans des feuilles groupées en gardant les formules

12 réponses
Avatar
J
Bonjour à tous
J'ai un code (merci à l'auteur) qui insère une ligne sous la cellule
active et y recopie les formules qu'elle contient.

SVP, comment faire pour réaliser cette action sur un groupe de feuilles
(toutes les feuilles ne contiennent pas les mêmes formules, mais je
cherche à insérer une ligne au même endroit dans tout le groupe, sans
recopier les constantes)?

Merci pour l'aide.
J@@

'****
Sub NouvelleLigneEnDessous()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select
End Sub
'****

10 réponses

1 2
Avatar
Charabeuh
Bjr,

devrait fonctionner sur un groupe de feuilles sélectionnées.

Sub NouvelleLigneEnDessous()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
Dim Feuilles As Sheets, Ws

'sauvegarde les feuilles sélectionnées
Set Feuilles = Application.ActiveWorkbook.Windows(1).SelectedSheets
'Boucle sur les feuilles sélectionnées
For Each Ws In Feuilles
'on sélectionne la feuille courante uniquement
Ws.Select True
'on fait ce qu'on a à faire
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select

Next Ws

'on re-selectionne les feuilles comme au départ
For Each Ws In Feuilles
Ws.Select False
Next Ws
Set Feuilles = Nothing

End Sub




"J@@" a écrit dans le message de
news:%
Bonjour à tous
J'ai un code (merci à l'auteur) qui insère une ligne sous la cellule
active et y recopie les formules qu'elle contient.

SVP, comment faire pour réaliser cette action sur un groupe de feuilles
(toutes les feuilles ne contiennent pas les mêmes formules, mais je
cherche à insérer une ligne au même endroit dans tout le groupe, sans
recopier les constantes)?

Merci pour l'aide.
J@@

'****
Sub NouvelleLigneEnDessous()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select
End Sub
'****


Avatar
J
Bonjour Charabeuh
Merci pour ta réponse. C'est presque ça :
OK pour toutes les feuilles, sauf la première, celle d'où je lance la macro.

En effet dans la 1ère feuille j'ai:
*une colonne M avec des formules "autonomes" 'Ä+D4-L4, la macro donne
l'effet souhaité (c'est ce type de formule que j'ai dans les autres
feuilles);

*mais aussi des colonnes contenant chacune une formule se référent aux
différentes autres feuilles du classeur :

Si je me place en A4 et que je lance la macro :
exemple pour la colonne E (mais pareil pour les autres sauf M)
en ligne 4 j'ai 'ª!O4
en ligne 5 j'ai 'ª!O6 (la ligne insérée)
en ligne 6 j'ai 'ª!O6
en ligne 7 j'ai 'ª!O7

J'aurai souhaité
en ligne 4 'ª!O4
en ligne 5 'ª!O5 (la ligne insérée)
en ligne 6 'ª!O6
en ligne 7 'ª!O7

Que faut-il modifier pour y arriver?
Merci pour cette aide précieuse
J@@


Charabeuh a écrit :
Bjr,

devrait fonctionner sur un groupe de feuilles sélectionnées.

Sub NouvelleLigneEnDessous()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
Dim Feuilles As Sheets, Ws

'sauvegarde les feuilles sélectionnées
Set Feuilles = Application.ActiveWorkbook.Windows(1).SelectedSheets
'Boucle sur les feuilles sélectionnées
For Each Ws In Feuilles
'on sélectionne la feuille courante uniquement
Ws.Select True
'on fait ce qu'on a à faire
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select

Next Ws

'on re-selectionne les feuilles comme au départ
For Each Ws In Feuilles
Ws.Select False
Next Ws
Set Feuilles = Nothing

End Sub




"J@@" a écrit dans le message de
news:%
Bonjour à tous
J'ai un code (merci à l'auteur) qui insère une ligne sous la cellule
active et y recopie les formules qu'elle contient.

SVP, comment faire pour réaliser cette action sur un groupe de
feuilles (toutes les feuilles ne contiennent pas les mêmes formules,
mais je cherche à insérer une ligne au même endroit dans tout le
groupe, sans recopier les constantes)?

Merci pour l'aide.
J@@

'****
Sub NouvelleLigneEnDessous()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select
End Sub
'****





Avatar
J
Bien sûr ce n'est pas ton adaptation, qui ne fonctionne pas, c'est ma
macro initiale :-)
Si tu as une idée ...
encore merci
J@@

Charabeuh a écrit :
Bjr,

devrait fonctionner sur un groupe de feuilles sélectionnées.

Sub NouvelleLigneEnDessous()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
Dim Feuilles As Sheets, Ws

'sauvegarde les feuilles sélectionnées
Set Feuilles = Application.ActiveWorkbook.Windows(1).SelectedSheets
'Boucle sur les feuilles sélectionnées
For Each Ws In Feuilles
'on sélectionne la feuille courante uniquement
Ws.Select True
'on fait ce qu'on a à faire
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select

Next Ws

'on re-selectionne les feuilles comme au départ
For Each Ws In Feuilles
Ws.Select False
Next Ws
Set Feuilles = Nothing

End Sub




"J@@" a écrit dans le message de
news:%
Bonjour à tous
J'ai un code (merci à l'auteur) qui insère une ligne sous la cellule
active et y recopie les formules qu'elle contient.

SVP, comment faire pour réaliser cette action sur un groupe de
feuilles (toutes les feuilles ne contiennent pas les mêmes formules,
mais je cherche à insérer une ligne au même endroit dans tout le
groupe, sans recopier les constantes)?

Merci pour l'aide.
J@@

'****
Sub NouvelleLigneEnDessous()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select
End Sub
'****





Avatar
Charabeuh
Bonjour,

Si tu sélectionnes la 1ière feuille dans ton groupe, les formules ayant une
référence vers une autre feuille sont modifiées :
1) si tu insères une ligne sur la première feuille.
2) si tu insères une ligne sur la feuille référencée.

C'est le fonctionnement normal d'Excel qui conserve les références
vers les autres feuilles.

Une piste :
1) exécuter la macro sur les feuilles sélectionnées
(en ne sélectionnant pas ta première feuille dans ton groupe)

2) exécuter la macro sur les feuilles sélectionnées
(en ne sélectionnant que ta première feuille)

Qu'en est il ?





"J@@" a écrit dans le message de
news:
Bien sûr ce n'est pas ton adaptation, qui ne fonctionne pas, c'est ma
macro initiale :-)
Si tu as une idée ...
encore merci
J@@

Charabeuh a écrit :
Bjr,

devrait fonctionner sur un groupe de feuilles sélectionnées.

Sub NouvelleLigneEnDessous()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
Dim Feuilles As Sheets, Ws

'sauvegarde les feuilles sélectionnées
Set Feuilles = Application.ActiveWorkbook.Windows(1).SelectedSheets
'Boucle sur les feuilles sélectionnées
For Each Ws In Feuilles
'on sélectionne la feuille courante uniquement
Ws.Select True
'on fait ce qu'on a à faire
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select

Next Ws

'on re-selectionne les feuilles comme au départ
For Each Ws In Feuilles
Ws.Select False
Next Ws
Set Feuilles = Nothing

End Sub




"J@@" a écrit dans le message de
news:%
Bonjour à tous
J'ai un code (merci à l'auteur) qui insère une ligne sous la cellule
active et y recopie les formules qu'elle contient.

SVP, comment faire pour réaliser cette action sur un groupe de feuilles
(toutes les feuilles ne contiennent pas les mêmes formules, mais je
cherche à insérer une ligne au même endroit dans tout le groupe, sans
recopier les constantes)?

Merci pour l'aide.
J@@

'****
Sub NouvelleLigneEnDessous()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select
End Sub
'****







Avatar
J
Bonjour
Ta proposition fonctionne très bien, en 2 temps
Mais comment modifier le code pour que l'utilisateur sélectionne dans la
feuille 1 et que s'exécute les 2 opérations successives ??
J'ai essayé, en vain..

' Set Feuilles = Application.ActiveWorkbook.Windows(1).SelectedSheets
Set Feuilles = Sheets(Array("AA", "BB", "CC", "DD", "EE", "FF", "GG"))
ne fonctionne pas

> 1) exécuter la macro sur les feuilles sélectionnées
> (en ne sélectionnant pas ta première feuille dans ton groupe)
>
> 2) exécuter la macro sur les feuilles sélectionnées
> (en ne sélectionnant que ta première feuille)

Encore merci pour la patience
J@@

Charabeuh a écrit :
Bonjour,

Si tu sélectionnes la 1ière feuille dans ton groupe, les formules ayant
une référence vers une autre feuille sont modifiées :
1) si tu insères une ligne sur la première feuille.
2) si tu insères une ligne sur la feuille référencée.

C'est le fonctionnement normal d'Excel qui conserve les références
vers les autres feuilles.

Une piste :
1) exécuter la macro sur les feuilles sélectionnées
(en ne sélectionnant pas ta première feuille dans ton groupe)

2) exécuter la macro sur les feuilles sélectionnées
(en ne sélectionnant que ta première feuille)

Qu'en est il ?



> "J@@" <
Bien sûr ce n'est pas ton adaptation, qui ne fonctionne pas, c'est ma
macro initiale :-)

Charabeuh a écrit :
devrait fonctionner sur un groupe de feuilles sélectionnées.

Sub NouvelleLigneEnDessous()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
Dim Feuilles As Sheets, Ws

'sauvegarde les feuilles sélectionnées
Set Feuilles = Application.ActiveWorkbook.Windows(1).SelectedSheets
'Boucle sur les feuilles sélectionnées
For Each Ws In Feuilles
'on sélectionne la feuille courante uniquement
Ws.Select True
'on fait ce qu'on a à faire
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select

Next Ws

'on re-selectionne les feuilles comme au départ
For Each Ws In Feuilles
Ws.Select False
Next Ws
Set Feuilles = Nothing

End Sub

"J@@"
J'ai un code (merci à l'auteur) qui insère une ligne sous la cellule
active et y recopie les formules qu'elle contient.

SVP, comment faire pour réaliser cette action sur un groupe de
feuilles (toutes les feuilles ne contiennent pas les mêmes formules,
mais je cherche à insérer une ligne au même endroit dans tout le
groupe, sans recopier les constantes)?
'****
Sub NouvelleLigneEnDessous()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select
End Sub
'****








Avatar
charabeuh
Par la macro ci-dessous
(mettre dans la variable 'NomPremFeuil' le nom
de la ière feuille)

Sub NouvelleLigneEnDessous()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
Dim Feuilles As Sheets, Ws, NomPremFeuil As String


'Nom de la 1ière feuille
NomPremFeuil = "Feuil1"
'sauvegarde les feuilles sélectionnées
Set Feuilles = Application.ActiveWorkbook.Windows(1).SelectedSheets
'Boucle sur les feuilles sélectionnées sauf 1ière
For Each Ws In Feuilles
'on sélectionne la feuille courante uniquement
'on teste si la feuille courante est la 1ière
If Ws.Name <> NomPremFeuil Then
Ws.Select True
'on fait ce qu'on a à faire
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select
End If
Next Ws

'On traite la 1ière feuille
Sheets(NomPremFeuil).Select True
'on fait ce qu'on a à faire
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select

'on re-selectionne les feuilles comme au départ
For Each Ws In Feuilles
Ws.Select False
Next Ws
Set Feuilles = Nothing

End Sub

CharAbeuh







"J@@" a écrit dans le message de news:
%
Bonjour
Ta proposition fonctionne très bien, en 2 temps
Mais comment modifier le code pour que l'utilisateur sélectionne dans la
feuille 1 et que s'exécute les 2 opérations successives ??
J'ai essayé, en vain..

' Set Feuilles = Application.ActiveWorkbook.Windows(1).SelectedSheets
Set Feuilles = Sheets(Array("AA", "BB", "CC", "DD", "EE", "FF", "GG"))
ne fonctionne pas


'****
Avatar
J
Bonjour Charabeuh
Merci pour ta réponse,
mais cela ne fonctionne pas.
Je dois - faire pleins de bêtises, - et/ou avoir mal expliqué.
Peux-tu, stp, jeter un œil sur le fichier mis sur cjoint?

http://cjoint.com/?hAsVxCdSYx

PS : mes réponses sont un peu tardives, car il est 06h50 dimanche, ici.
Ça décale.

Merci
@+
J@@


charabeuh a écrit :
Par la macro ci-dessous
(mettre dans la variable 'NomPremFeuil' le nom
de la ière feuille)

Sub NouvelleLigneEnDessous()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
Dim Feuilles As Sheets, Ws, NomPremFeuil As String


'Nom de la 1ière feuille
NomPremFeuil = "Feuil1"
'sauvegarde les feuilles sélectionnées
Set Feuilles = Application.ActiveWorkbook.Windows(1).SelectedSheets
'Boucle sur les feuilles sélectionnées sauf 1ière
For Each Ws In Feuilles
'on sélectionne la feuille courante uniquement
'on teste si la feuille courante est la 1ière
If Ws.Name <> NomPremFeuil Then
Ws.Select True
'on fait ce qu'on a à faire
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select
End If
Next Ws

'On traite la 1ière feuille
Sheets(NomPremFeuil).Select True
'on fait ce qu'on a à faire
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select

'on re-selectionne les feuilles comme au départ
For Each Ws In Feuilles
Ws.Select False
Next Ws
Set Feuilles = Nothing

End Sub

CharAbeuh







"J@@" a écrit dans le message de news:
%
Bonjour
Ta proposition fonctionne très bien, en 2 temps
Mais comment modifier le code pour que l'utilisateur sélectionne dans la
feuille 1 et que s'exécute les 2 opérations successives ??
J'ai essayé, en vain..

' Set Feuilles = Application.ActiveWorkbook.Windows(1).SelectedSheets
Set Feuilles = Sheets(Array("AA", "BB", "CC", "DD", "EE", "FF", "GG"))
ne fonctionne pas


'****




Avatar
Charabeuh
Bonjour (du matin donc!)

Dans la macro, il y a les deux lignes suivantes:

'Nom de la 1ière feuille
NomPremFeuil = "Feuil1"


Si dans la macro on remplace "Feuil1" par le nom de la
feuille récap inventaire, ça doit marcher. Les deux lignes
de la macro deviennent:

'Nom de la 1ière feuille
NomPremFeuil = "Commandes_inv"


voir fichier joint : http://cjoint.com/?hAuwjccypg

Charabeuh.






"J@@" a écrit dans le message de
news:%
Bonjour Charabeuh
Merci pour ta réponse,
mais cela ne fonctionne pas.
Je dois - faire pleins de bêtises, - et/ou avoir mal expliqué.
Peux-tu, stp, jeter un œil sur le fichier mis sur cjoint?

http://cjoint.com/?hAsVxCdSYx

PS : mes réponses sont un peu tardives, car il est 06h50 dimanche, ici. Ça
décale.

Merci
@+
J@@


charabeuh a écrit :
Par la macro ci-dessous
(mettre dans la variable 'NomPremFeuil' le nom
de la ière feuille)

Sub NouvelleLigneEnDessous()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
Dim Feuilles As Sheets, Ws, NomPremFeuil As String


'Nom de la 1ière feuille
NomPremFeuil = "Feuil1"
'sauvegarde les feuilles sélectionnées
Set Feuilles = Application.ActiveWorkbook.Windows(1).SelectedSheets
'Boucle sur les feuilles sélectionnées sauf 1ière
For Each Ws In Feuilles
'on sélectionne la feuille courante uniquement
'on teste si la feuille courante est la 1ière
If Ws.Name <> NomPremFeuil Then
Ws.Select True
'on fait ce qu'on a à faire
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select
End If
Next Ws

'On traite la 1ière feuille
Sheets(NomPremFeuil).Select True
'on fait ce qu'on a à faire
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select

'on re-selectionne les feuilles comme au départ
For Each Ws In Feuilles
Ws.Select False
Next Ws
Set Feuilles = Nothing

End Sub

CharAbeuh







"J@@" a écrit dans le message de news:
%
Bonjour
Ta proposition fonctionne très bien, en 2 temps
Mais comment modifier le code pour que l'utilisateur sélectionne dans la
feuille 1 et que s'exécute les 2 opérations successives ??
J'ai essayé, en vain..

' Set Feuilles = Application.ActiveWorkbook.Windows(1).SelectedSheets
Set Feuilles = Sheets(Array("AA", "BB", "CC", "DD", "EE", "FF", "GG"))
ne fonctionne pas


'****




Avatar
J
Re-bonjour
Mal réveillé, j'ai posté sur cjoint un code erroné.
Voici le code kivabien, maintenant.

J'ai juste ajouté :
Sheets(Array("Commandes_inv", "AA", "BB", "CC", "DD", "EE", "FF",
"GG")).Select '****ajout pour tout sélectionner

Sheets("Commandes_inv").Activate '****ajout pour que la feuille sur
laquelle on sélectionne la cellule sous laquelle on insère soit active.

Sheets("Commandes_inv").Select '****ajout à la fin pour déselectionner
et retourner à la feuille 1.

*Tout va bien* mais :
j'ai aussi dans les feuilles autres que 1 des cellules qui pointent vers
feuille 1, comment maintenir ces ref justes, malgré le décalage :

A3 = Commandes_inv!A3
A4 = décaler ou indirect ou qqchose pour obtenir Commandes_inv!A4 malgré
l'insertion d'une ligne entre A3 et a4

Merci pour les idées
@+
J@@ (je vais peut-être repartir sur un nouveau post, car celui-ci risque
de devenir dur à suivre.



Sub NouvelleLigneEnDessous_ok()
' Insère une ligne sous la ligne qui contient la cellule active
' et y recopie les formules qu'elle contient
Dim ZtNumLig As Integer
Dim ZtDerCol As Integer
Dim i
Dim Feuilles As Sheets, Ws, NomPremFeuil As String

'Nom de la 1ière feuille
NomPremFeuil = "Commandes_inv"
' groupe les feuilles
Sheets(Array("Commandes_inv", "AA", "BB", "CC", "DD", "EE", "FF",
"GG")).Select '****ajout
'sauvegarde les feuilles sélectionnées
Set Feuilles = Application.ActiveWorkbook.Windows(1).SelectedSheets
'active la feuille où la cellule sous laquelle on insère est sélectionnée
Sheets("Commandes_inv").Activate '****ajout
'Boucle sur les feuilles sélectionnées sauf 1ière
For Each Ws In Feuilles
'on sélectionne la feuille courante uniquement
'on teste si la feuille courante est la 1ière
If Ws.Name <> NomPremFeuil Then
Ws.Select True
'on fait ce qu'on a à faire
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select
End If
Next Ws

'On traite la 1ière feuille
Sheets(NomPremFeuil).Select True
'on fait ce qu'on a à faire
ActiveCell.Range("A2").EntireRow.Insert
ZtNumLig = ActiveCell.Row
ZtDerCol = ActiveCell.SpecialCells(xlCellTypeLastCell).Column
Range(Cells(ZtNumLig, 1), Cells(ZtNumLig, ZtDerCol)).Copy _
Range(Cells(ZtNumLig + 1, 1), Cells(ZtNumLig + 1, ZtDerCol))
Application.ScreenUpdating = False
For i = 1 To ZtDerCol
If Not Cells(ZtNumLig + 1, i).HasFormula Then
Cells(ZtNumLig + 1, i).ClearContents
End If
Next i
ActiveCell.Range("A2").Select

'on re-selectionne les feuilles comme au départ
For Each Ws In Feuilles
Ws.Select False
Next Ws
Set Feuilles = Nothing
Sheets("Commandes_inv").Select '****ajout
End Sub


charabeuh a écrit :
Avatar
J
Merci pour ta patience(il en faut ;-)
J'avais corrigé mes misérables tripatouillages.
J'ai juste ajouté, pur le confort :
Sheets(Array("Commandes_inv", "AA", "BB", "CC", "DD", "EE", "FF",
"GG")).Select '****ajout pour tout sélectionner

Sheets("Commandes_inv").Activate '****ajout pour que la feuille sur
laquelle on sélectionne la cellule sous laquelle on insère soit active.

Sheets("Commandes_inv").Select '****ajout à la fin pour déselectionner
et retourner à la feuille 1.

Et à force de me frotter les yeux j'ai aussi trouvé la solution au pb
posé par ma ligne A des feuilles autres que 1, dont l'adressage des
formules devenait erroné.
J'ai remplacé, en A3 :
=Commandes_inv!A3
par =INDIRECT(ADRESSE(LIGNE(A3);COLONNE();3;1;"Commandes_inv"))
et cela m'a l'air de bien fonctionner. :-)
Je m'étonne moi-même ;-)

Bon il y a plein de vent, la mer est toute blanche, je vais vérifier les
fenêtres.
@+
encore merci
J@@


Charabeuh a écrit :
Bonjour (du matin donc!)

Dans la macro, il y a les deux lignes suivantes:

'Nom de la 1ière feuille
NomPremFeuil = "Feuil1"


Si dans la macro on remplace "Feuil1" par le nom de la
feuille récap inventaire, ça doit marcher. Les deux lignes
de la macro deviennent:

'Nom de la 1ière feuille
NomPremFeuil = "Commandes_inv"


voir fichier joint : http://cjoint.com/?hAuwjccypg

Charabeuh.




1 2