OVH Cloud OVH Cloud

Suppression de lignes

3 réponses
Avatar
Greg
Bonjour,

J'ai écrit une macro qui exporte une base de données Excel vers un nouveau
fichier (Excel).
Dans ce nouveau fichier, je procède alors à la suppression des lignes de ma
base non pertinentes avec les paramètres de l'extrait (j'envoie ces fichiers
à différentes personnes qui n'ont pas besoin de connaître les données
concernant les autres).
Mon pb est que je ne parviens justement pas à supprimer des lignes dans ce
nouveau fichier. Voici la commande que j'utilise:
Rows (xxx).delete shift:=xlUp

Pourtant, j'ai essayé d'autres commandes qui fonctionnent: colorier la
ligne, supprimer le contenu de ses cellules… Seule la suppression pure et
simple de la ligne ne produit aucun résultat.
J'ai changé d'ordinateur il y a une semaine: y-a-t'il une option
particulière à cocher dans les options d'Excel pour effectuer ce type
d'opération?

Une solution plus simple consiste à filtrer la base avant de l'exporter
(c'est ce que j'avais commencé par faire), mais le pb est que les lignes
masquées par le filtre sont aussi copiées lors de l'export et que chacun de
mes interlocuteurs peut alors voir l'intégralité de ma base en supprimant le
filtre...

Quelque soit la solution que vous m'aiderez à debugger, merci d'avance de
votre aide!

Grégory

3 réponses

Avatar
CAP2
Salut,

concernant la solution du filtre :

tu filtres, tu sélectionnes toutes les lignes résultantes, tu vas dans
Edition --> Atteindre --> Cellules --> Cellules visibles seulement.

Puis tu fais ton Copier/Coller.

Les lignes masquées n'apparaîtront pas dans le tableau exporté...

Ca marche ?

CAP2
Avatar
Clément Marcotte
Bonjour,

Voici une réponse qui n'en n'est pas une, mais bon. Je serais tenté de le
faire autrement.

Tu aurais un fichier-maître qui te servirait de base. Puis avec des requêtes
que tu bâtirais avec MsQuery (Outils-Données-Données Externes - Créer une
requête ou diretement dans des programmes avec ADO, tu prendrais les données
pertinentes.

Cela t'éviterait d'effacer à chaque fois; avec tous les risques que cela
comporte.



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

Bonjour,

J'ai écrit une macro qui exporte une base de données Excel vers un nouveau
fichier (Excel).
Dans ce nouveau fichier, je procède alors à la suppression des lignes de
ma
base non pertinentes avec les paramètres de l'extrait (j'envoie ces
fichiers
à différentes personnes qui n'ont pas besoin de connaître les données

concernant les autres).
Mon pb est que je ne parviens justement pas à supprimer des lignes dans ce
nouveau fichier. Voici la commande que j'utilise:
Rows (xxx).delete shift:=xlUp

Pourtant, j'ai essayé d'autres commandes qui fonctionnent: colorier la
ligne, supprimer le contenu de ses cellules. Seule la suppression pure et
simple de la ligne ne produit aucun résultat.
J'ai changé d'ordinateur il y a une semaine: y-a-t'il une option
particulière à cocher dans les options d'Excel pour effectuer ce type
d'opération?

Une solution plus simple consiste à filtrer la base avant de l'exporter
(c'est ce que j'avais commencé par faire), mais le pb est que les lignes
masquées par le filtre sont aussi copiées lors de l'export et que chacun
de
mes interlocuteurs peut alors voir l'intégralité de ma base en supprimant
le
filtre...

Quelque soit la solution que vous m'aiderez à debugger, merci d'avance de
votre aide!

Grégory


Avatar
Herdet
Bonsoir Greg,
C'est quand même étonnant ce blocage car en général Rows("15:21").Delete
Shift:=xlUp fonctionne toujours bien.
La solution qui consite à transférer toute la base pis supprimer les lignes
inutiles me paraît lourde et peu rapide.
Je pense qu'il est préférable de transférer dans le classeur destination que
les données concernées avec la ligne de champs bien sûr.
Je te donne ci-dessous une procédure à adapter à ta base.
J'ai recréé en VBA quelques fonctions de feuilles très utiles dont EQUIVAL
et NBSI qui revoie une valeur ou 0
Cordialement
Robert
'------------------------------------------------------------------------------------
Sub Transfert()
' 1)trier la base source par les noms des personnes
Range("G1:J500").Sort Key1:=Range("G2"), Order1:=xlAscending, Header:= _
xlYes, OrderCustom:=1, MatchCase:úlse, Orientation:=xlTopToBottom,
DataOption1:=xlSortNormal
' 2)copier et coller la ligne des champs dans le nouveau classeur
ActiveSheet.Rows("1:1").Copy
Destination:=Workbooks("Clas_dest").Worksheets("Feuil1").Range("A1")
' 3) sélectionner les lignes de la personne concernée (Toto 1) LiD à LiF
' exemple avec noms des personnes dans la colonne A
LiD = EQUIVAL("Toto 1", Range("A:A"), 0)
LiF = LiD + NBSI(Range("A:A"), "Toto 1") - 1
' 4) les copier et les coller dans le classeur destination
ActiveSheet.Rows(LiD & ":" & LiF).Copy
Destination:=Workbooks("Clas_dest").Worksheets("Feuil1").Range("A2")
Workbooks("Clas_dest").Activate
End Sub
'---------------------------------------------------------------------------------
Function EQUIVAL(Val_Ch As Variant, Tableau As Range, Mode_Rech As Integer)
As Variant
' fonctionnement identique à la fonction EQUIV de feuille de calcul
EQUIVAL = 0
On Error Resume Next
EQUIVAL = Application.WorksheetFunction.Match(Val_Ch, Tableau,
Mode_Rech)
On Error GoTo 0
End Function
'----------------------------------------------------------------------------------
Function NBSI(Tableau As Range, ByVal Val_Test As String) As Variant
' fonctionnement identique à la fonction NB de feuille de calcul
NBSI = 0
If IsError(Application.WorksheetFunction.CountIf(Tableau, "=" &
Val_Test)) = False Then
NBSI = Application.WorksheetFunction.CountIf(Tableau, "=" &
Val_Test)
End If
End Function

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

Bonjour,

J'ai écrit une macro qui exporte une base de données Excel vers un nouveau
fichier (Excel).
Dans ce nouveau fichier, je procède alors à la suppression des lignes de
ma
base non pertinentes avec les paramètres de l'extrait (j'envoie ces
fichiers
à différentes personnes qui n'ont pas besoin de connaître les données
concernant les autres).
Mon pb est que je ne parviens justement pas à supprimer des lignes dans ce
nouveau fichier. Voici la commande que j'utilise:
Rows (xxx).delete shift:=xlUp

Pourtant, j'ai essayé d'autres commandes qui fonctionnent: colorier la
ligne, supprimer le contenu de ses cellules. Seule la suppression pure et
simple de la ligne ne produit aucun résultat.
J'ai changé d'ordinateur il y a une semaine: y-a-t'il une option
particulière à cocher dans les options d'Excel pour effectuer ce type
d'opération?

Une solution plus simple consiste à filtrer la base avant de l'exporter
(c'est ce que j'avais commencé par faire), mais le pb est que les lignes
masquées par le filtre sont aussi copiées lors de l'export et que chacun
de
mes interlocuteurs peut alors voir l'intégralité de ma base en supprimant
le
filtre...

Quelque soit la solution que vous m'aiderez à debugger, merci d'avance de
votre aide!

Grégory