OVH Cloud OVH Cloud

suppresion d'une ligne

14 réponses
Avatar
JEAN
Bonjour,

j'ai un petit soucis:

j'ai deux feuilles dans mon classeur excel,
feuille 1 jai A1=1;A2=2;A3=3;A4=5

dans mon feuilet 2 j'ai directement la liaison c'est a dire
A1=Feuil1!A1
A2=Feuil1!A2
A3=Feuil1!A3
A4=Feuil1!A4

mon probleme est que quand je supprime une ligne dans feuille 1, sur la
feuille 2 cela me cree un #REF!

J'ai essayé des codes mais ca bug, je voudrai avoir au fait un bouton de
commande dans la feuille 1, quand je selectionnerai les lignes à supprimer de
la feuille 1 et j'appuierai sur ce bouton de commandes, je voudrai que les
meme lignes que je supprime à la feuille 1 soit supprimé aussi à la feuille2.

savez vous?

merci de votre aide

4 réponses

1 2
Avatar
michdenis
Bonjour Jean,

"la macro mette du temps à s'exécuté sablière au moins 30 sec " ... mais 30 secondes, cela m'apparaît nettement exagérer
!

A ) Cela dépend de la grandeur des plages sélectionnées, du nombre de feuilles et le nombre de formules que tu as dans
ces feuilles, du type de formules, ....si tu as des procédures événementielles dans le code feuille de chacune
d'elles....

Place ces 2 lignes de code dans le tout début de la macro

'Passe en mode de calcul manuel
Application.Calculation = xlCalculationManual
'Désactive les macros événementielles que peuvent
'contenir le code de tes feuilles
Application.EnableEvents = False


'et à la fin de ta macro, on remet les paramètres comme avant
'copie celles-ci :

Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True


Sinon, il va falloir que tu donnes plus d'informations sur ce contient tes feuilles de calcul !


Salutations!








"JEAN" a écrit dans le message de news:

C'est normal que l'execution de la macro mette du temps à s'executer.
sabliere au moin 30 sec
merci


Bonjour Jean,

Ceci est mon dernier message, et c'est cette version de la macro qui est la bonne macro à retenir ... en faisant la
correction lors de la macro 2, j'ai effacé la dernère section de celle-ci... désolé.

'------------------------------
Sub Supprimer_lignes()

'Déclaration des variables.
Dim arr(), Rg As Range, Are As Range
Dim Adr As String, Rg1 As Range

arr = Array("Feuil1", "Feuil2")

If TypeName(Selection) = "Range" Then
Set Rg = Selection

For Each Are In Rg.Areas
If Rg1 Is Nothing Then
Set Rg1 = Are.EntireRow
Else
Set Rg1 = Union(Rg1, Are.EntireRow)
End If
Next
If Not Rg1 Is Nothing Then
Adr = Rg1.Address
For Each elt In arr
Sheets(elt).Range(Adr).Delete
Next
End If
Selection(1, 1).Select
End If

Set Are = Nothing: Set Rg1 = Nothing: Set Rg = Nothing

End Sub
'------------------------------


Salutations!




"JEAN" a écrit dans le message de news:

merci michdenis, j'ai essayé ton programme, quand j'appuie sur le bouton de
commande,ca met un peu de temps à s'executer, présence de la sablière

c'est du a quoi?

merci



Bonjour Jean,


Voici une macro qui va supprimer (et non pas effacer) les lignes entières des feuilles que tu vas indiquer dans la
macro.

Pour ce faire, tu n'as qu'à attacher cette macro à un bouton et sélectionner au moins une cellule par ligne que tu
désires supprimer.

'---------------------------------
Sub Supprimer_lignes()

Dim arr(), Rg As Range, Are As Range

'INSCRIRE le nom des feuilles désirées
'à la place de Feuil1 et Feuil2
arr = Array("Feuil1", "Feuil2")

If TypeName(Selection) = "Range" Then
Set Rg = Selection
For Each Are In Rg.Areas
adr = Are.Address
For Each elt In arr
Sheets(elt).Range(adr).EntireRow.Delete (xlUp)
Next
Next
Selection(1, 1).Select
End If

