[Résolu][Calc] Suppression automatique de plusieurs plages de cellules dans plusieurs feuilles.

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 !
Seb1258
Membre hOOnoraire
Membre hOOnoraire
Messages : 106
Inscription : 11 sept. 2024 15:31
Localisation : Pas loin du Canada

[Résolu][Calc] Suppression automatique de plusieurs plages de cellules dans plusieurs feuilles.

Message par Seb1258 »

Bonjour à tous le monde,

Je reviens vers vous une nouvelle fois pour une manipulation que je ne sais pas faire du tous... J'ai regardé sur le forum mais je ne trouve pas mon bonheur malgré tous les sujets qui tournent autour.

Je viens de faire un tableau (que vous trouverez en PJ) et je souhaiterai pouvoir appuyer sur un bouton afin de supprimer automatiquement un grand nombre de données qui se trouvent dans plusieurs feuilles. Cela me permettra de prévoir le changement d'année afin de commencer la nouvelle année avec un tableau vierge.

Les feuilles concernées sont : "Janvier_AFIS" jusqu'à "Decembre_AFIS" et "Janvier_SSLIA" jusqu'à "Decembre_SSLIA" (soit 24 feuilles)
Les plages concernées sont identiques sur toutes les feuilles : A4:D298. Il y a néanmoins une particularité sur les feuilles "Janvier_AFIS", "Janvier_SSLIA", "Fevrier_AFIS" et "Fevrier_SSLIA" pour lesquelles je souhaiterai supprimer également les plages suivantes :
  • "Janvier_AFIS" et "Janvier_SSLIA" : plages à supprimer en plus : N5:O14 et N18:O27
  • "Fevrier_AFIS" et "Fevrier_SSLIA" : plages à supprimer en plus : O5:O14 et O18:O27
Pour faire simple, je souhaite pouvoir effacer le contenu de toutes les cellules en jaunes sur les feuilles qui comportent un nom de mois.

Dans la mesure du possible j'aurais souhaité avoir une fenêtre de confirmation avant l’exécution de la macro.

J'espère que la manipulation est possible (il me semble que oui même si je ne sais pas comment rédiger la macro) et que mes explications auront été claires.

Merci d'avance :D
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Seb1258 le 08 nov. 2024 10:48, modifié 2 fois.
Libre office 7.3.7.2 < Obligation de version :fou:

Windows 10 Pro
Avatar de l’utilisateur
Oukcha
RespOOnsable modération
RespOOnsable modération
Messages : 4254
Inscription : 06 oct. 2008 08:03

Re: Suppression automatique de plusieurs plages de cellules dans plusieurs feuilles.

Message par Oukcha »

Bonjour,

Merci de relire le bandeau rouge en haut de page, et d'appliquer le balisage adéquat.

Cordialement
                                        
Pour tout savoir sur le fonctionnement de ce forum :arrow: À lire avant tout ! Image
Avatar de l’utilisateur
Noonours
PassiOOnné
PassiOOnné
Messages : 529
Inscription : 11 mai 2013 00:11
Localisation : Aix en Provence

Re: Suppression automatique de plusieurs plages de cellules dans plusieurs feuilles.

Message par Noonours »

Bonjour
Merci de tenir compte des remarques du modérateur.

Tu trouveras de quoi effacer une plage de cellules avec la méthode ClearContents, et ses paramètres CellFlags.

Un exemple simple qui agit sur les trois premières feuilles pour test, je te laisse compléter la liste de noms de feuilles dans l'array "NomsFeuilles".
 Ajout : J'avais oublié le message d'avertissement, ainsi que les plages multiples. Voici le nouveau script modifié: 

Code : Tout sélectionner

Sub EffacerZones
 rep = msgBox ("Vous êtes sur le point d'effacer les données." & chr(10) & "Continuer?", 4+48)
 if rep <> 6 then exit sub 

 oDoc = thiscomponent
 NomsFeuilles = Array("Janvier_AFIS", "Fevrier_AFIS", "Mars_AFIS")
	For T = 0 to UBound(NomsFeuilles)
		oFeuil = oDoc.sheets.getByName(NomsFeuilles(T))

		Select Case oFeuil.Name 
			Case "Janvier_AFIS" , "Janvier_SSLIA"
				MaZone = Array("A4:D298","N5:O14","N18:O27")
			Case "Fevrier_AFIS" , "Fevrier_SSLIA"
				MaZone = Array("A4:D298","O5:O14","O18:O27")
			Case Else
				MaZone = Array("A4:D298")
		End Select 

		For V = 0 to UBound(MaZone)
			ZoneAEffacer = oFeuil.GetCellRangeByName(MaZone(V))
			With com.sun.star.sheet.CellFlags
			ZoneAEffacer.ClearContents( .VALUE + .DATETIME + .STRING ) 'valeurs numériques, valeurs dates et heures, chaines de caractères
			End with
		Next V
	Next T
