Bonjour à tous,
 
Je recherche des informations sur l'article Spip fait par Tony Galmiche et Robert Dargaud.Celle-ci
option explicit
 
sub Creer_Serie_Articles
 dim Nb as integer
 dim i as integer
 
 Nb=InputBox ("Nombre d'articles à créer ?",,1)
 for i=1 to Nb
  Creer_Article
 next i
end sub
 
Sub Creer_Article
 Dim oDoc
 Dim oSection as object
 Dim oCursor As Object
 Dim oSels as object
 Dim oSel as object
 dim NumMax as integer
 dim Num as integer
 dim NumArticle as string
 dim Rep as integer
 dim NomSection as string
 dim TabNomSection as variant
 dim i as integer
 dim InsertFin as boolean
 dim PARAGRAPH_BREAK as integer
 
 PARAGRAPH_BREAK = com.sun.star.text.ControlCharacter.PARAGRAPH_BREAK
 
  oDoc=ThisComponent
 
  oCursor = oDoc.Text.createTextCursor()
 
  '** Recherche d'une section dans la sélection *****************************
 oSels = ThisComponent.getCurrentSelection() ' Contient l'ensemble des sélections
 oSel = oSels.getByIndex(0) ' Contient la 1iere selection
 '**************************************************************************
 
 NumArticle=""
 InsertFin=FALSE
 '** Test si la selection contient une section ***************************** 
 If IsEmpty(oSel.TextSection) Then
  InsertFin=TRUE
 else
  ' Recherche du N° de l'article dans la sélection
  NumArticle=right(oSel.TextSection.name,4)
  if NumArticle>"9999" or NumArticle<"0001" then
   InsertFin=TRUE
  else
   ' Déplacement au dessus de la premiere section de l'article
   oSection=oDoc.GetTextSections.GetByName("<xml:article> " & NumArticle)
   oCursor.gotoRange(oSection.Anchor.Start, FALSE)
   oCursor.gotoPreviousParagraph(FALSE) 'Déplacement au paragraphe précédent
   oCursor.gotoPreviousParagraph(FALSE) 'Déplacement au paragraphe précédent
   oCursor.gotoStartOfParagraph(FALSE) 'Déplacement au début du paragraphe
  end if
 end if
 
 '** Si la sélection ne contient pas de section, insertion en fin de document
 if  InsertFin=TRUE then
  NomSection="<xml:export_spip>"
     oSection=oDoc.GetTextSections.GetByName(NomSection) 
  oCursor.gotoRange(oSection.Anchor.End, false)
 end if
 '**************************************************************************
    
  'Recherche le dernier N° d'article créé ************************************
 NumMax=0
 TabNomSection= oDoc.GetTextSections.getElementNames()
 for i = 0 to UBound(TabNomSection())
  if left(TabNomSection(i),14)="<xml:article> " then
   Num=mid(TabNomSection(i),14,100)
   if Num>NumMax then NumMax=Num
  end if
 next i
 NumArticle=right("0000" & NumMax+1,4)
 '***************************************************************************
 
 '** Création d'un curseur pour se déplacer dans le docuement ***************
 'oDoc.Text.insertControlCharacter(oCursor, PARAGRAPH_BREAK, False)
 'oCursor.gotoPreviousParagraph(0) 'Déplacement au paragraphe précédent 
 '*************************************************************************** 
   
 '** Vérification que la section principale existe *************************
 NomSection="<xml:export_spip>"
 Rep = oDoc.GetTextSections.HasByName(NomSection)
    if Rep=False then
     msgbox "Section principale non trouvée !"
     oSection=CreerSection(oCursor, NomSection, FALSE, RGB(255,255,255))
    else
     oSection=oDoc.GetTextSections.GetByName(NomSection)
    end if
    '*************************************************************************** 
 
 '** Création de la section de l'article ************************************
 oDoc.Text.insertControlCharacter(oCursor, PARAGRAPH_BREAK, False)
 NomSection="Sections de l'article N°" & NumArticle
   oDoc.Text.insertString(oCursor, NomSection, FALSE)    
 oDoc.Text.insertControlCharacter(oCursor, PARAGRAPH_BREAK, False)
 NomSection="<xml:article> " & NumArticle 
    oSection=CreerSection(oCursor, NomSection, FALSE,RGB(255,255,255))  
    '***************************************************************************
 
    '** Déplacement du curseur dans la section précédente **********************
 oCursor.gotoRange(oSection.Anchor.End, false)
 '***************************************************************************
 
 '** Insertion de la nouvelle section liée à la section du 1ier article *****
 oDoc.Text.insertControlCharacter(oCursor, PARAGRAPH_BREAK, False)
 NomSection="entete " & NumArticle
 oSection=CreerSection(oCursor, NomSection , FALSE, RGB(210,210,210))
 if NumArticle<>"0001" then oSection.LinkRegion="entete 0001"
 '***************************************************************************
 
 '** Création des autres sections *******************************************
 NomSection="<xml:data:texte> " & NumArticle
    oSection=CreerSection(oCursor, NomSection, FALSE,RGB(220,220,220))
    NomSection="<?xml version=""1.0"" encoding=""UTF-8"" ?> " & NumArticle
    oSection=CreerSection(oCursor, NomSection, FALSE,RGB(230,230,230))
    '***************************************************************************
