Bonsoir,

Le 05/05/2010 12:01, nimel a écrit :
Bonjour,
Et oui encore moi. Mais ça va faire plaisir à Agnès, je progresse. J'ai
réussi à faire quelques lignes de code sans que ça bloque !
Ça copie une feuille puis supprime des lignes et des colonnes.
Je vous les soumet car il y a 2 bugs que je n'arrive pas à résoudre :
- pourquoi ça reste dans la feuille "devis" au lieu de travailler dans
la feuille "devis-sauv" ?
- la suppression des lignes fonctionne ... sauf que ça supprime un peu
n'importe quoi et pas du tout en fonction des 0 ou des 1 que contiennent
les cellules

As-tu vérifier que tu pointes bien sur les bonnes lignes et/ou cellules ? (en effet les indices débutent par défaut à 0)


' *** avant ya eu la déclaration de ttes les variables ***
MonDoc = ThisComponent

' --------- COPIE DE LA FEUILLE -------------------
LesFeuilles = MonDoc.Sheets
LesFeuilles.CopyByName("devis", "devis_sauv", 1)
' -------------------------------------------------

' *** SUPRESSION DES LIGNES ET COLONNES INUTILES ***
FeuilleC = LesFeuilles.getByName("devis_sauv")
For i=4 to 270
CelChoix = FeuilleC.getCellByPosition(1,i)
CelValeur = CelChoix.value
If CelValeur=0 Then
MaLigneChoix = FeuilleC.Rows
MaLigneChoix.removeByIndex(i,1)
End If
Next

MaZone = FeuilleC.getCellRangeByName("H5:M5")
LesColonnes = MaZone.Columns
LesColonnes.removeByIndex(0,6)
' ********************************************************

Merci d'avance. Nicole.


Tu n'es pas très loin du résultat ;-)

Essaie dès le début de coder un peu plus clairement et en décomposant.
Tu en retireras, et tes lecteurs également, lisibilité accrue ainsi qu'une possibilité de maintenance plus aisée.

En décomposant en modules distincts tu progresseras pas à pas en validant chacune des étapes. Ce n'est pas la peine d'aller plus avant si l'une des fonctionnalités (si possible dans un module à part) n'est pas opérationnelle.

Pour ton problème, voici une idée :


sub MainTraitment

 call CopySheet
 call RemoveLines
 call RemoveColumns

end sub

sub CopySheet

dim oMonDoc as object, oLesFeuilles as object
dim oFeuilleC as object, oCelChoix as object
dim oMaLigneChoix as object, oMaZone as object
dim oLesColonnes as object
dim iCelValeur as integer, i as integer

oMonDoc = ThisComponent

' --------- COPIE DE LA FEUILLE -------------------
oLesFeuilles = oMonDoc.Sheets
oLesFeuilles.CopyByName( "devis", "devis_sauv", 1 )

end sub

sub RemoveLines

dim oMonDoc as object, oLesFeuilles as object
dim oFeuilleC as object, oCelChoix as object
dim oMaLigneChoix as object, oMaZone as object
dim oLesColonnes as object
dim iCelValeur as integer, i as integer

oMonDoc = ThisComponent
oLesFeuilles = oMonDoc.Sheets
oFeuilleC = oLesFeuilles.getByName( "devis_sauv" )

' *** SUPRESSION DES LIGNES INUTILES ***
for i = 4 to 270
 oCelChoix = oFeuilleC.getCellByPosition( 0, i )
 iCelValeur = oCelChoix.value
 if iCelValeur = 0 then
  oMaLigneChoix = oFeuilleC.Rows
  oMaLigneChoix.removeByIndex( i, 1 )
 end if
next
end sub

sub RemoveColumns

dim oMonDoc as object, oLesFeuilles as object
dim oFeuilleC as object, oCelChoix as object
dim oMaLigneChoix as object, oMaZone as object
dim oLesColonnes as object
dim iCelValeur as integer, i as integer

oMonDoc = ThisComponent
oLesFeuilles = oMonDoc.Sheets
oFeuilleC = oLesFeuilles.getByName( "devis_sauv" )

' *** SUPRESSION DES COLONNES INUTILES ***
oMaZone = oFeuilleC.getCellRangeByName( "H5:M5" )
oLesColonnes = oMaZone.Columns
oLesColonnes.removeByIndex( 0, 6 )

end sub

Bien entendu ce n'est qu'une approche !
Le code sera à optimiser et parallèlement il faudra placer un certain nombre de contrôles de validité/concordance/existence.

Bonne continuation

Francois Gatto



---------------------------------------------------------------------
To unsubscribe, e-mail: prog-unsubscr...@fr.openoffice.org
For additional commands, e-mail: prog-h...@fr.openoffice.org

Répondre à