[VBA]MAC EXCEL 2011 - erreur d'excution 9

Signaler
Messages postés
8
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
8 novembre 2011
-
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
-
Bonjour,

Étant débutante, j'ai conçu cette macro sur PC elle fonctionne bien mais il faut absolument qu'elle fonctionne sous MAC. Hors j'ai encore des souci de code, pouvez vous m'aiguiller.

Voici le souci sur cette ligne :

LigneCible = Workbooks("MACINTOSH HD: Users: anne: Desktop: BDD.xls").Worksheets("BDD").Range("A65535").End(xlUp).Row + 1

Il me met une erreur d'éxecution 9 l'indice n'appartient pas à la sélection

Voici la macro complète :
Je ne suis pas sûr que je n'ai pas d'erreur dans la suite du programme.



Sub Transfert_CT()
Dim LigneCible As Long, ligneOrigine As Long
Dim LigneFin As Long
Dim Données As Variant
Dim Nom As String
Dim Mois As String
Dim Trimestre As String
Dim Année As String
Dim Nbjoursmois As String
Dim Nbconges As String
Dim Nbformation As String
Dim Nbtrav As String
Dim Pointeur As Long


'Lecture des infos dans la fiche de saisie
Nom = ThisWorkbook.Worksheets("fiche_activite").Range("B3").Value
Mois = ThisWorkbook.Worksheets("fiche_activite").Range("E3").Value
Trimestre = ThisWorkbook.Worksheets("fiche_activite").Range("E4").Value
Année = ThisWorkbook.Worksheets("fiche_activite").Range("E5").Value
Nbjoursmois = ThisWorkbook.Worksheets("fiche_activite").Range("D6").Value
Nbconges = ThisWorkbook.Worksheets("fiche_activite").Range("D8").Value
Nbformation = ThisWorkbook.Worksheets("fiche_activite").Range("D10").Value
Nbtrav = ThisWorkbook.Worksheets("fiche_activite").Range("D12").Value
LigneFin = ThisWorkbook.Worksheets("fiche_activite").Range("A2000").End(xlUp).Row
Données = ThisWorkbook.Worksheets("fiche_activite").Range("A16:e" & LigneFin)
 
'Ecriture dans l'onglet Base de données BDD
 
' Le chemin sera à modifier en fonction de l'application
'CheminBdd = "HD:BDD.xls"
'Dir("Chemin d'accès", MacID("TEXT"))
 ' If Left(Dir("HD:Users:anne:Desktop:BDD.xls", MacID("XLS ")), 4) <> "BDD." Then
  If Left(Dir("MACINTOSH HD:USERS:anne:Desktop:BDD.xls", MacID("XLS5")), 4) <> "BDD." Then
'      MsgBox "pas de fichier"
 '  End If
  
  
  
  Workbooks.Add
  Worksheets.Add
  ActiveSheet.Name = "BDD"
  Worksheets("BDD").Range("A1") = "Nom"
  Worksheets("BDD").Range("B1") = "Mois"
  Worksheets("BDD").Range("C1") = "Trimestre"
  Worksheets("BDD").Range("D1") = "Année"
  Worksheets("BDD").Range("E1") = "Nbjoursmois"
  Worksheets("BDD").Range("F1") = "Nbconges"
  Worksheets("BDD").Range("G1") = "Nbformation"
  Worksheets("BDD").Range("H1") = "Nbtrav"
 
  ThisWorkbook.Worksheets("fiche_activite").Range("A15:E15").Copy Destination:=Worksheets("BDD").Range("I1:M1")
  'ActiveWorkbook.SaveAs Filename:=CheminBdd & "BDD.xls"
  ActiveWorkbook.SaveAs Filename = "MACINTOSH HD: Users: anne: Desktop:BDD.xls"
 Else
 Workbooks.Open Filename = "MACINTOSH HD: Users: anne: Desktop: BDD.xls"
End If
LigneCible = Workbooks("MACINTOSH HD: Users: anne: Desktop: BDD.xls").Worksheets("BDD").Range("A65535").End(xlUp).Row + 1

Select Case Mois
   Case "Janvier", "Février", "Mars"
      Trimestre = "T1"
 Case "Avril", "Mai", "Juin"
    Trimestre = "T2"
Case "Juillet", "Aoüt", "Septembre"
    Trimestre = "T3"
Case "Octobre", "Novembre", "Décembre"
    Trimestre = "T4"
End Select

' Boucle répétitive pour le nom
For Pointeur = LigneCible To LigneCible + UBound(Données) - 1
 Range("BDD!A" & Pointeur) = Année
 Range("BDD!B" & Pointeur) = Trimestre
