Erreur d'exécution 1004

pour l'effacement, essaie :

                    .Range("D" & rS(i)).MergeArea.ClearContents

Cela devrait être au point.... (si pas d'autre erreur !)

J'ai testé le code ça fonctionne

Je viens également de tester le dernier fichier que tu m'as envoyé et tout semble fonctionner !! Pour les mdp : problème résolu

Vraiment un GRAND MERCI pour ton aide !!! Tu m'enlèves une belle épine du pied comme on dit

Sysqua

Je crois que tu gagnes surtout un code nettement plus réduit, d'où une situation plus claire pour la suite, je t'encouragerais volontiers à t'en inspirer pour le reste de ton code... Mais je sais fort bien que c'est mission quasi impossible au boulot...

On n'y est pas dans les conditions adéquates pour sortir des sentiers battus (avec le risque de n'arriver à rien) et on passe son temps à parer au plus pressé...

Bien des choses que je réalise dans les forums, j'aurais eu du mal à les imaginer au boulot (à l'époque, et j'étais dans des conditions relativement favorables...)

Bonne continuation.

C'est vrai que grâce à toi j'ai beaucoup moins de lignes de code et que c'est beaucoup plus clair !

Encore merci pour ton aide !

Bonne continuation également

Bonjour MFerrand, bonjour le forum,

Je ne pensais pas revenir ici de sitôt mais comme quoi...

J'ai besoin d'ajouter un champs dans un formulaire (saisie d'une suggestion d'amélioration). Je souhaite donc ajouter ce champs dans le code suivant afin qu'un message d'erreur apparaisse si ce champ n'est pas rempli et que la saisie de ce champs soit repercutée automatiquement dans mon tableau de suivi des suggestions.