End Sub
'---------------------------------


P.S. La formule que t'a donné Isabelle, c'était pour empêcher d'avoir #Ref! dans une cellule en feuil2 lorsque tu
supprimes la ligne de la feuille 1


Salutations !




"JEAN" a écrit dans le message de news:

je voudrai laisser tel quel car j'ai un classeur qui a déja ccette
presentation,
je souhaite juste ajouter un bouton de commandes dans la feuille
1
et quand je selectionne,sur ma feuille 1 les lignes à supprimer j'apuie sur
le bouton de commande de la feuille 1 et il me supprimme egalement les ligne
de la feuille 2

par exemple si je selectionne ligne 13 14 15 16 de la feuille 1
et j'appuie sur le bouton de commande, il me supprime alors en meme temps
les lignes 13 14 15 16 de la feuille 2

merci de votre aide.


bonjour Jean,

remlace la formule
þuil1!A1
par
=INDIRECT("Feuil1!"&ADRESSE(LIGNE();COLONNE()))

et crecopie la vers le bas

isabelle


Bonjour,

j'ai un petit soucis:

j'ai deux feuilles dans mon classeur excel,
feuille 1 jai A1=1;A2=2;A3=3;A4=5

dans mon feuilet 2 j'ai directement la liaison c'est a dire
A1þuil1!A1
A2þuil1!A2
A3þuil1!A3
A4þuil1!A4

mon probleme est que quand je supprime une ligne dans feuille 1, sur la
feuille 2 cela me cree un #REF!

J'ai essayé des codes mais ca bug, je voudrai avoir au fait un bouton de
commande dans la feuille 1, quand je selectionnerai les lignes à supprimer de
la feuille 1 et j'appuierai sur ce bouton de commandes, je voudrai que les
meme lignes que je supprime à la feuille 1 soit supprimé aussi à la feuille2.

savez vous?

merci de votre aide















Avatar
jps
heu, jean, tu n'es pas obligé de divulguer ici des informations,
probablement confidentielles, sur ton travail, et ce, même sous la menace de
quelque glaive québécois...
jps (qui n'est pas une épée, lui, mais qui est un peu comme la mule du pape
(non, non, pas toi clément))

"michdenis" a écrit dans le message de
news:
Sinon, il va falloir que tu donnes plus d'informations sur ce contient tes
feuilles de calcul !



Salutations!










Avatar
JEAN
merci


Bonjour Jean,

"la macro mette du temps à s'exécuté sablière au moins 30 sec " ... mais 30 secondes, cela m'apparaît nettement exagérer
!

A ) Cela dépend de la grandeur des plages sélectionnées, du nombre de feuilles et le nombre de formules que tu as dans
ces feuilles, du type de formules, ....si tu as des procédures événementielles dans le code feuille de chacune
d'elles....

Place ces 2 lignes de code dans le tout début de la macro

'Passe en mode de calcul manuel
Application.Calculation = xlCalculationManual
'Désactive les macros événementielles que peuvent
'contenir le code de tes feuilles
Application.EnableEvents = False


'et à la fin de ta macro, on remet les paramètres comme avant
'copie celles-ci :

Application.Calculation = xlCalculationAutomatic
Application.EnableEvents = True


Sinon, il va falloir que tu donnes plus d'informations sur ce contient tes feuilles de calcul !


Salutations!








"JEAN" a écrit dans le message de news:

C'est normal que l'execution de la macro mette du temps à s'executer.
sabliere au moin 30 sec
merci


Bonjour Jean,

Ceci est mon dernier message, et c'est cette version de la macro qui est la bonne macro à retenir ... en faisant la
correction lors de la macro 2, j'ai effacé la dernère section de celle-ci... désolé.

'------------------------------
Sub Supprimer_lignes()

'Déclaration des variables.
Dim arr(), Rg As Range, Are As Range
Dim Adr As String, Rg1 As Range

arr = Array("Feuil1", "Feuil2")

If TypeName(Selection) = "Range" Then
Set Rg = Selection