End Sub
Cordialement,
Dernière modification par Noonours le 08 nov. 2024 00:50, modifié 2 fois.
Noonours procrastinateur perfectionniste: "Je fais rien, mais demain je l'ferai mieux"

Pour obtenir la réponse la plus précise possible, VEUILLEZ JOINDRE UN FICHIER

LibO 24.8.7.2 et OpenOffice 4.1.15 sous Windows 10
Avatar de l’utilisateur
luky-luke
InconditiOOnnel
InconditiOOnnel
Messages : 948
Inscription : 27 nov. 2010 00:17
Localisation : gâtine deux-sèvrienne

Re: Suppression automatique de plusieurs plages de cellules dans plusieurs feuilles.

Message par luky-luke »

Bonjour,
Une autre façon de faire, mais qui arrive au même résultat.
lister les feuilles en faisant le tri et effacer les Zones.

Code : Tout sélectionner

Sub ListerFeuille()
Dim oDoc As Object, oSheets As Object, oSheet As Object
Dim nbF as Integer, aName() AS String, SheetName() As String
Dim Months(23) As String
Dim i As Integer, X As Integer

Const PlageToute = "A4:D298"
Const PlageJan1 = "N5:O14"
Const PlageJan2 = "N18:O27"
Const PlageFev1 = "O5:O14"
Const PlageFev2 = "O18:O27"
   
	oDoc = ThisComponent : oSheets = oDoc.Sheets
	aName = oSheets.ElementNames
	
	For nbF = 0 TO UBound(aName)
		TheNext:
		SheetName() = Split(aName(nbF),"_")
		TheName = SheetName(0)
		Select Case TheName
			Case "Accueil"
			nbF = nbF + 1
			Goto TheNext
			Case "Liste"
			Case "Synthese"
			Case "AFIS"
			Case "SSLIA"
			Case else
			Months(i) = aName(nbF) : i = i+1
		End Select
	Next
	
RepMsgBox = MsgBox ("Effacer les feuilles",35,"Avertissement")
If RepMsgBox = 6 Then	
	For X = 0 To UBound(Months)
		Select Case Months(X)
			Case "Janvier_AFIS"
				Effacer("Janvier_AFIS", PlageToute)
				Effacer("Janvier_AFIS", PlageJan1)
				Effacer("Janvier_AFIS",PlageJan2)
			Case "Fevrier_AFIS"
				Effacer("Fevrier_AFIS", PlageToute)
				Effacer("Fevrier_AFIS", PlageFev1)
				Effacer("Fevrier_AFIS",PlageFev2)
			Case "Janvier_SSLIA"
				Effacer("Janvier_SSLIA",PlageToute)
				Effacer("Janvier_SSLIA",PlageJan1)
				Effacer("Janvier_SSLIA",PlageJan2)
			Case "Fevrier_SSLIA"
				Effacer("Fevrier_SSLIA",PlageToute)
				Effacer("Fevrier_SSLIA",PlageFev1)
				Effacer("Fevrier_SSLIA",PlageFev2)
			Case Else
				Effacer(Months(X), PlageToute)
		End Select
	Next
End If				
		MsgBox ("Y'a plus rien en principe !",64,"ET VOILA")
End Sub

Sub Effacer(Feuille As String,Plage As String)
Dim oSheet As Object, oRange As Object
	oSheet = thisComponent.Sheets.GetByName(Feuille)
	oRange = oSheet.getCellRangeByName(Plage)
	oRange.clearContents(com.sun.star.sheet.CellFlags.DATETIME OR _
                    com.sun.star.sheet.CellFlags.STRING)
End Sub
La réponse de Noonours a le mérite d'être beaucoup plus pédagogique :D

