Incompatibilité de type

C'est le contraire : c'est budgets qui ne fonctionne pas, et budgets menus qui le servait de modèle.

Ok, ça ne change pas grand chose, refaites les mêmes opérations sur ce fichier.

1)- Dans cette ligne: IIf(dDate = DateSerial([NEWYEAR], 12, 25, "Noël"), ""))))))))))) la parenthèse fermante après "Noël" n'est pas à sa place.

2)- Il manque un "End if"

3)- Je vous conseille vivement d'être plus rigoureux sur l'écriture du code, et en particulier sur l'indentation, cela permet de retrouver plus facilement où démarre une condition, une boucle et où cela se termine.

4)- Autre chose, si vous imbriquez plusieurs For X= , For Y=, mettez en sortie Next X, Next Y, là aussi cela facilite la lecture et évite des erreurs lors du déroulement du

code, comme l'exemple ci-dessous, avec l'indentation en prime.

For X= 2 to 8
    For Y= 1 to 10
        ************
        'déroulement du code
        ***********
    Next Y 'Prochaine valeur de Y
Next X' Prochaine valeur de X

La feuille Propositions menus midi retrait ne se remplit pas avec l'année choisie.

J'ai déclaré X et Y dans le module Variables publiques.

À quel endroit dois-je mettre le end if manquant?

7budgets.zip (889.16 Ko)

Vous avez changé de mot de passe?

J'ai dû me tromper de fichier. En plus, Next sans for. budgets menus.xlsm fonctionne me semble-t-il. Si vous le voulez bien, vous comparez les deux versions et, dans mon fichier BUDGETS.xltm, vous me dites, Monsieur LECLERE ou BUDGETS, sans me dire laquelle, regardez telle ligne de votre fichier avec celle de Curulis57 et la différence devrait vous sauter aux yeux. J'ai changé de place le Next X mais cela me sort toujours le Next sans For pour le Y.

9budgets.zip (709.85 Ko)

Le message indiquant next for manquant est faux , c'est le End if qui manque:

Regardez ceci:

If iDay > 0 Then
'1 : numéro de la ligne (la ligne Titre n'est pas prise en compte); 2 : Numéro de la colonne (La colonne A est prise en compte). > : supérieur à.
If Y > 2 And .Cells(X - 1, 2) = "MMR260" Then
'Offset : Renvoie ou définit la distance entre chaque niveau d'étiquette, ainsi que la distance entre le premier niveau et l'origine. La valeur par défaut est 100
'elle indique l'espace entre les étiquettes de l'axe et l'origine. La valeur utilisée doit être un entier compris entre 0 et 1 000, en fonction de la taille de la police
'utilisée pour les étiquettes de l'axe. Propriété de type Long en lecture-écriture. Copy : Méthode Copy telle qu'elle s'applique à l'objet Range. Copie l'objet Ran-
'ge dans la plage spécifiée ou dans le Presse-papiers. IIf : Renvoie l'un ou l'autre de deux arguments selon l'évaluation d'une expression.
.Cells(X, Y).Offset(-1, 0).Resize(13, 6).Clear: .Cells(X, Y).Offset(-1, -1).Resize(13, 1).Copy Destination:=.Cells(X - 1, Y): .Cells(X - 1, Y) = IIf(Y = 3, _
"MMR261", "MMR262")
.Cells(X, Y) = dDate
'DateSerial : Renvoie une valeur de type Variant (Date) correspondant à une année, un mois et un jour déterminés.
.Cells(X + 11, Y) = _
IIf(dDate = DateSerial([NEWYEAR], 1, 1), "Jour de l'an", _
IIf(dDate = dEaster + 1, "Lundi de Pâques", _
IIf(dDate = dEaster + 50, "Lundi de Pentecôte", _
IIf(dDate = dEaster + 19, "Ascension", _
IIf(dDate = DateSerial([NEWYEAR], 5, 1), "Fête du travail", _
IIf(dDate = DateSerial([NEWYEAR], 5, 8), "Victoire 40-45", _
IIf(dDate = DateSerial([NEWYEAR], 7, 14), "Fête nationale", _
IIf(dDate = DateSerial([NEWYEAR], 7, 15), "Assomption", _
IIf(dDate = DateSerial([NEWTEAR], 1, 11), "Toussaint", _
IIf(dDate = DateSerial([NEWYEAR], 11, 11), "Armistice 14-18", _
IIf(dDate = DateSerial([NEWYEAR], 12, 25), "Noël", "")))))))))))
'<> : différent de.
If .Cells(X + 11, Y) <> "" Then .Cells(X + 11, Y).Interior.Color = RGB(255, 100, 100)
Else
.Cells(X, Y).Offset(-1, 0).Resize(13, 6).Clear
Exit For
End If

