|
|
|
|
Bonjour à tous,
La semaine recommence avec son lot de casses-tête, entre autre:
j'ai un fichier excel avec une macro relativement simple qui récupère les données du feuillet 1, pour les copier dans les feuillets 2 et 3. Le truc le + complexe, c'est que j'ai une fonction. Bref, quelque chose de simple. Cela fonctionne parfaitement sur un paquet de PC, mais pas sur d'autres. Et ce qui se passe est étrange: il ouvre le fichier, on voit la page mais sans le bouton qui permet d'exécuter la macro, puis il mouline, il mouline, il mouline... et il mouline à l'infini jusqu'à écrire "Excel ne répond plus"... :-( Ctrl Alt Supp et c'est reparti.
Les 2 PC sont sous Office 2003, la petite différence est que l'un deux est dans une version Pack Basic.
J'ai déjà exploité d'autres fichiers sur ce PC avec macros, et cela fonctionnait sans pb.
Si vous avez déjà eu ce problème, je vous serais très reconnaissante de m'aider. ;-)) J'ai vu dans un autre forum que quelqu'un avait eu ce pb à cause d'arguments dans une fonction, mais je ne vois pas ce que je peux changer. Je débute en VBA, pas facile!
Voici la fonction qui pourrait poser pb:
Function SheetExist(ByRef Name As String) As Boolean Dim i As Integer For i = 1 To Worksheets.Count If StrComp(Worksheets(i).Name, Name, vbTextCompare) = 0 Then SheetExist = True Exit Function End If Next i End Function
Configuration: Office 2003
Bonjour,
Option Explicit
Function SheetsExists(ByVal MyName As String) As Boolean
Dim MySheet As Worksheet
SheetsExists = False
For Each MySheet In ThisWorkbook.Worksheets
If (MySheet.Name = MyName) Then
SheetsExists = True
Exit For
End If
Next
End Function
'
Lupin |
Répondre à Lupin.A
|
Re:
Function SheetsExists(ByVal MyName As String) As Boolean
Dim MySheet As Worksheet
SheetsExists = False
For Each MySheet In ThisWorkbook.Worksheets
'For Each MySheet In ActiveWorkbook.Worksheets
'For Each MySheet In Workbooks("MonFichier.xls").Worksheets
If (MySheet.Name = MyName) Then
SheetsExists = True
Exit For
End If
Next
End Function
'
ce fut un plaisirs :-) Bonne continuité. Lupin
|
Bonjour Ludivine,
Function SheetsExists(ByVal MonClasseur As Workbook, _
ByVal MyName As String) As Boolean
Dim MySheet As Worksheet, Classeur As String
Classeur = ActiveWorkbook.Name
MonClasseur.Activate
SheetsExists = False
For Each MySheet In MonClasseur.Worksheets
If (MySheet.Name = MyName) Then
SheetsExists = True
Exit For
End If
Next
Workbooks(Classeur).Activate
End Function
'
Lupin
|
Re :
Option Explicit
Sub Test()
If SheetsExists(Workbooks("fichiertest.xls"), "test") Then
MsgBox ("ok")
Else
MsgBox ("faux")
End If
End Sub
'
Function SheetsExists(ByVal MonClasseur As Workbook, _
ByVal MyName As String) As Boolean
Dim MySheet As Worksheet
MsgBox (MonClasseur.Name)
SheetsExists = False
For Each MySheet In MonClasseur.Worksheets
If (UCase(MySheet.Name) = UCase(MyName)) Then
SheetsExists = True
Exit For
End If
Next
End Function
'
Lupin
|
Re:
Function SheetsExists(ByRef Liste As String, _ ByVal MyName As Workbook) As Boolean Bonne syntaxe :
Function SheetsExists(ByVal MyName As String, _
ByRef Liste As String) As Boolean
Dim MySheet As Worksheet
SheetsExists = False
For Each MySheet In ActiveWorkbook.Worksheets
Liste = Liste & MySheets.Name & vbLf
Ainsi, au retour de l'appel, il suffit de lancer un MsgBox Liste Lupin |