For Each Are In Rg.Areas
If Rg1 Is Nothing Then
Set Rg1 = Are.EntireRow
Else
Set Rg1 = Union(Rg1, Are.EntireRow)
End If
Next
If Not Rg1 Is Nothing Then
Adr = Rg1.Address
For Each elt In arr
Sheets(elt).Range(Adr).Delete
Next
End If
Selection(1, 1).Select
End If

Set Are = Nothing: Set Rg1 = Nothing: Set Rg = Nothing

End Sub
'------------------------------


Salutations!




"JEAN" a écrit dans le message de news:

merci michdenis, j'ai essayé ton programme, quand j'appuie sur le bouton de
commande,ca met un peu de temps à s'executer, présence de la sablière

c'est du a quoi?

merci



Bonjour Jean,


Voici une macro qui va supprimer (et non pas effacer) les lignes entières des feuilles que tu vas indiquer dans la
macro.

Pour ce faire, tu n'as qu'à attacher cette macro à un bouton et sélectionner au moins une cellule par ligne que tu
désires supprimer.

'---------------------------------
Sub Supprimer_lignes()

Dim arr(), Rg As Range, Are As Range

'INSCRIRE le nom des feuilles désirées
'à la place de Feuil1 et Feuil2
arr = Array("Feuil1", "Feuil2")

If TypeName(Selection) = "Range" Then
Set Rg = Selection
For Each Are In Rg.Areas
adr = Are.Address
For Each elt In arr
Sheets(elt).Range(adr).EntireRow.Delete (xlUp)
Next
Next
Selection(1, 1).Select
End If

End Sub
'---------------------------------


P.S. La formule que t'a donné Isabelle, c'était pour empêcher d'avoir #Ref! dans une cellule en feuil2 lorsque tu
supprimes la ligne de la feuille 1


Salutations !




"JEAN" a écrit dans le message de news:

je voudrai laisser tel quel car j'ai un classeur qui a déja ccette
presentation,
je souhaite juste ajouter un bouton de commandes dans la feuille
1
et quand je selectionne,sur ma feuille 1 les lignes à supprimer j'apuie sur
le bouton de commande de la feuille 1 et il me supprimme egalement les ligne
de la feuille 2

par exemple si je selectionne ligne 13 14 15 16 de la feuille 1
et j'appuie sur le bouton de commande, il me supprime alors en meme temps
les lignes 13 14 15 16 de la feuille 2

merci de votre aide.


bonjour Jean,

remlace la formule
þuil1!A1
par
=INDIRECT("Feuil1!"&ADRESSE(LIGNE();COLONNE()))

et crecopie la vers le bas

isabelle


Bonjour,

j'ai un petit soucis:

j'ai deux feuilles dans mon classeur excel,
feuille 1 jai A1=1;A2=2;A3=3;A4=5

dans mon feuilet 2 j'ai directement la liaison c'est a dire
A1þuil1!A1
A2þuil1!A2
A3þuil1!A3
A4þuil1!A4

mon probleme est que quand je supprime une ligne dans feuille 1, sur la
feuille 2 cela me cree un #REF!

J'ai essayé des codes mais ca bug, je voudrai avoir au fait un bouton de
commande dans la feuille 1, quand je selectionnerai les lignes à supprimer de
la feuille 1 et j'appuierai sur ce bouton de commandes, je voudrai que les
meme lignes que je supprime à la feuille 1 soit supprimé aussi à la feuille2.

savez vous?

merci de votre aide




















Avatar
AV
Il me semble (non testé in situ) que l'utilisation d'un filtre serait plus
rapide qu'une boucle
Le principe (à adapter) :
Sélection des lignes à supprimer en "Feuil1" et clic sur le bouton auquel on
aura affecté la macro suivante (effacement en "Feuil2" des lignes affichant
#REF!) :

Sub zzzz()
Selection.EntireRow.Delete
With [Feuil2!A:A]
.AutoFilter Field:=1, Criteria1:="#REF!"
.SpecialCells(xlCellTypeFormulas,
23).SpecialCells(xlCellTypeVisible).EntireRow.Delete
End With
[Feuil2!A1].AutoFilter
End Sub

Exemple là :
http://cjoint.com/?lEimAE4F7d

AV
1 2