[Résolu][Calc] Supprimer Cellule Vide et remonter

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: 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 !
mesmes
Membre OOrganisé
Membre OOrganisé
Messages : 70
Inscription : 21 nov. 2011 08:22

[Résolu][Calc] Supprimer Cellule Vide et remonter

Message par mesmes »

Hello,

Je continu à migrer mon fichier Excel sous Calc, et là j'arrive devant un soucis et je ne vois pas d'equivalent Basic:

Supprimer complétement les cellules vides (les éliminer !!!) et NON par le ClearContent qui supprime le contenu et NON PLUS supprimer des lignes complètes car dans d'autres colonnes il y a probablement des des cellules non vides.

La macro VBA donne:

Code : Tout sélectionner

'suppression des blancs
    Cells.Select
    Selection.SpecialCells(xlCellTypeBlanks).Select
    Selection.Delete Shift:=xlUp
Court et sympas, mais là j'ai cherché dans la bible (yes je me la suis faite achetée :wink: )...Nothing, sur internet ... non plus
Je ne suis pas sure de la faisabilité.

Dois-je abandonner cette piste et essayer de trouver une autre alternative ?

Merci de votre aide.

Je joins un fichier test.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par mesmes le 12 déc. 2011 08:21, modifié 5 fois.
OpenOffice 3.3 sous Windows 7
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Calc]Supprimer Cellule (Delete et non Clear)

Message par Churay »

Bonjour
mesmes a écrit :j'ai cherché dans la bible (yes je me la suis faite achetée :wink: )...
Tu as du mal lire le chapitre 8 (si mes souvenirs sont bons)
lesLignes.removeByIndex(2,3)
 Ajout : J'ai mal lu : pas les lignes complètes... 
Nothing, sur internet ... non plus
Sur le net, il n'y a peut-être rien, pais ici, il y a...
 Ajout : à vérifier quand même... 
 Ajout : ce qui revient à dire que, si une cellule vide est trouvée, il faut remonter les suivantes ? 
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
mesmes
Membre OOrganisé
Membre OOrganisé
Messages : 70
Inscription : 21 nov. 2011 08:22

Re: [Calc]Supprimer Cellule (Delete et non Clear)

Message par mesmes »

Churay a écrit :
 Ajout : ce qui revient à dire que, si une cellule vide est trouvée, il faut remonter les suivantes ? 
Mon but est de remonter toutes les cellules non vides en haut. je vais mettre le résultat que je veux obtenir

donc me suis dis, je crois que je vais partir sur un copy paste, j’espère que je v réussir à le faire si pas d'autre solution.
Dernière modification par mesmes le 09 déc. 2011 10:56, modifié 1 fois.
OpenOffice 3.3 sous Windows 7
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25175
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]Supprimer Cellule (Delete et non Clear)

Message par Dude »

Salut,
mesmes a écrit :Nothing, sur internet ... non plus
Toujours pas habitué à la recherche : http://user.services.openoffice.org/fr/ ... te+cellule
mesmes
Membre OOrganisé
Membre OOrganisé
Messages : 70
Inscription : 21 nov. 2011 08:22

Re: [Calc]Supprimer Cellule (Delete et non Clear)

Message par mesmes »

Dude a écrit :Salut,
Toujours pas habitué à la recherche : http://user.services.openoffice.org/fr/ ... te+cellule
Yes mais le petit soucis est que je ne veux pas de ClearContent, vu que je veux ÉLIMINER ces cellule, je crois que je vais rééditer mon premier post, je n'étais certainement pas assez claire. :roll:
OpenOffice 3.3 sous Windows 7
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25175
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]Supprimer Cellule (Delete et non Clear)

Message par Dude »

mesmes a écrit :vu que je veux ÉLIMINER ces cellule
Contradictoire avec :
mesmes a écrit :et NON PLUS supprimer des lignes complètes
Bref, donne nous deux copies écran "avant" et "après" de ce qui se passe sur ta feuille.
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Calc]Supprimer Cellule (Delete et NON ClearContent)

Message par Churay »

Une précision sur la zone concernée : toute la plage occupée dans la feuille ? (dans ton fichier exemple, a1:C18) ?
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
mesmes
Membre OOrganisé
Membre OOrganisé
Messages : 70
Inscription : 21 nov. 2011 08:22

Re: [Calc]Supprimer Cellule (Delete et NON ClearContent)

