Message d'erreur 13 VBA

Bonjour,

Je souhaite faire cette macros, mais un message d'erreur s'affiche et surligne "If Selection.Value = 0" en jaune.

Voici le message :

"Erreur d'execution 13

Incompatibilité de type"

Voici le code VBA:

Private Sub Macro2()

'VIDE SI 0 dans colonne TOTAL

For J = 2 To 60

For I = 4 To 220

If Cells(1, J).Value = "TOTAL" Then Sheets("Prévisionnel").Cells(I, J).Select

If Selection.Value = 0 Then Selection.ClearContents

Next I

Next J

End Sub

Quelqu'un a une solution?

Merci d'avance

Gulli

Bonjour,

Il te manque un END IF dans ton code avant NEXT I

Essaie plutot ceci :

Private Sub Macro2()

'VIDE SI 0 dans colonne TOTAL

For J = 2 To 60
For I = 4 To 220
If UCase(Cells(1, J).Value) = "TOTAL" Then
If Sheets("Prévisionnel").Cells(I, J).Value = 0 Then Sheets("Prévisionnel").Cells(I, J).ClearContents
End If
Next I
Next J
End Sub

Autre chose, sans voir ton fichier, :

  • J vas toujours jusque 60 ?? et I jusque 220 ??
  • LA valeur TOTAL se trouve sur la feuille Prévisionnelle ou sur une autre feuille ?

Crdlt

Merci Dan!

C'est parfait!

La valeur TOTAL se trouve sur la feuille, et pour l'instant J va jusqu'à 60 et I jusqu'à 220.

Au cas où je change , quelles formules je dois mettre si TOTAL est sur une autre feuille ou un autre classeur?

Si 60 est remplacé par "infini" ou maximum possible?

Si 220 est remplacé par "infini" ou maximum possible?

Merci d'avance,

Gulli

re,

Si 60 est remplacé par "infini" ou maximum possible?

Si 220 est remplacé par "infini" ou maximum possible?

A quoi correspond 60 et 220 à une nombre de lignes et colonnes ??

A te relire

60 c'est pour le nombre de semaines, bon je sais il y a 52 ou 53 semaines mais comme TOTAL est dans la colonne d'après , et je vais peut être rajouter d'autres colonnes, donc j'ai pris une marge. On va dire ça comme ça

Pour 220 , c'est le nombre de lignes que j'utilise pour l'instant, mais ce nombre peut augmenter à court terme.