Function SaisieOK(wsS As Worksheet, Optional sug As Boolean = False) As Boolean
    Dim msg() As String, lg, i%
    ReDim msg(IIf(sug, 8, 9))
    msg(0) = IIf(sug, "votre prénom !", "la date d'enregistrement !")
    msg(1) = IIf(sug, "votre NOM !", "l'entité !")
    msg(2) = IIf(sug, "votre fonction !", "le type de NC !")
    msg(3) = IIf(sug, "la date !", "le processus !")
    msg(4) = IIf(sug, "le type d’amélioration !", "le déclarant !")
    msg(5) = IIf(sug, "le sujet !", "la date du dysfonctionnement !")
    msg(6) = IIf(sug, "la raison de la suggestion !", "le client/prestataire/collaborateur !")
    msg(7) = IIf(sug, "la description !", "la description !")
    msg(8) = IIf(sug, "les effets attendus !", "la source !")
    If sug Then
        lg = Array(13, 15, 17, 19, 21, 23, 25, 31, 39)
    Else
 [color=#FF0000]       msg(9) = "l'action !"[/color]
        lg = Array(11, 13, 15, 17, 19, 21, 23, 25, 32, 34)
    End If
    With wsS
        For i = 0 To UBound(lg)
            If .Range("D" & lg(i)) = "" Then
                MsgBox "Veuillez renseigner " & msg(i), vbExclamation
                .Range("D" & lg(i)).Select
                SaisieOK = False: Exit Function
            End If
        Next i
    End With
    SaisieOK = True
End Function

Mon idée était donc de supprimer msg(9) = "l'action !" et de le faire remonter avec les autres et de le modifier de la sorte msg(9) = IIf(sug, "les effets attendus !", "l'action !") et d'ajouter la nouvelle celulle dans lg = Array(13, 15, 17, 19, 21, 23, 25, 31, 39)

Je ne sais pas si je suis bien claire... mais ce que j'ai fait ne fonctionne pas

A savoir qu'avec l'ajout de ce champs, mes deux formulaires ont désormais le même nombre de champs (10 chacun)

Quelqu'un pourrait-il m'orienter sur la modification du code ?

Merci d'avance et bonne journée

Bonjour,

Si je suis ce que tu entends modifier, tu ajoutes un champ à contrôler et à répercuter lors de la validation en ce qui concerne la saisie des suggestions d'amélioration.

Donc tu le rajoutes dans la définition de msg(9) que tu fais remonter dans la liste au-dessus de If sug Then.

Dans la définition de lg, tableau des numéros de lignes à contrôler (celui immédiatement au-dessous de If sug Then, tu rajoutes donc le nouveau numéro de ligne à contrôler, après 39.

C'est tout il me semble pour la fonction de vérification. Les ajustements correspondant sont à répercuter dans la proc. Valider :

sous l'instruction : If sug Then sont définies les paramètres pour la saisie des suggestions, le tableau rS correspond au tableau lg vu ci-dessus, tu rajoutes donc après 39 le nouveau numéro de ligne comme pour lg.

Le second tableau kC est celui des colonnes cibles, tu rajoutes pareil la lettre de colonne à la fin (même rang) dans la chaîne entre guillemets en n'oubliant pas une espace séparateur avec la lettre précédente.

[La fonction Split transforme une chaîne en tableau d'éléments en utilisant un séparateur inclus dans la chaîne, par défaut l'espace (inutile de le mentionner dans ce cas, on le mentionne quand il est différent, si on fait un tableau d'éléments de texte pouvant contenir des espaces, on utilise évidemment un autre séparateurs). Pour mémoire, la fonction Join fait l'inverse, elle transforme en chaîne texte un tableau en incorporant un séparateur (indiqué, ou non si espace) entre chaque élément.]

Et a-priori, si je n'ai pas oublié d'élément, c'est tout ce qu'il y a à faire...

Je dirai donc !

1) Tu as parfaitement compris la construction du code et comment il s'articulait, et nul doute que tu serais venue à bout de la manipulation puisque la partie déjà faite était relativement la plus compliquée de l'ensemble à modifier.

Donc, tu pourras refaire ce genre de manoeuvre !

2) C'est aussi un test pour la construction du code, de son adaptabilité. En travaillant avec des tableaux, on doit veiller à la correspondance des éléments d'un tableau à l'autre, l'ordre dans le tableau est indifférent (tout sera traité), ce qui compte c'est que les éléments qui se correspondent soient de même rang (même indice) dans les tableaux.

Cela demande une attention lorsqu'on modifie, mais cela limite les modifications (les boucles étant définies de 0 à UBound(tablo), elles ne changent pas, UBound s'ajustera à la modification faite.

Très cordialement et bonne continuation.

Merci MFerrand !

Tu as bien compris ce que je souhaitais faire et je suis ravie d'avoir compris le code !

J'avais également modifié la procédure Valider, de la même façon que celle que tu m'as décrite mais ça ne fonctionnait quand même pas. J'ai retenté de faire les modifications et toujours le même problème : le msg(9) est surligné en jaune

Je te joins le code modifié :

Function SaisieOK(wsS As Worksheet, Optional sug As Boolean = False) As Boolean
    Dim msg() As String, lg, i%
    ReDim msg(IIf(sug, 8, 9))
    msg(0) = IIf(sug, "votre prénom !", "la date d'enregistrement !")
    msg(1) = IIf(sug, "votre NOM !", "l'entité !")
    msg(2) = IIf(sug, "votre fonction !", "le type de NC !")
    msg(3) = IIf(sug, "la date !", "le processus !")
    msg(4) = IIf(sug, "l'entitée concernée !", "le déclarant !")
    msg(5) = IIf(sug, "le type d'amélioration !", "la date du dysfonctionnement !")
    msg(6) = IIf(sug, "le sujet !", "le client/prestataire/collaborateur !")
    msg(7) = IIf(sug, "la raison de la suggestion!", "la description !")
    msg(8) = IIf(sug, "la description !", "la source !")
    msg(9) = IIf(sug, "les effets attendus !", "l'action!")
    If sug Then
        lg = Array(13, 15, 17, 19, 21, 23, 25, 27, 33, 41)
    Else
        lg = Array(11, 13, 15, 17, 19, 21, 23, 25, 32, 34)
    End If
    With wsS

Dois-je encore supprimer/modifier quelque chose ?

Voilà le message qui apparaît lorsque je clique sur Valider

capture d e cran 2016 12 07 a 11 10 16

Tu as aussi remplacé 31 et 39 par 27 et 33 (corresp. à msg(7) et msg(8). Ajout de 41 => msg(9).

Au temps pour moi, aussi ! je l'avais zappé !)

ReDim msg(IIf(sug, 8, 9))

On n'a pas redimensionné correctement si sug !

Soit tu penses que cela peut encore varier et tu fais :

ReDim msg(IIf(sug, 9, 9))

Soit tu fais carrément :

ReDim msg(9)

et si ça varie et que les deux cas se différencient à nouveau tu reviendras à la formulation précédente.

msg est un tableau déclaré en tant que tableau, ce pourquoi on le dimensionne pour pouvoir affecter chaque élément.

Pas d'incidence sur les autres tableaux, constitués par affectation de tableaux à des variables de type Variant au moyen de fonctions Array ou Split. Ils sont automatiquement dimensionnés lors de l'affectation.

Désolé. Mais rien de bien grave !


Oui, j'avais pas encore lu le message d'erreur, mais là pas de piège : on dimensionnait à 8 et on voulait affecter un élément 9 ! Cela ne collait plus.

Effectivement, j'ai modifié d'autres lignes car j'ai ajouté le nouveau champ au milieu du formulaire et non à la fin.

J'ai redimensionné avec le code ReDim msg(IIf(sug, 9, 9)) et tout fonctionne !

C'est super MERCI !! Et merci pour tes explications à chaque fois

De rien ! C'est les explications qui permettent de comprendre et d'avancer. Et quand ça avance j'ai le sentiment de ne pas avoir travaillé pour rien ! C'est appréciable.

A+

Rechercher des sujets similaires à "erreur execution 1004"