[Résolu] [Calc] Erreur d'exécution modification arrière plan

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur: Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !

[Résolu] [Calc] Erreur d'exécution modification arrière plan

Messagepar Solaris » 10 Avr 2018 00:38

Bonsoir

Ootremer m'a proposé cette macro pour modifier l'arrière des champs de mon formulaires. Cela fonctionne parfaitement sur mon fichier anonymisé et simplifié mais j'ai un erreur lorsque je copie/colle la macro sur mon fichier principal.
Capture.PNG


Je suis embêtée car je comprends pas pourquoi.
La seule modification que j'ai faite c'est parce que mon fichier original comporte plusieurs feuilles formulaires, donc j'ai décliné la macro en autant que de formulaire et j'ai adapté le nom de la feuille dans le texte de la macro. Mais j'ai dû louper quelque chose...
Le message d'erreur n'apparaît pas quand je lance la macro depuis le triangle vert de lecture quand je fais éditer la macro. Par contre, le message d'erreur apparaît dès que j'utilise le bouton.
Pourriez-vous au moins me dire vers quoi chercher car je joins mon extrait de fichier (mais là la macro marche bien) sauf que je ne sais pas quoi ou comment tester pour savoir ce qui cloche.

Merci et bonne nuit
Pièces jointes
Testsolaris.ods
(23.9 Kio) Téléchargé 8 fois
Dernière édition par Solaris le 29 Avr 2018 20:22, édité 2 fois.
Libre office 5.0.5.2 (par obligation)
Windows 7 Professionnel
Solaris
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 78
Inscrit le : 02 Août 2017 22:55

Re: [Calc] Erreur exécution macro modification arrière plan

Messagepar OOotremer971 » 10 Avr 2018 01:23

Solaris a écrit:Cela fonctionne parfaitement sur mon fichier anonymisé et simplifié mais j'ai un erreur lorsque je copie/colle la macro sur mon fichier principal.

