Incompatibilité de type

Bonjour à toutes et à tous,

Fichier BUDGETS.xlsm : Code feuille Accueil : procédure Private Sub Worksheet_Change(ByVal Target As Range), Ligne : For X = .Columns(1).Find(what:="Date", lookat:=xlPart, LookIn:=xlValues, searchdirection:=xlNext).Row To .Range("A" & Rows.Count).End(xlUp).Row Step 14 : incompatibilité de type sur X.

Je vous joints le fichier budgets menus.xlsm qui me sert de modèle et dans lequel tout se passe correctement.

D'avance merci pour votre aide. Bonnes journée et continuation à toutes et à tous. Prenez bien soin de vous.

BUDGETS.xlsm:

21budgets.zip (722.75 Ko)

budgets menus.xlsm :

14budgets-menus.zip (211.42 Ko)

Bonjour,

Attention la variable X est déjà déclarée en range alors, dans cette macro uniquement , remplacez la variable "X" par "Z" et la déclarer en "long" au début de la macro, ainsi que la variable "Y"

Private Sub Worksheet_Change(ByVal Target As Range)
Dim dDate As Date, dEaster As Date, tTab, AnnéePrécédente, iDay%, iNb%, iEaster%
Dim Z As Long, Y As Long

Cdlt

Bonjour à tous,

J'ai remarqué aussi : sur la feuille "Accueil", G1 n'est pas un champ nommé "NEWYEAR", contrairement à l'autre fichier.

Et encore, l'un à "Option explicit" actif et l'autre pas.

Bizz

#Arturo83, #Bizarre,

Merci à tous les deux pour vos réponses. Pour ce qui de X, je le remplace partout où il est présent ? Pour G1, je vais regarder cela.

Faut-il garder Option explicit ? Dans le fichier de Curulis57 (voir fil Feuille Propositions menus midi retrait, réponses de Curuilis57 de jeudi à 10.04 et 07.57), les déclarations des variables ne sont pas identiques.

"Attention la variable X est déjà déclarée en range alors, dans cette macro uniquement" : je n'ai pas compris. Où est-elle déclarée en Range ?

Dans .Range("B" & X + 1).Resize(11, 7).ClearContents : le X sera-t-il à remplacer par Z où est-ce le signe multiplication ? pour moi, il sera à remplacer par Z car le signe de multiplication est *

Bonjour

J'ai eu hier cette erreur de compilation "Incompatibilité de type" à cause d'une routine "Sub" Non fermée par un "End Sub". J'ai mis un certain temps avant de trouver.

Pour y arriver, j'ai du supprimer beaucoup de modules, classes et formulaires, c'est vrai que mes projets sont conséquents et que j'ai du mal à supprimer les dépendances.

Parmi, les dépendances, mes variables sont regroupées dans des modules dont les noms contiennent une des deux chaines "Global" ou "Common"

Je ne mets jamais de variables publiques dans les formulaires.

Je n'utilise jamais de variables du type i, j mais iRow, jColumn.

J'utilise partout Option Explicit. J'essaye de ne pas dupliquer les fonctions et pour cela j'utilise très peu : Private Function.... . de meme j'ai très peu de subroutines Sub ... je préfère toujours une fonction dans laquelle on a quelque chose à retourner..

"Attention la variable X est déjà déclarée en range alors, dans cette macro uniquement" : je n'ai pas compris. Où est-elle déclarée en Range ?

Dans le module "MVariablesPubliques" : Public Plage As Range, X As Range, X_Lig As Range

*********************************************************************************************************************

Pour ce qui de X, je le remplace partout où il est présent ? Oui, dans cette macro uniquement (il y a en a 21)

A faire en 1 seule fois, comme ceci:

budgets

Cdlt

Merci Arturo83.Je vais regarder pour variables publiques dans quel fichier que ce module existe.