Le "If" en bleu voit bien son "End IF", mais pas le if en rouge

J'ai placé un end if à à la fin des deux autres mais end if sans if.

Par rapport à Curilis57, j'aurai un end if de trop : en tout, Curulis57 en a trois : après exit for, un après le premier application .enableevents=true, le dernier après le second application.enableevents=true; Quant aux next (sans précision ni de x ni de y), il en apparaît que deux après le end if qui suit exit for. Donc, je suis complètement perdu. Je ne comprends plus rien, désolé. Peut-il y-a-til une erreur sur une ou plusieurs lignes qui ont pour conséquence d'avoir ces messages d'erreur qui seraient alors erronés, inadaptés.

Bonjour,

Pourquoi ne reprenez-vous pas la proposition de Curulis57, si ça marche bien?

Bonjour Arturo83,

budgets menus.xlsm est la proposition de Curulis57 qui fonctionne bien. Je l'ai imprimée. À partir du document imprimé, j'ai écrit le code dans mon fichier BUDGETS.xltm que j'ai sauvegardé en xltm et en xlsm. Pour moi, les deux codes sont identiques et malgré cela, dans BUDGETS que des erreurs de ceci, de cela.

Salut BUDGETS,
Salut Arturo,

pas trop le temps tout de suite, je regarderai ce soir.
Mais, peut-on me dire où se trouve cette déclaration de X as Range ?

Attention la variable X est déjà déclarée en range

A+

Bonjour Curulis57,

Il semblerait que cette variable est déclarée dans le module Variables publiques.

OK, j'ai vu et (pas le temps de fouiller le code) où est-ce utilisé (quelle feuille ou circonstances) ?

Conformément à ton fichier (voir fil feuille propositions menus midi retrait, jeudi, 00.04 et 07:57), X et Y sont utilisés dans le code de la feuille Accueil. Je ne comprends pas pourquoi ma feuille propositions menus midi retrait s'est transformée ainsi.

9budgets.zip (707.12 Ko)

Pas "mes" x,y, BUDGETS, mais ton X as Range...

Désolé, je n'ai pas compris ta réponse. À moins que tu dises que x et y sont dans un module chez moi et que ce module n'existe pas dans ton fichier. Ton programme fonctionne correctement, chez moi, il ne fonctionne pas malgré qu'il semble être conforme au tien.

Salut BUDGETS,
Salut Arturo,

tu as réussi une belle soupe dans ton programme!
Il y a tellement de choses à faire différemment (à mon goût personnel de la programmation, bien sûr) que je ne sais pas par où commencer!

Certains vont hurler à l'hérésie mais tant pis : perso, j'élimine d'office 'Option explicit' et les variables publiques.
Je déclare les variables nécessaires à chaque procédure. Elles restent locales et ne t'empoisonnent pas la vie plus tard.
D'autant que tes variables publiques ne sont rien d'autre que des variables utilisées localement, finalement.

Déso, mais j'ai dû recopier intégralement ma macro d'origine : même la formule du calcul de Pâques avait été corrompue!

