[Résolu][Calc]Supprimer plusieurs cellules contiguës

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 !
Drake
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 299
Inscription : 02 févr. 2012 00:51

[Résolu][Calc]Supprimer plusieurs cellules contiguës

Message par Drake »

Bonsoir,
Je voudrai supprimer plusieures cellules contiguës sur une même ligne comme le fait la commande contextuelle (Clic droit, supprimer) tout en déplaçant les cellules se trouvant à droite de la sélection vers la gauche.
Comme j'ai un très gros ficher à traiter je voudrai effectuer cette opération à l'aide d'une macro.
J'ai essayé de créer un code avec "Enregistrer une macro mais cela ne me convient pas car l'adressage de la sélection est sous la forme "A1:F1" alors que j'ai besoin qu'elle soit sous la forme "0,1:0,5" (je ne suis pas sur de la syntaxe).
Afin de l'inclure dans une procédure qui balayerai tout le fichier.
J'ai un début de code que voici:

Code : Tout sélectionner

Sub Deb
Dim DOC as object, Les_Feuilles as object,La_Feuille as object,Zone as object

	Doc = thisComponent
	Les_Feuilles = Doc.Sheets
	La_Feuille = Les_Feuilles.getByName("Feuille1")
	Zone = La_Feuille.getCellRangeByName("A1:F1")
	Doc.currentController.Select(Zone)
	
End Sub
ainsi qu'un petit fichier d'exemple:
Exemple 1.ods
Merci par avance de votre aide.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Drake le 10 févr. 2022 18:26, modifié 1 fois.
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26200
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Calc]Supprimer plusieurs cellules contiguës

Message par Dude »

Salut,
Drake a écrit :tout en déplaçant les cellules se trouvant à droite de la sélection vers la gauche
Donc le titre que tu as mis ne reflète pas cet aspect du problème.
Et fournir en plus une copie écran aurait facilité la lecture :
capture.png
Drake a écrit :alors que j'ai besoin qu'elle soit sous la forme "0,1:0,5"
Donc, tu prends la méthode getCellRangeByPosition
Si tu veux déplacer vers la gauche, il faut commencer par tester le contenu des cellules avec une boucle.
L'exercice est scolaire puisqu'il faut détecter les cellules vides des remplies pour la recopie en utilisant par exemple un Array.
Des ressources sur la gestion des tableaux ici : https://beaussier.com/sections/viewtopic.php?f=8&t=1563

On va encore se répéter mais l'usage de XRay est indispensable pour le développement de macro. :fou:
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Drake
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 299
Inscription : 02 févr. 2012 00:51

Re: [Calc]Supprimer plusieurs cellules contiguës

Message par Drake »

Salut,

Merci Dude de t'intéresser à mon problème.
C'est vrai que le titre ne reflète pas complètement le problème que je rencontre mais il est vrai également que l'espace manque pour faire de plus longues phrases.
Mais si tu veux déplacer vers la gauche, il faut commencer par les cellules de droite avec une boucle.
Ce n'est pas nécessaire car toutes les lignes commencent par 1 puis 2 puis 3 cellules vides... Et ce jusqu'au bout du fichier.
Je suis allé sur le lien que tu as mis. Cela ne me convenait pas car les opérations se faisaient sur une sélection déjà existante.

Finalement j'ai trouvé comment faire grâce à un code trouvé sur ce site : https://wiki.openoffice.org/wiki/FR/Doc ... and_Ranges

Pour que le code fonctionne il a fallut modifier la ligne
Doc = StarDesktop.CurrentComponent
par
Doc = thisComponent
Quelqu'un pourrait-il expliquer la raison ?

Voici le fichier exemple:
Exemple 1.ods
et le code :

Code : Tout sélectionner

Sub SuppCell
Print "Debut"
Dim Doc As Object
Dim Sheet As Object
Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
Dim indlig,indcol, startcol as integer

'Doc = StarDesktop.CurrentComponent
Doc = thisComponent
Sheet = Doc.Sheets(0)
startcol = 0
indlig = 0
indcol = 0

For indlig = 0 to 6
	indcol = indcol + 1
	CellRangeAddress.Sheet = 0
	CellRangeAddress.StartColumn = startcol
	CellRangeAddress.StartRow = indlig
	CellRangeAddress.EndColumn = indcol
	CellRangeAddress.EndRow = indlig
' 	print startcol & " " & indlig & " " & indcol & " " & indlig
Sheet.removeRange(CellRangeAddress, com.sun.star.sheet.CellDeleteMode.LEFT)
Next indlig

Print "Fin"
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)
Avatar de l’utilisateur
Michel JANZEF
ManitOOu
ManitOOu
Messages : 3584
Inscription : 12 janv. 2006 10:04

Re: [Calc]Supprimer plusieurs cellules contiguës

Message par Michel JANZEF »

Bonsoir,
Drake a écrit :...Finalement j'ai trouvé comment faire grâce à un code trouvé sur ce site : https://wiki.openoffice.org/wiki/FR/Doc ... and_Ranges

Pour que le code fonctionne il a fallut modifier la ligne
Doc = StarDesktop.CurrentComponent
par
Doc = thisComponent
Quelqu'un pourrait-il expliquer la raison ?...
Il me semble que la réponse se trouve dans la page Wiki de référence au paragraphe ThisComponent.
AOo 4.1.16 (Oracle JRE x86 - 1.8.0_471) et LibO 25.8.6.2 (Oracle JRE x64 - 1.8.0_471) - Windows 11 Famille 25H2 (26200.6725) 64 bits
Drake
Membre cOOnfirmé
Membre cOOnfirmé
Messages : 299
Inscription : 02 févr. 2012 00:51

Re: [Résolu][Calc]Supprimer plusieurs cellules contiguës

Message par Drake »

Bonsoir,

Merci Michel ZANZEF,
Et l'explication était au tout début du document !https://wiki.openoffice.org/wiki/FR/Doc ... and_Ranges
StarDesktop.CurrentComponent retourne le composant actif. Si vous travaillez dans l'EDI BASIC lorsque vous exécutez la macro, l'EDI BASIC est retourné. Une erreur d'exécution est générée, car l'EDI BASIC ne possède pas de composant de feuille de calcul.
Enregistrez le code de l'exemple et exécutez la macro à partir d'un classeur. Pour plus d'informations, reportez-vous au chapitre StarDesktop.
LibreOffice 6.2.7.1 (x64), Java (64b), Windows 10 (64b)