D'ailleurs pendant qu'on y est, j'aimerais , si tu es partant ou d'autres gens sur ce forum ; pour la ligne 4 à la ligne 220 ( mais faisons pour "l'infini") faire la somme des colonnes de chaque ligne ( de la ligne 4 à l'infini) et de la colonne 2 à la colonne juste avant la colonne TOTAL.

J'ai trouvé un code sur un forum qu'il faudrait adapter je pense:

Mais il y a des lignes que je ne comprend pas donc si je ne les comprends pas ça va être dur à adapter à mon cas:

Voici le code:

Private Sub Macro2()

Sub Somme()

'Déclaration des variables

Dim i As Long, plage As Range, résultat As Integer

'avec la feuil 1

With Sheets("Feuil1")

'Je recherche de la première ligne de la colonne B jusque la dernière ligne pleine

For i = 1 To .Range("B65356").End(xlUp).Row

'j'indique qu'elle est la plage à calculer

Set plage = .Range("B" & i & ":E" & i)

'j'indique que pour cette plage j'utilise la fonction somme

résultat = Application.WorksheetFunction.Sum(plage)

'j'affiche le résultat dans la colonne F à la ligne qui correspond

.Range("F" & i) = résultat

Next i

End With

End Sub

Je te joins un fichier pour faciliter la compréhension

Pour info,

Il y a une macro sur "Thisworbook"

Et 4 macro sur feuille "Prévisionnel"

C'est la Macro 2 qui nous concerne dans ce cas, et je l'ai mis en veille dans la "Worksheet_Activate()"

D'avance merci

Gulli

Bonsoir,

Très rapidement, je dirais qu'il faut mettre des doubles quotes autour du 0.

Si la valeur n'est pas numérique (chaîne de caractère, date, ...), on ne peut pas comparer Selection.Value avec 0

If Selection.Value = 0 Then Selection.ClearContents

A remplacer par :

If Selection.Value = "0" Then Selection.ClearContents

Pas du tout testé ...

Bouben

Re,

Pour 220 , c'est le nombre de lignes que j'utilise pour l'instant, mais ce nombre peut augmenter à court terme

.

Le code à modifier

Sub Macro3()
'VIDE SI 0 dans colonne TOTAL
With Sheets("Prévisionnel")
    For J = 2 To 60
        For i = 4 To .Range("A" & .Rows.Count).End(xlUp).Row
            If UCase(.Cells(1, J).Value) = "TOTAL" Then
                If .Cells(i, J).Value = 0 Then .Cells(i, J).ClearContents
            End If
        Next i
    Next J
End With
End Sub

Ce qu'il faut aussi faire, c'est

  • déplacer tes 4 macros (macros1, macro2....) de la feuille Previsonnelle et les mettre dans un module
  • Ensuite enlever le mot PRIVATE devant chaque nom de macro
  • Juste après Macro2, enlever la ligne SUB SOMME ()

D'ailleurs pendant qu'on y est, j'aimerais , si tu es partant ou d'autres gens sur ce forum ; pour la ligne 4 à la ligne 220 ( mais faisons pour "l'infini") faire la somme des colonnes de chaque ligne ( de la ligne 4 à l'infini) et de la colonne 2 à la colonne juste avant la colonne TOTAL.

Tu veux faire la somme de chaque ligne mais dans quelle colonne ? Dans ton fichier colonne BC ??

Puis aussi le mot TOTAL, il peut se trouver où dans ta feuille ?

A te relire

Bonjour Dan et Bouben.

Merci à vous deux pour vos réponses respectives.

Désolé pour le temps de réponse, j'étais bien occupé ces jours-ci.

Dan,

Le cellule avec le mot "TOTAL" peut se trouver dans n'importe qu'elle colonne du tableau mais dans la ligne 1.

En fait la cellule "TOTAL" est juste à côté de la dernière date du tableau.

Dans le cas du fichier que je joins, la cellule "TOTAL" est dans la colonne BC car elle est juste a côté de la dernière date qui est en BB.

Mais le nombre de dates peut changer est donc l'emplacement de TOTAL aussi.

J'ai décidé d'écrire à la main le mot "TOTAL" dans la cellule au lieu de faire une macro, c'est plus simple non?

La somme d'une ligne i doit se trouver dans la cellule de la colonne TOTAL et de la ligne i.

La somme d'une ligne i correspond au cellule d'une ligne i de la colonne de la première date ( B dans ce cas) à la colonne de la dernière date ( BB dans ce cas).

Concernant le déplacement des macros dans un module: Je veux que ces macros s'activent lorsque je change de feuille et que je reviens sur la feuille ou lorsque j'ouvre le classeur. Par conséquent, il me semble plus logique de les laisser dans la feuille "prévisionnel" et dans "thisworbook" ( je ferais une copie adaptée à "thisworbook" après avoir finalisé avec la feuille "prévisionnel"), non?

Autre chose Dan , j'ai posté une autre question sur le forum, est-ce que tu pourrais y jeter un coup d'oeil svp ?

C'est l'étape d'après en gros.

https://forum.excel-pratique.com/excel/copier-cellules-d-un-classeur-a-un-autre-t56494.html

Merci d'avance,

Cdlt,

Gulli

Re

J'ai décidé d'écrire à la main le mot "TOTAL" dans la cellule au lieu de faire une macro, c'est plus simple non?

La somme d'une ligne i doit se trouver dans la cellule de la colonne TOTAL et de la ligne i.

La somme d'une ligne i correspond au cellule d'une ligne i de la colonne de la première date ( B dans ce cas) à la colonne de la dernière date ( BB dans ce cas).

Ah ok. c'est différent de ce que tu avais fait là. Car au vu de ton explication, il faut chercher la colonne après la dernière date en ligne 1 puis y mettre le mot total.

Je suis en train de modifier ta macro

Peux-tu me dire qui met la date dans la première ligne ?? par code ou toi même au clavier ?

Concernant le déplacement des macros dans un module: Je veux que ces macros s'activent lorsque je change de feuille et que je reviens sur la feuille ou lorsque j'ouvre le classeur. Par conséquent, il me semble plus logique de les laisser dans la feuille "prévisionnel" et dans "thisworbook" ( je ferais une copie adaptée à "thisworbook" après avoir finalisé avec la feuille "prévisionnel"), non?

Je ne fais jamais comme cela car cela te permet de conserver toutes tes macros au niveau fichier plutot qu'au niveau feuille et qu'elles soient accessibles. De plus si par mégarde tu supprimes ta feuille prévisionnelle, tu perds toutes tes macros.

Pour la question qu'elles s'activent lors de la séleciton de la feuille prévisonnel, pas de soucis avec ce que je t'ai expliqué.

A te relire

Salut Dan,

Tu as raison, en fait j'avais copié toutes mes macros sur le module ( aussi la première : "Private Sub Worksheet_Activate()" , sauf que celle-là, j'ai enfin compris qu'il faut la laisser sur la feuille et non pas la mettre sur le module....)

Pour tout te dire, en gros j'ai un projet de création d'entreprise.

Je souhaite faire un prévisionnel sur 3 ans. Il y aura donc trois classeurs de prévisionnel, correspondant à 3 ans.

Classeur 1: Année N

Classeur 2 : Année N+1

Classeur 3 : Année N+2

Dans chacun de ces classeurs, il y a la feuille "prévisionnel" et trois autres feuilles , elles aussi avec les colonnes de dates , mais sans la dernière colonne "TOTALE".

Enfin, il y a un 4ème classeur, le classeur "BILAN"

Dans ce classeur 4 il y a 3 feuilles,

Feuille 1 : Bilan

Feuille 2 : Compte de résultat

Feuille 3 : Flux de trésorerie

Comme rien ne se créer, et tout se transforme, Tous les chiffres qui ne proviennent pas du classeur 4 proviennent de la colonne TOTAL des classeurs 1, 2 ou 3.

Concernant les dates

La première année d'activité peut faire moins d'un an à la clôture des comptes, les deux années suivantes feront un an chacune pour sûr par contre.

Je ne sais pas encore à quelle date je vais commencer l'activité ni si je vais clôturer les comptes au 31 décembre ou à une autre date , par conséquent je mets les dates à la main.

Comme tu as pu le remarquer, comme chaque colonne va du lundi au dimanche, la dernière semaine peut être donc à moitié sur une année et à moitié sur une autre. On considère que la semaine entière appartient à l'année inférieure dans ce cas.

Merci encore pour ton aide,

Cordialement et à te relire,

Gulli

re

En relisant les codes et tes explications, je te propose ceci :

  • Tu mets une fois pour toute le mot TOTAL dans la dernière colonne à droite (BC dans ton fichier)
  • On remplace la macro 1 et 3 par une seule (Mise en forme de la colonne TOTAL et calcul de la somme de chaque ligne)

Lorsque tu ajouteras une date en ligne 1, sélectionne la colonne contenant le mot TOTAL, puis choisis l'option INSERER UNE COLONNE et mets la date dans la cellule précédente au mot total.

Il te suffira ensuite de resélectionner la feuille PREVISIONNEL pour mettre le tout à jour.

Le code est prêt dans ce sens, dis moi si ok

A te relire

Dan,

Si j'ai bien compris: si je dois rajouter 3 semaines dans la feuille, j'insère 3 colonnes à gauche de la colonne TOTAL ( Donc la colonne TOTAL ne sera plus en BC), Si je veux enlever 4 semaines, par exemple, je supprime les 4 colonnes précédant la colonne TOTAL ( La colonne TOTAL ne sera plus en BC)

C'est bien ça ?

Dans l'attente de ton code et de te lire.

Merci,

Gulli

Re

Oui tu as compris

Revoici ton fichier dans lequel, les macro 3 et 2 sont supprimées au profit d'une seule -> Macro Total

Dans cette macro il y a quelques instructions pour la mise en forme couleur mais ces instructions ne servent plus à rien si tu mets en forme ta colonne une fois pour toute et que tu procèdes par insertion colonne ou suppression selon le cas

L'exécution de la macro se fait toujours sur activation de la feuille prévisonnel

Si ta demande est solutionnée, veille lors de ta réponse à cliquer sur le V vert à coté du bouton EDITER pour cloturer le fil

Crdlt

Merci beaucoup Dan!

C'est super cool de ta part et quel expert!:)

A+ sur le forum

Gulli

Rechercher des sujets similaires à "message erreur vba"