"Type incompatible (erreur 13)"

S

SYLVAIN

Guest
Bonjour le forum ainsi que thierry ;)

lorsque je lance cette macro (merci thierry :D )

écrira sur chaque feuille :

en A1 son nom espectif
en B1 la date et l'heure


Sub AllSheets()
Dim WS As Worksheet
For Each WS In Sheets
With WS
.Cells(1, 1) = WS.Name
.Cells(1, 2) = Format(Now, "DD/MM/YYYY HH:MM")
End With
Next

je me retrouve avec un "Type incompatible (erreur 13)"

que dois je faire
 
@

@+Thierry

Guest
Salut Sylvain, le Forum

Huum je viens de faire un copier collé du Code que tu as posté ici, et, mis à part le "End Sub" manquant... Cette Macro Fonctionne Parfaitement

Je viens de tester sous
- Excel XP (2002) / Win XP Pro 5.1 S/P1
- Excel 2000 / Win 2000 5.0 S/P 3

Es-tu sous Excel 97 ?

Sinon quelle version et quelle ligne bloque (en jaune) quand tu as le message Erreur 13 ?

Bonne Soirée
@+Thierry
 
S

SYLVAIN

Guest
dring dring, bonjor le forum !!!!!!!

Voila ma macro:

Dim WS As Worksheet
For Each WS In Sheets
With WS

Columns("M:S").Select
Selection.EntireColumn.Hidden = False
Range("N2").Select
Selection.AutoFilter Field:=1, Criteria1:="BARRIOL"
Columns("N:R").Select
Selection.EntireColumn.Hidden = True
Range("A1").Select

End With
Next ' ici la ligne bloque (en jaune) avec le message erreur 13


End Sub

je suis sous office 2000

bonne journée
 
@

@+Thierry

Guest
Hello Sylvain, le Forum

Essaie plutôt comme ceci :

Sub SYLVAIN()
Dim WS As Worksheet
For Each WS In Sheets
With WS
.Select
.Columns("M:S").EntireColumn.Hidden = False
.Range("N2").AutoFilter Field:=1, Criteria1:="BARRIOL"
.Columns("N:R").EntireColumn.Hidden = True
.Range("A1").Select
End With
Next

End Sub

(Surtout ne pas oublier les "." en début de ligne entre "With" et "End With")

Bonne Journée
@+Thierry
 
L

LaurentTBT

Guest
Bonjour à tous.

J'ai du mal à faire le lien entre la première procédure (AllSheets) et la deuxième (Sub SYLVAIN) que Thierry vient de corriger.

Pour la première, si elle engendre aussi une erreur, il y a un problème, sous Excel XP, avec la fonction VBA Format, qui parfois n'est pas reconnue.
Michel avait trouvé le truc: il faut écrire VBA.Format... Mais de mémoire, ce n'était pas l'erreur 13.

Une autre question que je me pose: j'ai toujours du mal à faire la différence entre les objets SHEETS et WORKSHEETS.
Comme l'erreur signale "type incompatible", n'y aurait-il pas une incompatibilité justement entre la déclaration de WS comme Worksheet, et la boucle For each WS In SHEETS? Peut-être faut-il remplacer cette boucle par For each XS In Worksheets, ou bien laisser Sheets, mais déclarer WS as sheet???
Malheureusement, je suis sur un poste internet au boulot sans Excel sous la main, donc c'est juste quelques idées dans le bleu!

Enfin, si cela peut aider quand même...

Bonne journée.
Laurent.
 
@

@+Thierry

Guest
Hello Laurent,

et woui Sheets ou Worksheets that is the Question !! lol

L'aide dit :

Worksheets, propriété
L'objet Application renvoie une collection Sheets qui représente toutes les feuilles de calcul du classeur actif. En lecture seule.

Sheets, propriété
L'objet Application renvoie une collection Sheets qui représente toutes les feuilles du classeur actif. En lecture seule.

Et hop "De Calcul" disparito !!!

Alors l'idée simple m'est venue immédiatement de faire le test suivant :

Dans un classeur vierge avec trois Feuilles, ajouter 1 Feuille DE MacroXL4 puis faites Tourner ces deux macros :

Sub WooooooooorkSheets()
Dim WS As Worksheet
Dim Msg As String
For Each WS In Worksheets
Msg = Msg & WS.Name & vbCrLf
Next
MsgBox Msg
End Sub


Sub Sheeeeeeeeeeets()
Dim WS As Worksheet
Dim Msg As String
For Each WS In Sheets
Msg = Msg & WS.Name & vbCrLf
Next
MsgBox Msg
End Sub

Donc on voit de suite que WorkSheet ne détecte pas la Macro1 (FeuilMacroXL4) donc voici une première différence...

Ensuite on corse la chose (Salut Pat5 !!) lol

On rajoute une DialogSheetXL5, et pourquoi pas un graph !!
La Macro Worksheet s'en sort aisément et ne liste toujours que les feuilles (les vraies), tandis que la macro Sheets bug lamentablement avec une erreur 13 d'incompatibilité de type... (on dirait que les DialogSheet et les Graph n'encaisse pas WS.Name !)

Voilà donc la leçon a en tirer !! J'en conclus que tant que le classeur ne contient que des feuilles de calcul, Sheets et Worksheets ont le même effet, mais que Sheets détecte tous les onglets d'un classeur... La preuve, si vous avez toujours le classeur avec les 3 feuilles, la MacroXL4, Le DialogSheet et le Graph. faites tourner ceci :

Sub CompteSheets()
Dim Msg As String

MsgBox "WorkSheets trouve : " & Worksheets.Count & " Feuilles dans ce Classeur" & vbCrLf & _
"Tandis que Sheets trouve : " & Sheets.Count & " Feuilles dans ce Classeur"
End Sub


Par contre faire un Dim WS as Sheet... nicht, nicht, Ein gross Katastrof, Niet Niet ! lol

Bonne soirée
@+Thierry
 
@

@+Thierry

Guest
Re tout le monde,

En fait en me relisant (sorry for the bold) je viens de réaliser qu'il faut, si on veut vraiment éviter un bug pour lister tous les onglets d'un classeurs contenant des Graphs, par exemple, déclarer WS as Object...

Sub Sheeeeeeeeeeets()
Dim WS As Object
Dim Msg As String
For Each WS In Sheets
Msg = Msg & WS.Name & vbCrLf
Next
MsgBox Msg
End Sub

Mais donc, les MacroXL4 ne sont pas vues par la collection WorkSheets mais par contre elles sont acceptées As WorkSheet (allez comprendre la Logique de Microsoft là dedans)

Bonne soirée
@+Thierry
 

Discussions similaires

Statistiques des forums

Discussions
312 229
Messages
2 086 426
Membres
103 206
dernier inscrit
diambote