Message par mesmes »

toute la plage occupée dans la feuille ?
toutes les cellule utilisées, la plage est variable selon le fichier.
Contradictoire
Ce qui veut dire --> Pas faisable en openOffice ?? :?: car en excel, ça m'a étonné, mais ça existe bien !!! (c'est pas une insulte hein !!! :oops: )
Mais on devrait voter pour qu'on le fasse ...[Issue] ?!!! (Si ça n'existe pas :D )
donne nous deux copies écran "avant" et "après" de ce qui se passe sur ta feuille.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par mesmes le 09 déc. 2011 11:07, modifié 1 fois.
OpenOffice 3.3 sous Windows 7
Avatar de l’utilisateur
Churay
ManitOOu
ManitOOu
Messages : 2668
Inscription : 30 avr. 2009 04:54
Localisation : CATALUNYA

Re: [Calc]Supprimer Cellule (Delete et NON ClearContent)

Message par Churay »

mesmes a écrit :Pas faisable en openOffice
pfff....

Via l'Api, je ne sais pas : et si on le peut, je crains un code un peu complexe.
Mais via le dispatcher, c'est réalisable simplement.

Je vais manger et je m'y mets au retour si tu n'as pas trouvé de solution entre temps
cOOordialement
---
AOO 4.0.1 W7-PRO & LO 5.1.6.2 Debian 7.8 & Ubuntu 16.04 LTS
---
F1 : ça aide...
XRay + SDK :super:
---
Quand le NOT CONFIRMED sera corrigé (OOo et LO) , je serai heureux...
mesmes
Membre OOrganisé
Membre OOrganisé
Messages : 70
Inscription : 21 nov. 2011 08:22

Re: [Calc]Supprimer Cellule (Delete et NON ClearContent)

Message par mesmes »

Churay a écrit :
mesmes a écrit :Pas faisable en openOffice
pfff....
Wé bon, j'ai oublié le :?: . c'était loin d'être une affirmation. et en plus pas la peine de le prendre mal, je suis loin d’entre une supportrice de MS ... et même très ravie d'avoir fait connaissance avec OOo :super: .
Je vais manger et je m'y mets au retour si tu n'as pas trouvé de solution entre temps
t’inquiète, Je ne me tournerai pas les pouces ... je vais essayer d y arriver, quelque soit la façon !!!

Merci
OpenOffice 3.3 sous Windows 7
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25175
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]Supprimer Cellule (Delete et NON ClearContent)

Message par Dude »

mesmes a écrit :je vais essayer d y arriver, quelque soit la façon !!!
Reprendre le fil que je donne : l'enregistreur de macro fait cela très bien.

Code : Tout sélectionner

dim document   as object
dim dispatcher as object
document   = ThisComponent.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
dim args1(0) as new com.sun.star.beans.PropertyValue
args1(0).Name = "Flags"
args1(0).Value = "U"
dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, args1())
Titre à modifier pour : [Calc] Cellule vide supprimée et remonter
mesmes
Membre OOrganisé
Membre OOrganisé
Messages : 70
Inscription : 21 nov. 2011 08:22

Re: [Calc]Supprimer Cellule (Delete et NON ClearContent)

Message par mesmes »

Dude a écrit :

Code : Tout sélectionner

dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, args1())
Merci,
Petit Soucis: cette fonction est incompatible avec la sélection multiple (j'ai rien inventé, c’était le message d'erreur)
ça veut dire que je dois boucler colonne par colonne, et zone par zone, pour sélectionner les cellules vides pas à pas puis les supprimer.
De toute façon si je n'ai pas d'autre solution j'utiliserai bien ça, et voir sur un vrai fichier, combien ça va tourner.

Après un petit moment et surtout après m’être remise du "verrouillage" du fil, je re post :

Alors j'ai trouvé une alternative "de malade", qui ma cassé grave la tête, mais c'est quand même un truc de dingue de remplacer 3 ligne de VBA par ça :

Code : Tout sélectionner