Trois nouvelles questions : 1) que signifie % qui suit la déclaration de certains variables ? 2) Que représente X, Y, Z ? 3) For y = 2 to 8 : pour moi, y représente la ligne Date du menu, de la colonne B (1) (la colonne A n'étant prise en compte dans le décompte) à la colonne H incluse (8).

Regardez la feuille : quand je tape une année, la cellule s'efface.

Bonjour,

Je vais regarder pour variables publiques dans quel fichier que ce module existe. Dans le dernier fichier que vous avez déposé.

Dans la déclaration de variables, on peut remplacer as long, par "&", integer par "%" etc, voir la tableau ci-dessous, pour ma part, je préfère mettre les mots "long", "integer", etc ..., plutôt que le symbole, c'est quand même plus clair à comprendre pour le néophyte.

Plage de valeurs

Integer%2Long&4Single!4Double#8Currency@8String$VariableBooleanAucun2DateAucun8VariantAucun16
Type de DonnéesSigne de Déclaration RapideTaille (Octets)Plage de Valeurs
-32 768 à 32 767
-2 147 483 648 à 2 147 483 647
-3 402823E38 à 3 402823E38
-1 79769313486231E308 à 1 79769313486231E308
-922 337 203 685 477,5808 à 922 337 203 685 477,5807
Jusqu'à environ 2 milliards de caractères
True ou False
1er janvier 100 à 31 décembre 9999
Peut contenir n’importe quel type de données

Que représente X, Y, Z:

Ce sont justement des variables qui vont prendre tour à tour la valeur qu'on leur affecte dans une boucle de type: for x= 1 to 8, à chaque passage la variable X prendra la valeur de 1 jusqu'à 8.

Regardez la feuille : quand je tape une année, la cellule s'efface. Et si vous donniez plus de détails, quelle cellule de quelle feuille?

Bonjour Arturo83,

Merci pour ces renseignements. Je suis d'accord avec vous : c'est mieux d'employer Long, string, etc. que les symboles actuellement utilisés. Mais que représente x, y et z : par exemple x représente le tableau structuré, ou la feuille BD articles menu ou autre chose, etc. ?

16budgets-menus.zip (433.41 Ko)

Dans le code, il y a i : à quoi correspond i ? Et tour tTab : touche tab ou les tableaux structurés ? et pourquoi pas de type ? Dans votre réponse, plage des valeurs, à quoi correspondent les chiffres mentionnés ?

Feuille Accueil, cellule G1 : a) Sur proposition de Bizarre, dans la zone Nom, j'ai tapé NEWYEAR; b) cellule G1 : je tape une année à quatre chiffres : elle apparaît et aussitôt elle disparait.

Premier mot de passe : BUDGETS MENUS

Deuxième mot de passe : BUDGETS MENUS

C'est dans ce fichier que j'ai le problème de l'année qui disparaît de la cellule G1; Dans le fichier d'extension xlsm, je n'ai pas cet handicap.

Dans le fichier joint, il n'y pas de module variables publiques et le code de la feuille Accueil n'est pas complet et n'est pas conforme aux propositions de Curulis57. Je ne sais pas ce que vous pensez de mes questions : "Il me casse pieds avec ses questions idiotes" ou "au moins lui, il essaie de comprendre ce que je lui dis". Dans la feuille Accueil, partie code : j'ai écrit de nombreux commentaires, soit à partir de l'aide VBA, soit par déduction. Pour ce qui est par déduction, merci, si vous le souhaitez, d'en modifier le contenu si vous estimez qu'il est erroné ou incomplet. Je viens de remplacer X par Z mais, contrairement à vous, j'ai 69 changements au lieu des 21 que vous m'avez annoncer.

Feuille Accueil, cellule G1 : a) Sur proposition de Bizarre, dans la zone Nom, j'ai tapé NEWYEAR; b) cellule G1 : je tape une année à quatre chiffres : elle apparaît et aussitôt elle disparait.

Le code concernant le traitement de l'année se trouve dans le module de la feuille "sh01(Acceuil)", dans ce code, il y a cette ligne:

Range("G1").Value = AnnéePrécédente

or AnnéePrécédente ne contient pas de valeur, donc c'est normal qu'il n'y ait plus rien en G1, il faudrait ajouter la ligne (au-dessus de celle-ci): Range("G1").Value=Réponse -1

qui vous renverra l'année précédent à celle que vous aurez spécifier en G1.

**************************************************************

Mais que représente x, y et z : par exemple x représente le tableau structuré, ou la feuille BD articles menu ou autre chose

La personne qui a fait ce code à rentrer tous ces paramètres car elle pensait sûrement les exploiter par la suite mais, il n'en est rien, ils ne sont pas utilisés, vous pouvez les supprimer ou les laisser, cela n'altèrera pas le bon déroulement du programme.