Range("BDD!C" & Pointeur) = Mois
Range("BDD!D" & Pointeur) = Nom
Range("BDD!E" & Pointeur) = Nbjoursmois
Range("BDD!F" & Pointeur) = Nbconges
Range("BDD!G" & Pointeur) = Nbformation
Range("BDD!H" & Pointeur) = Nbtrav
Next Pointeur
'Copie globale de la zone saisie
Workbooks("BDD.xls").Worksheets("BDD").Range("I" & LigneCible & ":M" & LigneCible + UBound(Données) - 1) = Données
Workbooks("BDD.xls").Close True

End Sub
 


Merci de votre aide précieuse.
vivi

17 réponses

Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
Salut,

pour commencer tu travailles sous excel VBA donc tu n'es pas dans le bon thème:

le bon thème est ici : Accueil/Forum/Visual Basic 6/Langages dérivés/VBA

en suite interesse toi à l'instruction "With" pour simplifier l'ecriture de ton code. Un exemple :


With Worksheets("BDD")
   .Range("A1") = "Nom"
   .Range("B1") = "Mois"
   .Range("C1") = "Trimestre"
   .Range("D1") = "Année"
   .Range("E1") = "Nbjoursmois"
   .Range("F1") = "Nbconges"
   .Range("G1") = "Nbformation"
   .Range("H1") = "Nbtrav"
End With


Je te conseil d'utiliser des variable objets pour stocker ton nouveau fichier et la feuille BDD comme suit:

Dim MyNewWbk as Workbook, BDDFeuille As Worksheet

With Worksheets("BDD")
   .Range("A1") = "Nom"
   .Range("B1") = "Mois"
   .Range("C1") = "Trimestre"
   .Range("D1") = "Année"
   .Range("E1") = "Nbjoursmois"
   .Range("F1") = "Nbconges"
   .Range("G1") = "Nbformation"
   .Range("H1") = "Nbtrav"
End With

If Left(Dir("MACINTOSH HD:USERS:anne:Desktop:BDD.xls", MacID("XLS5")), 4) <> "BDD." Then

  Set MyNewWbk = Workbooks.Add
  Set BDDFeuille = Worksheets.Add
  
  With BDDFeuille
     .Name = "BDD"
     .Range("A1") = "Nom"
     .Range("B1") = "Mois"
     .Range("C1") = "Trimestre"
     .Range("D1") = "Année"
     .Range("E1") = "Nbjoursmois"
     .Range("F1") = "Nbconges"
     .Range("G1") = "Nbformation"
     .Range("H1") = "Nbtrav"

     ThisWorkbook.Worksheets("fiche_activite").Range("A15:E15").Copy Destination:=.Range("I1:M1")
     'depuis excel 2010 il y à puls de 65535 il est donc preferable d'utilisé la methode suivante 
     ' qui fonctionne avec toutes les versions d'excel
     LigneCible = .Range("A" & .Columns("A").Rows.Count).End(xlUp).Row + 1
  End  With

  MyNewWbk.SaveAs Filename = "MACINTOSH HD: Users: anne: Desktop:BDD.xls"


Note que j'ai écrit le code directement ici donc il n'est pas testé !

A+
Messages postés
8
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
8 novembre 2011

Merci du conseil,

mais j'ai toujours la même erreur 9 à la deuxième ligne (soit le premier with)
With Worksheets("BDD")

quelqu'un peutx m'aiguiller ? merci
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Bonjour,

voilà ce que l'on peur fréquemment lire sur le net :
Use of Excel workbooks created on a Mac machine can cause problems. They are supposed to be in interchangeable, but we have had Mac users send up workbooks that will crash our computers. Try not to exchange files between PC and Macs!

Ce qui signifie qu'il est très risqué de passer, de Windows vers Mac, des classeurs faits depuis Windows.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
et vice-versa, bien sûr.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
je n'aime par ailleurs pas :
 Workbooks.Add
  Worksheets.Add
  ActiveSheet.Name = "BDD"

qui reste trop flou et que je remplacerais par du plus précis, ainsi :
Dim nouvwb As Workbook, nouvfeuille As Worksheet
   Set nouvwb = Workbooks.Add
   Set nouvfeuille = nouvwb.Worksheets.Add()
   nouvfeuille.Name = "BDD"

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
et kif-kif pour ta ligne :
ActiveWorkbook.SaveAs Filename = "MACINTOSH HD: Users: anne: Desktop:BDD.xls"

qui deviendrait alors de manière plus orthodoxe :
nouvwb.SaveAs Filename = "MACINTOSH HD: Users: anne: Desktop:BDD.xls"


et n'oublie ensuite pas de libérer la mémoire (in fine) :
set nouvwb = nothing
ser nouvfeuille = nothing