Donc, dans la procédure qui nous occupe, j'ai dû déclarer x% qui se comporte dès lors comme variable locale.
Dans un bloc IF..., écrite à ma manière (càd sans ENDIF), le signe Underscore (_) avait été effacé, rendant l'instruction invalide d'autant plus qu'un commentaire y avait été glissé! Trop de commentaires tuent le commentaire.
Peut-être devrais-tu les consigner par ordre alphabétique dans un document annexe.

Un autre Application.EnableEvents=False mal placé rendait impossible toute autre interception de l'événement.

Bref, que du bonheur!

Allez, courage et persévérance, c'est en forgeant qu'on devient forgeron!

A+

7budgetspfff.zip (602.08 Ko)

Bonjour Curulis57,

Merci pour le nouveau fichier. Je vais imprimer le code de la feuille Accueil et le comparer au mien. J'ai apporté les modifications nécessaires mais toujours le problème de Next sans For. Peut-être faut-il mettre X en minuscules et Y en majuscules ?

5budgets.zip (698.55 Ko)

Salut BUDGETS,

bon, je le répète encore une fois, ceci engendre une erreur NEXT sans FOR.
Ne pas mettre de commentaires dans un bloc IF THEN où THEN est suivi d'un underscore : Then _

                        If Y > 2 And .Cells(X - 1, 2) = "MMR260" Then _
                            'Offset : Renvoie ou définit la distance entre chaque niveau d'étiquette, ainsi que la distance entre le premier niveau et l'origine. La valeur par défaut est 100
                            'elle indique l'espace entre les étiquettes de l'axe et l'origine. La valeur utilisée doit être un entier compris entre 0 et 1 000, en fonction de la taille de la police
                            'utilisée pour les étiquettes de l'axe. Propriété de type Long en lecture-écriture. Copy : Méthode Copy telle qu'elle s'applique à l'objet Range. Copie l'objet Ran-
                            'ge dans la plage spécifiée ou dans le Presse-papiers. IIf : Renvoie l'un ou l'autre de deux arguments selon l'évaluation d'une expression.
                             .Cells(X, Y).Offset(-1, 0).Resize(13, 6).Clear: _
                             .Cells(X, Y).Offset(-1, -1).Resize(13, 1).Copy Destination:=.Cells(X - 1, Y): _
                             .Cells(X - 1, Y) = IIf(Y = 3, "MMR261", "MMR262")

Pour être certain, je le supprime dans ton fichier et remis un bloc IF ENDIF classique.

En [G2], je crée la cellule nommée [OLDYEAR] puisque, de toute façon, ta variable "Annéeprécédente" ne sera jamais initialisée correctement.
Dès que tu cliques sur [NEWYEAR], sa valeur est copiée dans [OLDYEAR]. ainsi, si tu refuses la création d'une nouvelle année, [NEWYEAR] retrouve sa valeur précédente.

J'ai remis cette instruction à sa bonne place, tant qu'à faire.
Je force également (bonne idée?) l'affichage de la date en "dddd d mmmm yyyy".

.Cells(X, Y) = Format(dDate, "dddd d mmmm yyyy", vbMonday)

A+

10budgetsohlala.zip (604.63 Ko)

Bonsoir Curulis57,

"Ne pas mettre de commentaires dans un bloc IF THEN où THEN est suivi d'un underscore : Then _" : je n'ai pas compris : dans le fichier joint, tous les commentaires sont toujours présents.

"Pour être certain, je le supprime dans ton fichier et remis un bloc IF ENDIF classique." : tu supprimes quoi ? Où as tu remis un bloc If.End if classique ?

"J'ai remis cette instruction à sa bonne place, tant qu'à faire." : de quelle instruction parles-tu ?

Changement d'année : prise en compte dans propositions MMR mais pas dans les autres feuilles.

Rechercher des sujets similaires à "incompatibilite type"