J'ai ajouté la ligne que vous avez proposée mais le problème persitste.

15budgets-menus.zip (426.39 Ko)

Dans le fichier xlsm, X et y sont utilisés mais pas Z.

Pardon, je me suis trompé, voici le correctif:

Option Explicit
'BUDGETS MENUS.xltm

Private Sub Worksheet_Change(ByVal Target As Range)
    Dim tTab, AnnéePrécédente, X%, Y%, Z%, IDay%, INb%, DDate As Date
  'Effacer les feuilles BD menus, menus midi retraite, Menus journaliers et Menus viandes midi weekend en cas de modification
  'de l'année.
  'If Not Intersect(Target, [NEWYEAR]) Is Nothing Then
    Application.EnableEvents = False
    Application.ScreenUpdating = False

    Dim Réponse As Integer
    Réponse = MsgBox("Attention changement d'année !" & vbCrLf & vbCrLf & "Les feuilles Menus midi retraite, Menus journaliers et Menus viandes midi retraite vont être effacées !" & vbCrLf & vbCrLf _
      & "Voulez-vous continuer ?", vbYesNo + vbExclamation)

    'If Réponse = vbYes Then
        With Worksheets("Propositions menus midi retrait")
            'For X = .Columns(1).Find(what:="Date", lookat:=xlPart, LookIn:=xlValues, searchdirection:=xlNext).Row To .Range("A" & Rows.Count).End(xlUp).Row Step 14
            'Effacer les différentes feuilles menus.

            'Call EFTabBDMenus
            'Call EFMMR
            'Call EFMJ
            'Call EFMVMW
    'Else
          Application.EnableEvents = False
          AnnéePrécédente = Range("G1").Value - 1
          Range("G1").Value = AnnéePrécédente
          Application.EnableEvents = True
    'End If
        Application.ScreenUpdating = True
    '  End If
    End With
End Sub

On part du principe qu'il y a déjà une année en G1 et que cette macro renvoie l'année choisie -1, du moins si j'ai bien compris .

Le problème persiste toujours après que j'ai répondu oui quant à la suppression des feuilles.

Dans le fichier xlsm, j'ai un message d'erreur : Next sans for.

12budgets-menus.zip (723.57 Ko)

mis à part ce problème, le programme semble fonctionner, je vais donc essayer de travailler avec ce fichier xlsm. J'ai rajouté x% et Y% dans la déclaration des variables.

Le problème persiste toujours après que j'ai répondu oui quant à la suppression des feuilles.

Attendez, là vous me parlez d'autre chose. Avez-vous enlevé l'apostrophe au début des lignes "Call... " et qui les met en commentaires?

***************************************************************************************************************

Je reviens sur ceci:

mais, contrairement à vous, j'ai 69 changements au lieu des 21 que vous m'avez annoncer.

Visiblement, vous n'avez pas suivi la vidéo (message d'hier à 16h02)

Non, je n'ai pas enlevé les ' des call.

Feuille accueil, code, édition :sélectionner tout, remplacer: Remplacer X par Z : remplacer tout. et après confirmation, 69 modifications.

Il seraitpeut-être plus simple de travailler sur le fichier qui semble correct, excepté le next sans for ? C'est mon avis.

Feuille accueil, code, édition :sélectionner tout, remplacer: Remplacer X par Z : remplacer tout. et après confirmation, 69 modifications.

Vous n'avez surement pas, comme sur la vidéo, coché: "Procédure en cours" et "Mot entier"

Je viens d'essayer: texte introuvable ! Je vous joints le fichier original de Curulis57. Le mien est pour moi une copie conforme, mis à part les commentaires. Dans le fichier de Curulis57, remplacer X par Z est également impossible.

7budgets-menus.zip (211.42 Ko)

C'est sûr, si vous l'avez déjà changé auparavant, vous ne risquez plus d'en trouver. Reprenez le fichier, celui avant la modification, d'hier à 9h08.

Lequel des deux que je dois prendre ? Dans le fichier que vous allez me conseiller de prendre, que dois y faire ?

sur celui-ci: budgets menus.xlsm puisque l'autre c'était votre modèle

Rechercher des sujets similaires à "incompatibilite type"