D'une manière plus générale, arrête de travailler sur des Active..... (lourd et risques). Travaille directement sur les objets. On s'en porte en général mieux.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
8
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
8 novembre 2011

Etant débutante, pouvez vous m'aider à reconstruire étape par étape la macro par conséquent sous MAC ?

Merci.vivi
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Désolé, mais je ne possède pas Excel/Mac !

Mais commence par corriger en fonction de ce que je t'ai dit. D'autant que ces corrections sont également salutaires pour Excel/Windows !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
8
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
8 novembre 2011

En corrigeant, j'ai une erreur encore sur cette ligne :

Code Visual Basic :
LigneCible = Workbooks("MACINTOSH HD: Users: anne: Desktop: BDD.xls").Worksheets("BDD").Range("A65535").End(xlUp).Row + 1


Il me met une erreur d'éxecution 9 l'indice n'appartient pas à la sélection

Comment y résoudre ?
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
cela veut dire (sans préjuger du reste) qu'il ne trouve pas l'objet worksheets("BDD"), voire l'objet Workbooks("MACINTOSH HD: Users: anne: Desktop: BDD.xls") lui-même !


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
1835
Date d'inscription
vendredi 13 mai 2005
Statut
Membre
Dernière intervention
20 novembre 2013
10
Salut,

dans la deuxième partie de mon message premier message, je t'ai déjà donné la solution. Mais effectivement, j'ai répété, maladroitement la première partie de mon message.

il fallait donc comprendre (mais cela demande un peu d'effort, je le conçois) :

 If Left(Dir("MACINTOSH HD:USERS:anne:Desktop:BDD.xls", MacID("XLS5")), 4) <> "BDD." Then

  Set MyNewWbk = Workbooks.Add
  Set BDDFeuille = Worksheets.Add
  
  With BDDFeuille
     .Name = "BDD"
     .Range("A1") = "Nom"
     .Range("B1") = "Mois"
     .Range("C1") = "Trimestre"
     .Range("D1") = "Année"
     .Range("E1") = "Nbjoursmois"
     .Range("F1") = "Nbconges"
     .Range("G1") = "Nbformation"
     .Range("H1") = "Nbtrav"

     ThisWorkbook.Worksheets("fiche_activite").Range("A15:E15").Copy Destination:=.Range("I1:M1")
     'depuis excel 2010 il y à plus de 65535 lignes, il est donc préférable d'utiliser la méthode suivante 
     ' qui fonctionne avec toutes les versions d'excel
     LigneCible = .Range("A" & .Columns("A").Rows.Count).End(xlUp).Row + 1
  End  With


A+
Messages postés
8
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
8 novembre 2011

Cela passe merci bigfish_le_vrai. Il m'ouvre un classeur donc la fiche s'appelle BDD mais le classeur se nomme classeur 2. Il m'intègre bien la ligne A15 E15 mais ensuite rien et j'ai un souci avec le FOR il met erreur d'execution 13 incompatibilité de type à cette ligne là

For Pointeur = LigneCible To LigneCible + UBound(Données) - 1


merci de votre aide
vivi
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
et voilà que tu passes maintenant à une nouvelle (inconnue jusqu'ici) partie de ton code !
Et sans nous en dire tout !
Qu'est Pointeur ? comment et où l'as-tu typée, cette variable ?
On ne va tout de même pas (ce n'est pas un sujet spécifique et isolé) devoir, pas à pas (et jusqu'où et jusqu'à quand ?), reprendre toutes les lignes de ton code au fur ert à mesure qu'une erreur y est dénoncée ici ou là !
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
8
Date d'inscription
lundi 29 juin 2009
Statut
Membre
Dernière intervention
8 novembre 2011

Je pensais que les forum était un peu d'aide mais je vois que cela n'est pas le cas
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
Je pensais que les forum était un peu d'aide mais je vois que cela n'est pas le cas

Il l'est, oui, mais dans le respect de son règlement (que tu n'as apparemment pas lu).

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
et te t'invite à à le lire ici et à bien vouloir t'y conformer. Merci.

Regarde un peu à quoi on aboutit, avec ta discussion :
titre : "erreur d'exécution 9" ===>> traité
et maintenant (mais sans préalable ni rapport aucun, sauf que c'est ton appli : "erreur d'exécution 13 incompatibilité de type à cette ligne là "
Tu comprends mieux, là ?

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
239
mais quand même :
rentre en mode debug et regarde ce que contiennent tes vatiables
pointeur
lignecible
ubound(données)
C'est le premier réflexe
=>> et dis-le-nous (de sorte à ne pas nous faire jouer les devins)


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient