IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

OpenOffice & LibreOffice Discussion :

macro repartition par feuilles selon la date


Sujet :

OpenOffice & LibreOffice

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    489
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 489
    Points : 388
    Points
    388
    Par défaut macro repartition par feuilles selon la date
    Bonjour,

    je n'ai pas trop d'experience en macro ni VBA, ni Basic openoffice..
    Je galere un peu, alors que ca doit etre simple..

    Bon en glanant de la doc a droite et a gauche, voila ce que j'ai pour le moment :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    Sub AutoRepartition()
     
    Dim Doc As Object
    Dim Sheets, Sheet, BaseSheet
    Dim Range, Cell
    Dim Nam As String
    Dim MaDate As Date
    Dim MonMois, MonAnnee
    Dim MonNom As String
     
    Doc = ThisComponent
    Sheets = Doc.Sheets
    BaseSheet = Sheets.getByName("Base")
     
    For i = 1 To 10
    	Nam = "A" + i
    	Cell = BaseSheet.getCellRangeByName(Nam)
    	MaDate = date(Cell)
    	MonMois = Month(MaDate)
    	Monannee = Year(MaDate)
    	MonNom = MonAnnee & "-" & MonMois
    	MsgBox Nam + ":" + MaDate + "/" + MonNom
     
    	If Doc.Sheets.hasByName(MonNom) Then
    	   Sheet = Doc.Sheets.getByName(MonNom)
    	Else
    	   Sheet = Doc.createInstance("com.sun.star.sheet.Spreadsheet")
    	   Doc.Sheets.insertByName(MonNom, Sheet)
    	End If
    Next i
     
    End Sub

    Donc ma colonne A contient mes dates, je la parcours (pour le moment limité a 10 pour les besoins du test), je crée la feuille "Annee - Mois" si elle n'existe pas.. et après je copierais les lignes selon la date..

    Mon problème actuel :
    Mes dates sont sur l'année 2010..
    Par exemple, en A2 : 2010-01-06

    La cellule est bien formatée en date Et pourtant, quand j'affiche la date trouvée par ma macro il m'annonce A2 : 2011-03-25 et donc m'annonce 2011 comme année et 3 comme mois...

    La j'avoue que j'y capte rien.. ca sort d'ou ??

    Merci d'avance

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    489
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 489
    Points : 388
    Points
    388
    Par défaut
    bon la date c'est ok et la creation des sheets aussi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    Sub AutoRepartition()
     
    Dim Doc As Object
    Dim Sheets, Sheet, BaseSheet
    Dim Range, Cell
    Dim Nam As String
    Dim MaDate As Date
    Dim MonMois, MonAnnee
    Dim MonNom As String
    Dim Row
     
    Dim From As New com.sun.star.table.CellRangeAddress
    Dim Target As New com.sun.star.table.CellAddress
     
    Doc = ThisComponent
    Sheets = Doc.Sheets
    BaseSheet = Sheets.getByName("Base")
     
    For i = 2 To 1000
    	Nam = "A" + i
    	Cell = BaseSheet.getCellRangeByName(Nam)
    	MaDate = Cell.value
    	MonMois = Month(MaDate)
    	Monannee = Year(MaDate)
    	MonNom = MonAnnee & "-" & MonMois
    REM	MsgBox Nam + ":" + MaDate + "/" + MonNom
     
    	If Doc.Sheets.hasByName(MonNom) Then
    	   Sheet = Doc.Sheets.getByName(MonNom)
    	Else
    	   Sheet = Doc.createInstance("com.sun.star.sheet.Spreadsheet")
    	   Doc.Sheets.insertByName(MonNom, Sheet)
    	End If
     
     
    Next i
     
    End Sub

    Maintenant je cherche comment copier une rangée d'une sheet vers une autre..

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    489
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Janvier 2004
    Messages : 489
    Points : 388
    Points
    388
    Par défaut
    Bon..
    C'est tres moche, on peut surement faire bien mieux, mais pour ma 1ere macro, ca fait le boulot..

    et comme je vous ai fait partager mes soucis, voila le code qui fonctionne.. avec pas mal de limitations..

    enfin si ca peut aider

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    Sub AutoRepartition()
     
    Dim Doc As Object
    Dim Sheets, Sheet, BaseSheet
    Dim Range, Cell
    Dim Nam As String
    Dim MaDate As Date
    Dim MonMois, MonAnnee
    Dim MonNom As String
    Dim Row
     
    Dim CellRangeAddress As New com.sun.star.table.CellRangeAddress
    Dim CellAddress As New com.sun.star.table.CellAddress
     
    Dim j, indexOfSheet, previousIndexOfSheet
     
    Doc = ThisComponent
    Sheets = Doc.Sheets
    BaseSheet = Sheets.getByName("Base")
     
    For i = 2 To 1000
    	Nam = "A" + i
    	Cell = BaseSheet.getCellRangeByName(Nam)
    	MaDate = Cell.value
    	MonMois = Month(MaDate)
    	Monannee = Year(MaDate)
    	MonNom = MonAnnee & "-" & MonMois
    REM	MsgBox Nam + ":" + MaDate + "/" + MonNom
     
    	If Doc.Sheets.hasByName(MonNom) Then
    	   Sheet = Doc.Sheets.getByName(MonNom)
    	Else
    	   Sheet = Doc.createInstance("com.sun.star.sheet.Spreadsheet")
    	   Doc.Sheets.insertByName(MonNom, Sheet)
    	End If
     
    	addr = Sheet.getRangeAddress()
    	indexOfSheet = addr.Sheet 
     
    	If previousIndexOfSheet = indexOfSheet Then
    		j = j + 1
    	Else
    		j = 0
    	End If
     
    	previousIndexOfSheet = indexOfSheet
     
    	Row = Sheet.Rows(i-1)
     
       'source range
       CellRangeAddress.Sheet = 0
       CellRangeAddress.StartColumn = 0
       CellRangeAddress.StartRow = i-1
       CellRangeAddress.EndColumn = 255
       CellRangeAddress.EndRow = i-1
     
       'target range
       CellAddress.Sheet = indexOfSheet
       CellAddress.Column = 0
       CellAddress.Row = j
     
       'copying range
       Sheet.copyRange (CellAddress, CellRangeAddress) 
     
    Next i
     
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [XL-2007] Recevoir une alerte par mail selon une date de péremption
    Par Scatmax dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 04/03/2010, 16h58
  2. [XL-2003] Changement de feuille par Macro activée par un Bouton
    Par Gitano dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 18/08/2009, 10h57
  3. [XL-2003] macro planté par feuille masqué
    Par bosk1000 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 07/07/2009, 11h08
  4. suppression d'une macro d'une feuille excel protegée par mot de passe
    Par adilissimo dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 27/06/2007, 20h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo