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 SubAutre 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
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
- Messages
- 1'794
- Excel
- 2010
- Inscrit
- 25/08/2014
- Emploi
- Consultant VB6 / SQL / VBA / Excel / Access
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 SubCe 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