[Résolu][Base] Supprimer une ligne sur deux
Modérateur : Vilains modOOs
Règles du forum
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
-
- Fraîchement OOthentifié
- Messages : 3
- Inscription : 30 mai 2006 08:52
[Résolu][Base] Supprimer une ligne sur deux
Salut,
je suis un nouvelle adepte d'OOo suite au cramage de mon disque dur....
Je suis étudiant, et je dois traiter des données climatologiques.
Mes données de base ont un pas de temps de 15mins, mais je dois travailler sur un pas de temps de 30mins; d'ou le besoin de supprimer une ligne sur deux... Et comme j'ai 7500 lignes par tableau, c'est mieux de pas tout faire en manuel...donc une macro s'impose
Mais comment on fait quand on est pas fort?
merci d'avance.
je suis un nouvelle adepte d'OOo suite au cramage de mon disque dur....
Je suis étudiant, et je dois traiter des données climatologiques.
Mes données de base ont un pas de temps de 15mins, mais je dois travailler sur un pas de temps de 30mins; d'ou le besoin de supprimer une ligne sur deux... Et comme j'ai 7500 lignes par tableau, c'est mieux de pas tout faire en manuel...donc une macro s'impose
Mais comment on fait quand on est pas fort?
merci d'avance.
Dernière modification par Oukcha le 16 juil. 2010 17:50, modifié 1 fois.
Raison : Balisage, l'auteur ne s'étant plus manifesté depuis 2006, et la solution étant toujours d'actualité...
Raison : Balisage, l'auteur ne s'étant plus manifesté depuis 2006, et la solution étant toujours d'actualité...
OOo 2.0.2 sous WinXP SP2
-
- Membre OOrganisé
- Messages : 93
- Inscription : 03 avr. 2006 15:50
Salut salut !
Perso je ferai ca directement en sql je pense
Tu peux t'inspirer du code poster ici pour l'accès a la base de donnée.
A toi de changer le sInstrSQL correctement.
http://user.services.openoffice.org/fr/ ... c1414.html
Perso je ferai ca directement en sql je pense
Tu peux t'inspirer du code poster ici pour l'accès a la base de donnée.
A toi de changer le sInstrSQL correctement.
http://user.services.openoffice.org/fr/ ... c1414.html
OOo 2.0.2 sous windows XP
-
- Membre cOOnverti
- Messages : 362
- Inscription : 24 mai 2006 09:15
- Localisation : Mega-City One
Re: Macro pour supprimer une ligne sur deux
Déjà tu peux faire le 1er jet en utilisant le menu Outils / Macros / Enregistrer une macro.jefferson a écrit :Mais comment on fait quand on est pas fort?
merci d'avance.
Après comme je te l'ai dit, tu fais une boucle. Cela te donne :
Code : Tout sélectionner
REM ***** BASIC *****
sub EffaceLigne
rem ----------------------------------------------------------------------
rem define variables
dim document as object
dim dispatcher as object
dim nbLigne as integer
dim args2(1) as new com.sun.star.beans.PropertyValue
rem ----------------------------------------------------------------------
rem get access to the document
document = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
args2(0).Name = "By"
args2(0).Value = 1
args2(1).Name = "Sel"
args2(1).Value = false
nbLigne = InputBox( "Nombre de lignes à supprimer ?", "Attention")
do while nbLigne <> 0
rem ----------------------------------------------------------------------
dispatcher.executeDispatch(document, ".uno:DeleteRows", "", 0, Array())
dispatcher.executeDispatch(document, ".uno:GoDown", "", 0, args2())
nbLigne = nbLigne-1
loop
end sub
Propulsé par OpenOffice 4.1.6 sous Windows 10 x64
-
- Membre cOOnverti
- Messages : 362
- Inscription : 24 mai 2006 09:15
- Localisation : Mega-City One
-
- Fraîchement OOthentifié
- Messages : 7
- Inscription : 16 juil. 2010 09:43
Re: Macro pour supprimer une ligne sur deux
Bonjour,
je viens de tomber sur ce fil et il répond parfaitement à mes attentes, je te remercie pour ta macro qui m'a bien servi.
je viens de tomber sur ce fil et il répond parfaitement à mes attentes, je te remercie pour ta macro qui m'a bien servi.
OOo3 windows xp
-
- ManitOOu
- Messages : 2668
- Inscription : 30 avr. 2009 04:54
- Localisation : CATALUNYA
Re: [Résolu][Base] Supprimer une ligne sur deux
Bonjour
Je trouve l'utilisation du dispatcher toujours un peu lourde, donc j'essaye de m'en passer.
La macro suivante supprime les lignes paires :
Pour supprimer les lignes impaires, il faut mettre en commentaire la 1ère ligne oSheet.Rows.removeByIndex(i,1) et activer la seconde.
cOOordialement
Je trouve l'utilisation du dispatcher toujours un peu lourde, donc j'essaye de m'en passer.
La macro suivante supprime les lignes paires :
Code : Tout sélectionner
Sub SupprLignes
Dim oSheet, oCurseur As Object
Dim LigMax As Long
oSheet = ThisComponent.Sheets(0) ' Définit la 1ere feuille
oCurseur = oSheet.createCursor
oCurseur.gotoEndOfUsedArea( False )
LigMax = oCurseur.RangeAddress.EndRow ' Index de la dernière ligne
'
For i = LigMax To 0 step -1
If (i AND 1) Then
' Supprime les Lignes Paires
oSheet.Rows.removeByIndex(i,1)
Else
' Supprime les Lignes Impaires
' oSheet.Rows.removeByIndex(i,1)
Endif
Next i
End Sub
cOOordialement
Ajout : Je viens de remarquer qu'il s'agissait de Base... Je dois être mal réveillé ce matin... Tant pis, je laisse : la récupération peut très bien se faire sur Calc, quitte à transférer ensuite le résultat vers Base ... |
Dernière modification par Churay le 22 juil. 2010 21:25, modifié 1 fois.
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
-
- Grand Maître de l'OOffice
- Messages : 11276
- Inscription : 02 mai 2006 08:42
Re: [Résolu][Base] Supprimer une ligne sur deux
Bonjour
Cela dit, puisque le sujet est remonté, qu'il s'agit de base et que le sujet est intéressant, ci-dessous une solution à base de SQL.
On veut supprimer une ligne sur deux. L'idée qui vient est de supprimer les lignes (im)paires.
On va donc commencer par ajouter un compteur de ligne. Pour cela, dans Outils > SQL exécuter une instruction du type :
Cette instruction crée un compteur. Bien que créé dans Outils > SQL (et non dans une requête ou "dans" un champ de table) le compteur ne sera pas volatile, même après fermeture/réouverture de la base.
On peut utiliser ce compteur dans une requête du type :
Nous créons une "vue" en partant de cette requête (car l'étape suivante nécessite une table ou une vue). Voir la vue "VueTravail" dans la base exemple.
La suppression des données (une ligne sur deux) se fera en exécutant par Outils > SQL une instruction du type :
Autrement dit, on supprime de la table tous les enregistrements pour lesquels le champ ID est figure dans la liste des enregistrements sélectionnés par la vue "VueTravail"
En effet... de plus il s'agit d'un sujet datant de 2006Churay a écrit :Je viens de remarquer qu'il s'agissait de Base...
Je dois être mal réveillé ce matin...
Cela dit, puisque le sujet est remonté, qu'il s'agit de base et que le sujet est intéressant, ci-dessous une solution à base de SQL.
On veut supprimer une ligne sur deux. L'idée qui vient est de supprimer les lignes (im)paires.
On va donc commencer par ajouter un compteur de ligne. Pour cela, dans Outils > SQL exécuter une instruction du type :
Code : Tout sélectionner
CREATE SEQUENCE "PYS" AS INTEGER
On peut utiliser ce compteur dans une requête du type :
Code : Tout sélectionner
SELECT "ID", "Nom", "Date naissance", NEXT VALUE FOR "PYS" AS "CPT" FROM "Table2"
- Comme le montre la copie d'écran il est nécessaire d'exécuter ceci en mode SQL direct (le bouton correspondant doit être enfoncé)
- On demande pour chaque ligne la valeur suivante pour le compteur.
- S'agissant d'un compteur "base" (et non lié à la table) la valeur sera séquentielle mais pas nécessairement partant de zéro (commence à la dernière valeur utilisée + 1 soit 278 dans l'exemple)
Code : Tout sélectionner
SELECT "ID" FROM "Numéroter" AS "Numéroter" WHERE MOD( "CPT", 2 ) = 0
La suppression des données (une ligne sur deux) se fera en exécutant par Outils > SQL une instruction du type :
Code : Tout sélectionner
DELETE FROM "Table2" WHERE "ID" IN (SELECT "ID" FROM "VueTravail" )
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.