[Résolu][Calc] Supprimer ligne sélectionnée dans 1 autre doc

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 !
Solaris
Membre hOOnoraire
Membre hOOnoraire
Messages : 146
Inscription : 02 août 2017 21:55

[Résolu][Calc] Supprimer ligne sélectionnée dans 1 autre doc

Message par Solaris »

Bonjour,

J'ai une macro qui fonctionne bien mais dont j'aimerai ajouter une fonctionnalité.

Cette macro me permet de sélectionner, depuis le fichier Données (bouton ajout de dossier), une ligne dans mon document 'Dossiers en cours" en fonction des éléments de la colonne B et de la copier/coller dans en ligne 2 du fichier "Données".
Je souhaiterai que la ligne copiée dans le document "Dossiers en cours" soit supprimée après avoir été copiée.
Pourriez-vous m'aider svp ?

Je joins une version allégée et anonymisée des fichiers.

Je vous en remercie par avance.

Bien cordialement

Solaris

Code : Tout sélectionner

Option Explicit

Sub Main
Dim oDoc As Object, Feuilles As Object, F1 As Object, F2 As Object, oDocDest As Object
Dim Zone As Object, Cherche As Object, Trouve As Object
Dim DestURL As String
Dim Mot As String, Ligne As Integer, i As Integer
Dim Args () As new com.sun.star.beans.PropertyValue
Dim U as Variant, n as long

oDoc = ThisComponent
Mot = inputBox("Numéro de RG ?")
Feuilles = oDoc.Sheets
            'DestURL = ConvertToUrl("C:/users/ce.ri/desktop/Rédaction/Données.ods")'Adresse du fichier destinataire
           ' 4 lignes nouvelles
       U = split(oDoc.Url, "/")
       n = Ubound(U)
       U(n) = "Dossiers en cours.ods"
       DestURL = join(U, "/")


oDocDest = StarDesktop.loadComponentFromURL(DestURL,"_blank",0 ,Args())
F1 = oDocDest.Sheets.GetByName("Champs")
F2 = Feuilles.GetByName("Champs")
Zone = F1.GetCellRangeByName("B2:B200")
	Cherche = Zone.createSearchDescriptor

		With Cherche
			.SearchString = Mot
			.SearchWords = False
		End With
	Trouve = Zone.FindFirst(Cherche)
	i = 1
	Do until isnull(Trouve)
		Ligne = Trouve.RangeAddress.EndRow
		F2.GetCellRangeByPosition(0,i,451,i).DataArray = F1.GetCellRangeByPosition(0,Ligne,451,Ligne).DataArray
		Trouve = Zone.FindNext(Trouve,Cherche)
		i = i +1
	Loop
ThisComponent.store(True)
          oDocDest.store
          oDocDest.close(True)
End Sub
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Solaris le 01 avr. 2021 20:18, modifié 1 fois.
Libre office 7.3.2.2
Windows 11
Avatar de l’utilisateur
Dolev
InconditiOOnnel
InconditiOOnnel
Messages : 945
Inscription : 19 août 2018 05:20

Re: [Calc] Supprimer ligne sélectionnée dans un autre docume

Message par Dolev »

Bonsoir,

Pour supprimer une ligne entière, tu peux passer par le dispatcher :

Code : Tout sélectionner

oFrame = oDocDest.CurrentController.Frame
dispatcher = createUnoService("com.sun.star.frame.DispatchHelper")

dim args(0) as new com.sun.star.beans.PropertyValue
args(0).Name = "Flags"
args(0).Value = "R"

dispatcher.executeDispatch(oFrame, ".uno:DeleteCell", "", 0, args())

Open Office 4.1.15 sous Windows 11
Solaris
Membre hOOnoraire
Membre hOOnoraire
Messages : 146
Inscription : 02 août 2017 21:55

Re: [Calc] Supprimer ligne sélectionnée dans un autre docume

Message par Solaris »

Bonsoir,

Je vous en remercie mais je n'arrive pas à l'intégrer ... Je n'arrive qu'à supprimer la celle de la colonne A... Vous auriez plus d'élement à m'indiquer svp ?
Ma difficulté est d'arriver à "définir" la zone à effacer car la ligne sélectionnée dépend du résultat mis dans la question de la boîte de dialogue. Je voudrais qu'avant d'enregistrer et ferme le document "dossiers en cours" la ligne soit supprimée.
Merci par avance
Libre office 7.3.2.2
Windows 11
zeguedon
ManitOOu
ManitOOu
Messages : 3031
Inscription : 02 juil. 2014 17:25

Re: [Calc] Supprimer ligne sélectionnée dans un autre docume

Message par zeguedon »

Bonsoir,
Vraiment pas certain d'avoir tout bien compris :? mais...je remplacerais bien :

Code : Tout sélectionner

Do until isnull(Trouve)
      Ligne = Trouve.RangeAddress.EndRow
      F2.GetCellRangeByPosition(0,i,451,i).DataArray = F1.GetCellRangeByPosition(0,Ligne,451,Ligne).DataArray
      Trouve = Zone.FindNext(Trouve,Cherche)
      i = i +1
   Loop
par

Code : Tout sélectionner

Do until isnull(Trouve)
      Ligne = Trouve.RangeAddress.EndRow
      F2.GetCellRangeByPosition(0,i,451,i).DataArray = F1.GetCellRangeByPosition(0,Ligne,451,Ligne).DataArray
      F1.Rows.RemoveByIndex(ligne,1)
      Trouve = Zone.FindNext(Trouve,Cherche)
      i = i +1
   Loop
Comment baliser [Résolu] ?
AOO
LibreOffice
Sous Linux
Solaris
Membre hOOnoraire
Membre hOOnoraire
Messages : 146
Inscription : 02 août 2017 21:55

Re: [Calc] Supprimer ligne sélectionnée dans un autre docume

Message par Solaris »

Bonsoir c'est parfait !!
Un grand merci !
Bonne soirée
Libre office 7.3.2.2
Windows 11