Je rencontre un problème dans un programme que j'ai créé sous libreoffice.
Pour aller à l'essentiel : dans mon programme il y a un onglet "Metré"
Dans cette onglet, une macro se lance lorsque le contenu d'une case est modifié dans la colonne D (colonne Profilé)
Je récupère ce qui a été rempli dans cette case et à l'aide d'un Select Case, je déclenche une série d'actions en fonction du nouveau contenu : récupération de la ligne de déclenchement de la macro, mise en forme spécifique des 7 colonnes suivante sur la ligne concernée, et ajout de formules dans certaines cellules de cette ligne.
les mises en formes sont différentes pour différents cas : IPE / HEA / PRS / TUBEC / TUBEROND mais la méthode et le fond du code reste le même.
Mon problème est le suivant :
quand j'écris TUBEROND dans une cellule de la colonne D, cela fonctionne mais si j'essaye ensuite de changer pour mettre par exemple TUBEC, IPE ou HEA, la mise en forme ne change pas.
En revanche quand on rempli PRS cela fonctionne, Le code est le même du coup je ne vois pas d'ou ça peut venir.
(Les mises en forme sont faites avec un copier coller de plages modèles dans l'onglet source)
Le code appelé est situé dans le module Metré -> sous programme reperage_profil
JE vous joint l'extrait ici :
Code : Tout sélectionner
Function ReperageProfil (oEVT)
dim colonne as integer, ligne as integer, lignecible as integer, colonnecible as integer
dim oCell as object, oDoc as object,oFeuille as object,oFeuilleCalcul as object, oFeuilleSource as object,oCellMef as object
dim profil as string
oCell = oEvt
oDoc = thiscomponent
oFeuille = oDoc.currentController.activeSheet
oFeuilleSource = ThisComponent.Sheets.getByName("Source")
oCible = oFeuille.getcellrangebyname(oCell.AbsoluteName)
oPlage = oFeuille.getcellrangebyname("D:D")
oResult1 = oCible.queryIntersection(oPlage.RangeAddress)
selection = oDoc.CurrentSelection
'Identification des différents numéros de colonnes:
dim cQ as integer, cP as integer, cS as integer, cPU as integer, cL as integer, cPD as integer, cC as integer, cPR as integer, cA as integer
Identification_Constantes(0,cQ,cP,cS,cPU,0,0,0,0,0,0,0,cL,cPD,cC,cPR,cA)
'Identification des différentes colonnes de section
dim cS1 as integer, cS2 as integer, cS3 as integer, cS4 as integer, cS5 as integer, cS6 as integer, cS7 as integer
cS1=cPR+1
cS2=cPR+2
cS3=cPR+3
cS4=cPR+4
cS5=cPR+5
cS6=cPR+6
cS7=cPR+7
'Si une seule cellule est selectionnée
If selection.supportsService("com.sun.star.table.Cell") then
profil=oCell.string
'Si l'évennement provient de la colonne "Profilé"
If oResult1.RangeAddressesAsString <> "" Then
'Déclence la serie d'action correspondante en fonction du profil renseigné
Select Case profil
Case "PRS","prs"
colonne = oCell.CellAddress.Column
ligne = oCell.CellAddress.Row
lignecible=ligne+1
'Mise en forme
oCellMef=ofeuille.getcellbyposition(colonne+1,ligne)
oRangeSource=oFeuilleSource.getcellrangebyname("MEF_PRS")
oFeuille.copyRange(oCellMef.CellAddress,oRangeSource.RangeAddress)
'Formules de poids unitaire et d'achat pondéré
oFeuille.getcellbyposition(cPU,ligne).formula="=IF(OR(INDIRECT(ADDRESS(" & lignecible & ";" & cS1+1 & "))="""";INDIRECT(ADDRESS(" & lignecible & ";" & cS3+1 & "))="""";INDIRECT(ADDRESS(" & lignecible & ";" & cS5+1 & "))="""";INDIRECT(ADDRESS(" & lignecible & ";" & cS7+1 & ")) ="""");"""";(INDIRECT(ADDRESS(" & lignecible & ";" & cS1+1 & "))/1000)*(INDIRECT(ADDRESS(" & lignecible & ";" & cS3+1 & "))/1000)*7850+2*(INDIRECT(ADDRESS(" & lignecible & ";" & cS5+1 & "))/1000)*(INDIRECT(ADDRESS(" & lignecible & ";" & cS7+1 & "))/1000)*7850)" 'Ancienne formule : "=IF(OR(E" & lignecible &" ="""";G" & lignecible &" ="""";I" & lignecible &" ="""";K" & lignecible &" ="""");"""";(E"& lignecible &"/1000)*(G"& lignecible &"/1000)*7850+2*(I"& lignecible &"/1000)*(K"& lignecible &"/1000)*7850)"
oFeuille.getcellbyposition(cA,ligne).formula="=IF(INDIRECT(ADDRESS(" & lignecible & ";" & cP+1 & "))="""";"""";IF(AND(INDIRECT(ADDRESS(" & lignecible & ";" & cS1+1 & "))=800;INDIRECT(ADDRESS(" & lignecible & ";" & cS3+1 & "))=5;INDIRECT(ADDRESS(" & lignecible & ";" & cS5+1 & "))=180;INDIRECT(ADDRESS(" & lignecible & ";" & cS7+1 & "))=10);PRS_800x5_180x10;PRS_Standard)"
Case "TUBEROND","TubeRond","tuberond","tubeRond","Tuberond"
colonne = oCell.CellAddress.Column
ligne = oCell.CellAddress.Row
lignecible=ligne+1
'Mise en forme
oCellMef=ofeuille.getcellbyposition(colonne+1,ligne)
oRangeSource=oFeuilleSource.getcellrangebyname("MEF_TUBEROND")
oFeuille.copyRange(oCellMef.CellAddress,oRangeSource.RangeAddress)
'Formules de poids unitaire et d'achat pondéré
oFeuille.getcellbyposition(cPU,ligne).formula="=IF(OR(INDIRECT(ADDRESS(" & lignecible & ";" & cS2+1 & ")) ="""";INDIRECT(ADDRESS(" & lignecible & ";" & cS7+1 & ")) ="""");"""";INDEX($BibliothèqueIHU.$A$8:$BibliothèqueIHU.$AA$353;MATCH(INDIRECT(ADDRESS(" & lignecible & ";" & cPR+1 & "))&"&""""&" "&"""&""f""&INDIRECT(ADDRESS(" & lignecible & ";" & cS2+1 & "))&""x""&INDIRECT(ADDRESS(" & lignecible & ";" & cS7+1 & "));$BibliothèqueIHU.$A$8:$BibliothèqueIHU.$A$353;0);BibliothèqueIHU.C$6))"
oFeuille.getcellbyposition(cA,ligne).formula="=IF(INDIRECT(ADDRESS(" & lignecible & ";" & cP+1 & "))="""";"""";INDEX($BibliothèqueIHU.$A$8:$BibliothèqueIHU.$AB$353;MATCH(INDIRECT(ADDRESS(" & lignecible & ";" & cPR+1 & "))&"&""""&" "&"""&""f""&INDIRECT(ADDRESS(" & lignecible & ";" & cS2+1 & "))&""x""&INDIRECT(ADDRESS(" & lignecible & ";" & cS7+1 & "));$BibliothèqueIHU.$A$8:$BibliothèqueIHU.$A$353;0);BibliothèqueIHU.AB$6))"
Case "L","l","LPAF","lpaf","UPAF","upaf","TUBEC","tubec","TubeC","tubeC","TUBER","TubeR","tuber","tubeR"
colonne = oCell.CellAddress.Column
ligne = oCell.CellAddress.Row
lignecible=ligne+1
'Mise en forme
oCellMef=ofeuille.getcellbyposition(colonne+1,ligne)
oRangeSource=oFeuilleSource.getcellrangebyname("MEF_L_TUBE_UPAF")
oFeuille.copyRange(oCellMef.CellAddress,oRangeSource.RangeAddress)
'Formules de poids unitaire et d'achat pondéré
oFeuille.getcellbyposition(cPU,ligne).formula="=IF(OR(INDIRECT(ADDRESS(" & lignecible & ";" & cS1+1 & ")) ="""";INDIRECT(ADDRESS(" & lignecible & ";" & cS4+1 & ")) ="""";INDIRECT(ADDRESS(" & lignecible & ";" & cS7+1 & ")) ="""");"""";INDEX($BibliothèqueIHU.$A$8:$BibliothèqueIHU.$AA$353;MATCH(INDIRECT(ADDRESS(" & lignecible & ";" & cPR+1 & "))&"&""""&" "& """"&"&INDIRECT(ADDRESS(" & lignecible & ";" & cS1+1 & "))&""x""&INDIRECT(ADDRESS(" & lignecible & ";" & cS4+1 & "))&""x""&INDIRECT(ADDRESS(" & lignecible & ";" & cS7+1 & "));$BibliothèqueIHU.$A$8:$BibliothèqueIHU.$A$353;0);BibliothèqueIHU.C$6))"
oFeuille.getcellbyposition(cA,ligne).formula="=IF(INDIRECT(ADDRESS(" & lignecible & ";" & cP+1 & ")) ="""";"""";INDEX($BibliothèqueIHU.$A$8:$BibliothèqueIHU.$AB$353;MATCH(INDIRECT(ADDRESS(" & lignecible & ";" & cPR+1 & "))&"&""""&" "& """"&"&INDIRECT(ADDRESS(" & lignecible & ";" & cS1+1 & "))&""x""&INDIRECT(ADDRESS(" & lignecible & ";" & cS4+1 & "))&""x""&INDIRECT(ADDRESS(" & lignecible & ";" & cS7+1 & "));$BibliothèqueIHU.$A$8:$BibliothèqueIHU.$A$353;0);BibliothèqueIHU.AB$6))"
Case "IPE","ipe","HEA","hea","UPN","upn","UPE","upe","HEB","heb","HEM","hem","IPE A","ipe a","HEAA","heaa"
colonne = oCell.CellAddress.Column
ligne = oCell.CellAddress.Row
lignecible=ligne+1
'Mise en forme
oCellMef=ofeuille.getcellbyposition(colonne+1,ligne)
oRangeSource=oFeuilleSource.getcellrangebyname("MEF_COURANT")
oFeuille.copyRange(oCellMef.CellAddress,oRangeSource.RangeAddress)
'Formules de poids unitaire et d'achat pondéré
oFeuille.getcellbyposition(cPU,ligne).formula="=IF(INDIRECT(ADDRESS(" & lignecible & ";" & cS1+1 & ")) ="""";"""";INDEX($BibliothèqueIHU.$A$8:$BibliothèqueIHU.$AA$353;MATCH(INDIRECT(ADDRESS(" & lignecible & ";" & cPR+1 & "))&"&""""&" "& """"&"&INDIRECT(ADDRESS(" & lignecible & ";" & cS1+1 & "));$BibliothèqueIHU.$A$8:$BibliothèqueIHU.$A$353;0);BibliothèqueIHU.C$6))"
oFeuille.getcellbyposition(cA,ligne).formula="=IF(INDIRECT(ADDRESS(" & lignecible & ";" & cP+1 & ")) ="""";"""";INDEX($BibliothèqueIHU.$A$8:$BibliothèqueIHU.$AB$353;MATCH(INDIRECT(ADDRESS(" & lignecible & ";" & cPR+1 & "))&"&""""&" "& """"&"&INDIRECT(ADDRESS(" & lignecible & ";" & cS1+1 & "));$BibliothèqueIHU.$A$8:$BibliothèqueIHU.$A$353;0);BibliothèqueIHU.AB$6))"
Case else
colonne = oCell.CellAddress.Column
ligne = oCell.CellAddress.Row
lignecible=ligne+1
'Applique la mise en forme d'une cellule vide et vide les cellules Poids unitaire et Achat Pond de leur formules
oCellMef=ofeuille.getcellbyposition(colonne+1,ligne)
oCellsupp1=ofeuille.getcellbyposition(cPU,ligne)
oCellsupp2=ofeuille.getcellbyposition(cA,ligne)
oRangeSource=oFeuilleSource.getcellrangebyname("MEF_NULL")
oRangeSourceSupp=oFeuilleSource.getcellrangebyname("CELLULE_VIDE")
oRangeSourceSupp2=oFeuilleSource.getcellrangebyname("CELLULE_ACHAT_VIDE")
oFeuille.copyRange(oCellMef.CellAddress,oRangeSource.RangeAddress)
oFeuille.copyRange(oCellsupp1.cellAddress,oRangeSourceSupp.RangeAddress)
oFeuille.copyRange(oCellsupp2.cellAddress,oRangeSourceSupp2.RangeAddress)
End select
End if
End if
End function
Merci d'avance !