[Résolu] [Calc] Fusionner plusieurs onglets en 1 en gardant la mise en forme source

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 !
Denver_woods
Fraîchement OOthentifié
Messages : 4
Inscription : 20 févr. 2024 20:55

[Résolu] [Calc] Fusionner plusieurs onglets en 1 en gardant la mise en forme source

Message par Denver_woods »

Bonjour,

Je souhaite une macro qui me récapitule toutes les cellules A13:I40 de tous les onglets après "D" dans mon onglet "TOTAL" a partir de la cellule A13:I40 et si plus loin que A40 bascule sur les cellules J13:R40 et qui au fur et a mesure se met à jour automatiquement quand je change des valeurs des onglets après "D".

Voici le code que j'ai fais suivant plusieurs exemple sur le forum et en essayant de comprendre mais il me met erreur syntax et j'avoue que je ne comprends pas...

Code : Tout sélectionner

Sub RécapitulerDonnées()
    Dim document As Object
    Dim sheets As Object
    Dim sheet As Object
    Dim totalSheet As Object
    Dim lastRow As Long
    Dim destRange As Object
    Dim sourceRange As Object
    
    ' Obtenir le document en cours
    document = ThisComponent
    sheets = document.Sheets
    
    ' Référence à l'onglet "TOTAL"
    totalSheet = sheets.getByName("TOTAL")
    
    ' Efface le contenu existant dans l'onglet "TOTAL"
    totalSheet.getCellRangeByName("A13:R40").clearContents(1023)
    
    ' Boucle à travers tous les onglets après "D"
    For i = 0 To sheets.getCount() - 1
        sheet = sheets.getByIndex(i)
        If sheet.getName() > "D" Then
            ' Déterminer la dernière ligne non vide dans l'onglet en cours
            lastRow = sheet.getCellRangeByName("A" & sheet.Rows.Count).EndOfUsedArea.Row
            
            ' Vérifier si les données vont au-delà de la ligne 40
            If lastRow > 40 Then
                sourceRange = sheet.getCellRangeByName("A13:I40")
                destRange = totalSheet.getCellRangeByName("J" & totalSheet.Rows.Count).EndOfUsedArea.Offset(1, 0).getCellRangeByPosition(0, 0, 27, 8)
            Else
                sourceRange = sheet.getCellRangeByName("A13:I" & lastRow)
                destRange = totalSheet.getCellRangeByName("A" & totalSheet.Rows.Count).EndOfUsedArea.Offset(1, 0).getCellRangeByPosition(0, 0, sourceRange.Rows.Count - 1, sourceRange.Columns.Count - 1)
            End If
            
            ' Copier les données dans l'onglet "TOTAL"
            destRange.setDataArray(sourceRange.getDataArray())
        End If
    Next i
    
    ' Sélectionner la cellule A1 dans l'onglet "TOTAL"
    totalSheet.getCellRangeByName("A1").IsSelected = True
    
    MsgBox "Récapitulation des données terminée.", 64, "Information"
End Sub
Vous trouverez ci-joint le fichier pour mieux comprendre ma demande. Il peut y avoir une centaine d'onglet après "D".

En vous remerciant par avance,

Respectueusement,

Denver
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Denver_woods le 06 avr. 2024 14:05, modifié 2 fois.
Version: 24.2.2.2 (X86_64) / LibreOffice Community
Avatar de l’utilisateur
micmac
RespOOnsable forum
RespOOnsable forum
Messages : 9580
Inscription : 28 août 2010 08:45

Re: [Calc] Fusionner plusieurs onglets en 1 en gardant la mise en forme source

Message par micmac »

Bonjour,

Cette section a des règles très précises que vous devez obligatoirement suivre pour obtenir de l'aide. C'est indiqué dans le cadre rouge en haut de la page.

Il est demandé aux auteurs de faire précéder le titre de leur question d'une balise adéquate. Ce balisage est extrêmement important car il permet d'avoir une base de connaissance optimum en cas de recherche.
Avez-vous remarqué comment étaient postées les autres questions ?

Lisez ce fil pour savoir quelle balise utiliser : sutra27295.html#27295

Nous l'avons fait pour vous cette fois-ci mais lors de votre prochaine question, nous vous remercions de le faire vous-même au risque de voir votre sujet verrouillé.

Merci de votre collaboration.
Touche Ctrl de Windows = touche cmd⌘ sur Mac
Outils > Options sur Windows = OpenOffice > Préférences sur macOS
Avatar de l’utilisateur
Dolev
SuppOOrter
SuppOOrter
Messages : 1047
Inscription : 19 août 2018 05:20

Re: [Calc] Fusionner plusieurs onglets en 1 en gardant la mise en forme source

Message par Dolev »

Bonjour,
Denver_woods a écrit : 29 mars 2024 21:58 mais il me met erreur syntax et j'avoue que je ne comprends pas...
Il faut bannir les caractères accentués :

Code : Tout sélectionner

Sub RécapitulerDonnées()

PS : le fonctionnement de votre classeur tend à être une usine à gaz. Base serait plus adapté à cette notion de gestion d'inventaire.
Open Office 4.1.15 sous Windows 11
Denver_woods
Fraîchement OOthentifié
Messages : 4
Inscription : 20 févr. 2024 20:55

Re: [Calc] Fusionner plusieurs onglets en 1 en gardant la mise en forme source

Message par Denver_woods »

@micmac Désolé effectivement c'est un oublie de ma part...

@Dolev d'accord je n'avais pas fait attention aux accents... Je suis d'accord avec toi c'est une belle usine à gaz... Je ne connais absolument pas base...
Je vais me pencher dessus :D

En tout cas merci de ton aide :wink:
Version: 24.2.2.2 (X86_64) / LibreOffice Community