sub SupprimeEtRemonte  
	dim odoc as object, osheets as object, cell as object
	dim zonevide as variant, mazone as object, sh as object
	dim oCursor as object, zoneSel as object, lign as object
	dim zoneAdef as string
	dim i as long, j as long, row as long
	dim EndRow as long, EndCol as long
	dim VIDE as boolean, NomDef as string
	dim maCell as object, leszones as object
	
	VIDE = true
	row = 0
	
	odoc = thiscomponent
	osheets = odoc.Sheets
	sh = oSheets.getByName("Feuille1")     
	
	oCursor = sh.createCursor()
	oCursor.gotoEndOfUsedArea( False )
	EndRow = oCursor.rangeAddress.EndRow
	EndCol = oCursor.rangeAddress.EndColumn

	for j  = 0 to EndCol   
		for i  = 0   to EndRow
		
			Cell = sh.getCellByPosition(j, i)
			
			if Cell.string <> "" and i = 0 then
			  VIDE = false
			end if
			  
			if Cell.string = ""  and VIDE = false then
			  VIDE = true
			  row = i
			end if
			
			if Cell.string <> "" and VIDE = true then
			     VIDE = false
			     odoc.currentController.select(sh.getCellRangeByPosition(j,row,j,i-1))
			     call DeleteCell
			     i = row
			end if
	        
		next i
	      row = 0
	next j
End sub

'--------------------------------------------------------------------------
'Macro pour la suppression d'une zone sélectionnée
'--------------------------------------------------------------------------
Sub DeleteCell
      
   dim document   as object
   dim dispatcher as object
   document   = ThisComponent.CurrentController.Frame
   dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")
   dim args1(0) as new com.sun.star.beans.PropertyValue
   args1(0).Name = "Flags"
   args1(0).Value = "U"
   dispatcher.executeDispatch(document, ".uno:DeleteCell", "", 0, args1())      

End Sub

Voilà, j'ai rien trouvé de mieux
Dernière modification par mesmes le 12 déc. 2011 08:45, modifié 2 fois.
OpenOffice 3.3 sous Windows 7
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25175
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Résolu][Calc] Supprimer Cellule Vide et remonter

Message par Dude »

mesmes a écrit :cette fonction est incompatible avec la sélection multiple
Pas trop eu le temps de chercher mais ce vieux problème fait l'objet d'un rapport : 21280.

A partir de là, pas de possibilité de faire un simple appel de fonction.
mesmes a écrit :mais c'est quand même un truc de dingue de remplacer 3 ligne de VBA
VBA est un savoureux mélange de langage et d'API alors que le Basic reste uniquement un moyen d'accès à l'API.

On peut raccourcir quelque peu le code avec :

Code : Tout sélectionner

Sub SupprimeEtRemonte
oDoc = ThisComponent
oFeuille = oDoc.currentController.activeSheet
oPlage = oDoc.CurrentSelection.getRangeAddress
for oCol = oPlage.EndColumn to oPlage.StartColumn step -1
        for oLig = oPlage.EndRow to oPlage.StartRow step -1
                oCell = oFeuille.getCellByPosition(oCol, oLig) 'Accès à la cellule
                if oCell.Type = com.sun.star.table.CellContentType.EMPTY then
                        oFeuille.removeRange(oCell.RangeAddress, com.sun.star.sheet.CellDeleteMode.UP)
                end if
        next oLig
next oCol
End Sub
Il est donc normal d'avoir à parcourir la sélection (à l'envers) pour arriver à ses fins.
mesmes
Membre OOrganisé
Membre OOrganisé
Messages : 70
Inscription : 21 nov. 2011 08:22

Re: [Résolu][Calc] Supprimer Cellule Vide et remonter

Message par mesmes »

Hello,

Dude, j’exécute ta Macro --> Rien, aucun changement, Bizarre !!!
OpenOffice 3.3 sous Windows 7
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25175
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Résolu][Calc] Supprimer Cellule Vide et remonter

Message par Dude »

mesmes a écrit :j’exécute ta Macro --> Rien, aucun changement, Bizarre !!!
As-tu regardé le code donné ?

Code : Tout sélectionner

oPlage = oDoc.CurrentSelection.getRangeAddress
Il faut sélectionner la plage de cellules à analyser pour que la routine puisse la parcourir.
mesmes
Membre OOrganisé
Membre OOrganisé
Messages : 70
Inscription : 21 nov. 2011 08:22

Re: [Résolu][Calc] Supprimer Cellule Vide et remonter

Message par mesmes »

Dude a écrit : Il faut sélectionner la plage de cellules à analyser pour que la routine puisse la parcourir.
OOops Sorry,
Merci :wink:
OpenOffice 3.3 sous Windows 7