Et ça t'étonne ?
On ne programme pas à tâtons et au pifomètre. Ce qui est écrit pour un contexte particulier n'est pas forcément adaptable à un autre contexte même ressemblant mais différent et cette façon d'agir fait fuir ceux qui tentent de t'aider car leur temps est précieux et tu le leur fais perdre. Pourquoi ne pas donner le bon contexte dès le départ au lieu de tenter d'adapter ensuite (sans compter les dégâts que cela peut occasionner sur fichier de travail (à l'image de celui qu'il à fallu refaire.

Pour que la macro fonctionne dans ton fichier test, j'ai aussi modifié le module "fondecran" comme ceci :
Code : Tout sélectionner   AgrandirRéduire
sub arriere_plan_conditionnel(event)
control = event.Source.Model
ChangeFond(control)
end sub   
   
Sub ChangeFond(control)
fond1 = RGB(255,255,255) 'blanc
fond2 = RGB(0,205,255) 'vert
fond3 = RGB(255,204,153) 'orange
    if isnull(control) then exit sub
    control_type = split(control.DefaultControl, ".")(5)
    select case control_type
    case "ComboBox", "TextField"
        if control.Text = "" or control.Text = control.DefaultText then
            control.BackgroundColor = fond2
            exit sub
        end if
    case "PatternField"
        if control.Text = control.LiteralMask or control.Text = control.DefaultText then
            control.BackgroundColor = fond2
            exit sub
        end if
    case "FormattedField"
        if control.Text = "" or control.EffectiveValue = control.EffectiveDefault then
            control.BackgroundColor = fond2
            exit sub
        end if
    case "NumericField", "CurrencyField"
        if control.Value = 0 or control.Value = control.DefaultValue then
            control.BackgroundColor = fond2
            exit sub
        end if
    case "ListBox"
        if ubound(control.DefaultSelection) < 0 then
            if control.CurrentValue = "" then
                control.BackgroundColor = fond2
                exit sub
            end if
        elseif control.SelectedItems(0) = control.DefaultSelection(0) then
            control.BackgroundColor = fond2
            exit sub
        end if
    case "CheckBox"
        if control.State = control.DefaultState then
            control.BackgroundColor = fond3
            exit sub
        end if
    case "DateField"
        if isempty(control.DefaultDate) then
            if isempty(control.Date) then
                control.BackgroundColor = fond2
                exit sub
            end if
        elseif isempty(control.Date) then
            control.BackgroundColor = fond2
            exit sub
        else       
            d = control.Date
            dd = control.DefaultDate
            if d.Day = dd.Day and d.Month = dd.Month and d.Year = dd.Year then
                control.BackgroundColor = fond2
                exit sub
            end if
        end if
    case "TimeField"
        if isempty(control.DefaultTime) then
            if isempty(control.Time) then
                control.BackgroundColor = fond2
                exit sub
            end if
        elseif isempty(control.Time) then
            control.BackgroundColor = fond2
            exit sub
        else       
            t = control.Time
            dt = control.DefaultTime
            if t.Hours = dt.Hours and t.Minutes = dt.Minutes and t.Seconds = dt.Seconds then
                control.BackgroundColor = fond2
                exit sub
            end if
        end if
    case else
    end select
    control.BackgroundColor = fond1
end sub


Mais bon, sans boule de cristal, je ne vois pas comment t'aider d'avantage.

@+
En principe, toujours à jour des dernières versions
(Sous Linux)
Avatar de l’utilisateur
OOotremer971
HédOOniste
HédOOniste
 
Message(s) : 1674
Inscrit le : 16 Avr 2010 14:31

Re: [Calc] Erreur d'exécution modification arrière plan

Messagepar Solaris » 10 Avr 2018 11:44

Bonjour,

Désolée pour la perte de temps mais ne vous en offusquez pas et je m'en excuse sincèrement car c'est juste que je ne savais pas que cet élément était pertinent...
J'ai bien vu cette modification au niveau de fondecran et je l'avais intégrée bien sûr dans le fichier intégral puisque la macro ArrièrePlan renvoie vers ce fondecran.
Pour un structure plus complète du fichier et de l'organisation des macros, voici comment cela est installé.
Pièces jointes
SolarisTest.ods
(58.41 Kio) Téléchargé 13 fois
Libre office 5.0.5.2 (par obligation)
Windows 7 Professionnel
Solaris
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 78
Inscrit le : 02 Août 2017 22:55

Re: [Calc] Erreur d'exécution modification arrière plan

Messagepar OOotremer971 » 10 Avr 2018 18:16

Bonjour,

Lorsque je me positionne sur la feuille "Formulaire Charges" et que je clique sur le bouton "Actualise Arrière Plan", je n'ai aucun plantage. Ceci est valable pour tous les formulaires.
Est-ce que tu peux télécharger le dernier fichier que tu as mis en ligne dans ce fil et le tester sur une autre machine que la tienne ? Ou éventuellement sur la tienne, après l'avoir renommé pour ne pas le confondre avec un autre fichier, puis déplacé vers un répertoire dont tu sais qu'il n'est pas protégé en écriture.

@+

PS: j'ai du mal à comprendre pourquoi 4 des 5 formulaires de ton fichier sont identiques et servent à remplir les mêmes cellules de la même feuille Champs ? Un seul formulaire aurait suffit ou alors tu nous caches encore des trucs ?

 Ajout : J'ai un plantage sur la macro DeplacerDerLigne, et c'est normal, si la colonne A ne contient aucune valeur. Il faut corriger de cette façon :


Code : Tout sélectionner   AgrandirRéduire
   Option Explicit
   
    Sub DeplacerDerLigneBaux()
    Dim monDocument As Object, maFeuille As Object, maZone As Object
    Dim destination As Object, zoneAcopier As Object, lesLignes As Object
    Dim zonesVides As Variant
    Dim derLigne As Long
    monDocument = Thiscomponent
    maFeuille = monDocument.sheets.getByName("Champs")
    maZone = maFeuille.Columns.GetByName("A")
    zonesVides = maZone.queryEmptyCells.RangeAddresses
    derLigne = zonesVides(UBound(zonesVides)).StartRow - 1
    if derLigne = -1 Then
       Print "Il n'y a rien à copier sur la feuille " & maFeuille.Name
       ActualiseArrierePlanBaux()
    else
       zoneAcopier = maFeuille.GetCellRangeByPosition(0,derLigne,815,derLigne)
       destination = maFeuille.GetCellByPosition(0,1)
       maFeuille.copyRange(destination.CellAddress, zoneAcopier.RangeAddress)
       lesLignes = maFeuille.Rows
       lesLignes.RemoveByIndex(derLigne,1)
       monDocument.CalculateAll
       ActualiseArrierePlanBaux()
    end if
    End Sub


J'ai uniquement modifié la macro DeplacerDerLigneBaux(), je te laisse faire les autres 
Pièces jointes
SolarisTest(copie).ods
(55.92 Kio) Téléchargé 7 fois
En principe, toujours à jour des dernières versions
(Sous Linux)
Avatar de l’utilisateur
OOotremer971
HédOOniste
HédOOniste
 
Message(s) : 1674
Inscrit le : 16 Avr 2010 14:31

Re: [Calc] Erreur d'exécution modification arrière plan

Messagepar Solaris » 29 Avr 2018 20:20

Bonsoir,

Désolée de ma réponse y tardive j’ai eu quelques soucis.

Non j’en n’ai rien caché mais j’ai trouve la solution solution à mon pb : la patience...
Mon fichier intégral comporte environ 120 champs par feuille et j’en changeais de feuille avant que la macro ait fini son travail. J’attendais mais pas suffisamment et dans le document test il y a avait très peu de champs donc c’etait Quasi instantané!

Merci pour votre aide et votre patience :bravo:
Libre office 5.0.5.2 (par obligation)
Windows 7 Professionnel
Solaris
Membre OOrganisé
Membre OOrganisé
 
Message(s) : 78
Inscrit le : 02 Août 2017 22:55

Re: [Résolu] [Calc] Erreur d'exécution modification arrière

Messagepar Dude » 30 Avr 2018 08:42

Rappelons que pour bloquer l'affichage, on peut avoir recours à la méthode LockControllers.
Attention cependant car elle n'inhibe pas la frappe de touches qui sont bloquées puis libérées lors du UnlockControllers.

On peut également faire patienter avec un dialogue de barre de progression lancé en début de traitement long.

Pour ces deux concepts, nombreux exemples dans le forum à rechercher.
Avatar de l’utilisateur
Dude
Grand Maître de l'OOffice
Grand Maître de l'OOffice
 
Message(s) : 20233
Inscrit le : 03 Mars 2006 08:45
Localisation : 127.0.0.1


Retour vers Macros et API

Qui est en ligne ?

Utilisateur(s) parcourant ce forum : Aucun utilisateur inscrit et 6 invité(s)