End Sub
 

function CreerSection(oCursor as object, NomSection as string, _
                      Protection as boolean, Couleur as long)
 dim oDoc as object
 dim oSection as object
 
   oDoc=ThisComponent
 oSection = oDoc.createInstance("com.sun.star.text.TextSection")
 oSection.isProtected = Protection
 oSection.Name = NomSection
 oSection.BackColor=Couleur
 oDoc.Text.insertTextContent(oCursor, oSection, FALSE)  
 CreerSection=oSection
end function
 
 
 
sub Supprimer_Article
 Dim oSels as object
 Dim oSel as object
 Dim oDoc as object
 dim oCursor as object
 dim oSection as object
 dim NumArticle as string
 
  oDoc=ThisComponent
  
  
  '** Recherche d'une section dans la sélection *****************************
 oSels = ThisComponent.getCurrentSelection() ' Contient l'ensemble des sélections
 oSel = oSels.getByIndex(0) ' Contient la 1iere selection
 '**************************************************************************
 
 '** Test si la selection contient une section ***************************** 
 If IsEmpty(oSel.TextSection) Then
  msgbox "La sélection en cours ne contient pas d'article !",48
  exit sub
 end if
 '**************************************************************************
 
  '** Recherche du N° de l'article dans la sélection ************************
 NumArticle=right(oSel.TextSection.name,4)
 '**************************************************************************
 
 '** Interdiction du supprimer le 1ier article *****************************
 if NumArticle="0001" then
  msgbox "La suppression du 1ier article n'est pas autorisée !",48
  exit sub
 end if
 '**************************************************************************
 
 '** Test si le N° d'article est valide ************************************
 if NumArticle>"9999" or NumArticle<"0001" then
  msgbox "La sélection en cours ne contient pas d'article !",48
  exit sub
 end if
 '**************************************************************************
 
  
 if (msgbox ("Supprimer l'article " & NumArticle, 4+48+256) = 6) then
  oCursor = oDoc.Text.createTextCursor()
     
  '** Déplacement au dessus de la premiere section de l'article *************
     oSection=oDoc.GetTextSections.GetByName("<xml:article> " & NumArticle)
  oCursor.gotoRange(oSection.Anchor.Start, FALSE)
  oCursor.gotoPreviousParagraph(FALSE) 'Déplacement au début du paragraphe précédent
  oCursor.gotoPreviousParagraph(FALSE) 'Déplacement au début du paragraphe précédent
  oCursor.gotoStartOfParagraph(FALSE) 'Déplacement au début du paragraphe précédent
  '**************************************************************************
   
  '** Déplacement en dessous de la dernière section de l'article ************
  oCursor.gotoRange(oSection.Anchor.End, TRUE)
  oCursor.gotoNextParagraph(TRUE) 'Déplacement au début du paragraphe précédent
  '**************************************************************************
  
  '** Suppression de la selection précédente et donc de l'article ***********
  oCursor.setString("")
  '**************************************************************************
 end if  
end sub
 
 
Je voudrais me servir d'une macro semblable pour ajouter ou supprimer des clients dans mon formulaire mais j'ai beau essayer je n'y arrive pas. J'arrive à  changer le nom de la section principale mais pas celui de la sous section <xml:article>. Une fois que je la renomme en <xml:client> la première section se renomme bien  <xml:client>0001 mais la deuxième devient "section1" Pourquoi?
 
 
Comment faire pour changer la sous section <xml:article> en <xml:client> et qu'elle se renomme bien après? où est-il impossible de la renommer? J'ai un peu difficile à le croire.
 
Quelqu'un aurait-il une idée? merci.
 
Françoise
 
Binettes de Halloween gratuites pour vos courriels ! Cliquez ici !

Répondre à