[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 !
Solaris
Membre hOOnoraire
Membre hOOnoraire
Messages : 146
Inscription : 02 août 2017 21:55

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

Message par Solaris »

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
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Dernière modification par Solaris le 29 avr. 2018 19:22, modifié 2 fois.
Libre office 7.3.2.2
Windows 11
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

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

Message par OOotremer971 »

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

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 dites stables
AOO
LibreOffice
Debian 10 et 11
Solaris
Membre hOOnoraire
Membre hOOnoraire
Messages : 146
Inscription : 02 août 2017 21:55

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

Message par Solaris »

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é.
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
Libre office 7.3.2.2
Windows 11
Avatar de l’utilisateur
OOotremer971
ManitOOu
ManitOOu
Messages : 2744
Inscription : 16 avr. 2010 13:31

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

Message par OOotremer971 »

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

	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 
Vous ne pouvez pas consulter les pièces jointes insérées à ce message.
En principe, toujours à jour des dernières versions dites stables
AOO
LibreOffice
Debian 10 et 11
Solaris
Membre hOOnoraire
Membre hOOnoraire
Messages : 146
Inscription : 02 août 2017 21:55

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

Message par Solaris »

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 7.3.2.2
Windows 11
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 25164
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

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

Message par Dude »

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.