Cordialement
Luke
LibO 7.4.7.2 Raspberry pi et Libo 7.6.5.2 LinuxMint 22
Xray ne tient pas lieu de tout, mais une pratique sans Xray ne vaut pas grand chose
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 6057
Inscription : 02 janv. 2009 23:56

Re: Suppression automatique de plusieurs plages de cellules dans plusieurs feuilles.

Message par Jean-Louis Cadeillan »

Bonjour,
Pourquoi ne pas créer un modèle (format .ots) ?
Cordialement,
Jean-Louis
LibO 24.2.7.2 (x64 et Java 1.8.0_451) et AOO 4.1.15 (et Java x32 1.8.0_431), Windows 7 Édition Intégrale 64 SP1
Seb1258
Membre hOOnoraire
Membre hOOnoraire
Messages : 106
Inscription : 11 sept. 2024 15:31
Localisation : Pas loin du Canada

Re: Suppression automatique de plusieurs plages de cellules dans plusieurs feuilles.

Message par Seb1258 »

Bonjour à tous et merci pour vos réponses précises,
Oukcha a écrit : 07 nov. 2024 20:57 Merci de relire le bandeau rouge en haut de page, et d'appliquer le balisage adéquat.
Désolé pour l'oublie, j'ai complètement oublié la balise...

Concernant les codes de Luky-luke et Noonours, les 2 solutions marchent et apparemment elles font exactement ce que je souhaite. Je vais continuer de les tester un peu mais je vous remercie beaucoup.

Concernant la réponse de Jean-Louis Cadeillan, je ne connais pas trop les modèles et du coups je ne sais pas quels avantages ils peuvent présenter. Je vais chercher un peu sur internet mais si vous avez de la documentation je suis preneur.

Merci encore à tous pour votre aide.

A bientôt.

EDIT : Je viens de tester le format *.OTS et la macro utilisée à l'ouverture du document ne fonctionne plus avec ce format. Va falloir que je creuse :)
Libre office 7.3.7.2 < Obligation de version :fou:

Windows 10 Pro
Avatar de l’utilisateur
Jean-Louis Cadeillan
GourOOu
GourOOu
Messages : 6057
Inscription : 02 janv. 2009 23:56

Re: [Résolu][Calc] Suppression automatique de plusieurs plages de cellules dans plusieurs feuilles.

Message par Jean-Louis Cadeillan »

Bonsoir,
Seb1258 a écrit : 08 nov. 2024 10:47 je ne connais pas trop les modèles et du coups je ne sais pas quels avantages ils peuvent présenter. Je vais chercher un peu sur internet mais si vous avez de la documentation je suis preneur.
Voir ici
Si j'ai bien compris, tu veux périodiquement repartir d'un document vierge de toutes données saisies entre deux dates. Un modèle est fait pour ça. Avant de saisir les données « datées », tu sauvegardes ton document comme modèle (en .ots). Ensuite si tu double-cliques dessus, c'est un document ayant exactement les mêmes formules, le même formatage, la même structure qui va s'ouvrir, mais un .ods, sur lequel tu travailleras le temps que tu voudras (par exemple, un an), puis, au lieu de tout effacer pour repartir à zéro, tu ouvriras ton modèle, tout simplement (un nouveau document identique au modèle, mais ods, va s'ouvrir).
Donc, pas besoin de macros pour nettoyer…
Cordialement,
Jean-Louis
LibO 24.2.7.2 (x64 et Java 1.8.0_451) et AOO 4.1.15 (et Java x32 1.8.0_431), Windows 7 Édition Intégrale 64 SP1
Seb1258
Membre hOOnoraire
Membre hOOnoraire
Messages : 106
Inscription : 11 sept. 2024 15:31
Localisation : Pas loin du Canada

Re: [Résolu][Calc] Suppression automatique de plusieurs plages de cellules dans plusieurs feuilles.

Message par Seb1258 »

Re,

Merci pour le complément d'information, après quelques test c'est ce qu'il me semblais aussi.

En revanche, la macro (dans personnaliser / ouvrir le document) ne fonctionne pas avec le fichier *.ots (en tous cas à la première ouverture. Lors de la seconde ouverture c'est good).

Merci encore pour les réponses et explications apportées.

Bonne soirée.
Libre office 7.3.7.2 < Obligation de version :fou:

Windows 10 Pro