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