Problème d'activeX avec mac
Bonjour,
Je me permets de vous demander conseil car j'ai une erreur 429 "un composant ActiveX ne peut pas créer l'objet" lorsque j'exécute mon macro.
Il s'agit d'un macro pour ma thèse de médecine, qui a été codé pour PC mais que je dois utiliser sur mac (avec Excel 2019).
Sub Ouverture_RhinoValve()
'
' Ouverture_RhinoValve Macro
mypath = ActiveWorkbook.Path
mysource = "/Users/pierregagnieur/Documents/Médecine Internat/Articles/Article valve rhinomano/source"
ChDir mysource
varfgen = InputBox(4, "Entrer le nom géné du fichier", 0)
Set fs = CreateObject("Scripting.FileSystemObject")
If fs.fileexists(mysource & "\" & varfgen & ".csv") Then
'
Workbooks.OpenText Filename:= _
mysource & "\" & varfgen & ".csv" _
, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
Range("A1:C2001").Select
Selection.Copy
Windows("data.xlsm").Activate
Range("A2").Select
ActiveSheet.Paste
End If
Cells(1, 25) = varfgen
' save en xlsm
ActiveWorkbook.SaveAs Filename:=mysource & "\backup\" & varfgen & "_AUC.xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
Avez vous une idée de ce que je dois changer pour que cela fonctionne sur mac SVP ?
En vous remerciant d'avance pour votre aide et restant à votre disposition pour tout renseignement complémentaire,
Bien à vous.
Pierre
Bonjour,
Le filesystemobject n'est pas disponible sur mac.
Vous pouvez cependant utiliser la commande Dir.
Sub Ouverture_RhinoValve()
mysource = "/Users/pierregagnieur/Documents/Médecine Internat/Articles/Article valve rhinomano/source"
varfgen = InputBox(4, "Entrer le nom géné du fichier", 0)
If Dir(mysource & "/" & varfgen & ".csv") <> "" Then
'suite code
end if
'ou If Dir(mysource & "/" & varfgen & ".csv") = "" Then exit sub
'suite code
Cdlt,
Bonjour, merci beaucoup pour cette réponse rapide.
J'ai testé la nouvelle commande, mais le rapporteur d'erreur me dit qu'il n'y a pas de bloc if
J'ai donc retiré le End If (noté en orange ci dessous)
Sub Ouverture_RhinoValve()
mysource = "/Users/pierregagnieur/Documents/Médecine Internat/Articles/Article valve rhinomano/source"
varfgen = InputBox(4, "Entrer le nom géné du fichier", 0)
If Dir(mysource & "/" & varfgen & ".csv") <> "" Then
'suite code
end if
'ou If Dir(mysource & "/" & varfgen & ".csv") = "" Then exit sub
'suite code
La boite de dialogue me demande ensuite de renseigner le nom du fichier csv à rechercher.
J'écris donc "Pre_D_01" (qui se trouve dans le dossier intitulé "source", dont le chemin est indiqué au début)
Mais ensuite, j'ai cette erreur :
Avez vous une idée svp ?
Merci, bien à vous.
Pierre
EDIT : en remplaçant le "\" par "/" dans cette ligne :
Workbooks.OpenText Filename:= _
mysource & "\" & varfgen & ".csv" _
, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
Range("A1:C2001").Select
Selection.Copy
Windows("data.xlsm").Activate
Range("A2").Select
ActiveSheet.Paste
End If
Cela semble avoir réglé ce problème.
Maintenant, j'ai ce message :
Avez vous une idée s'il vous plait ?
Sur quelle ligne porte l'erreur ? A priori sur la ligne workbooks.opentext ?
Cela voudrait dire que vous avez passé la recherche. Je ne connais pas cette méthode. Je vous propose dans un premier temps de vérifier avec
workbooks.open filename:=mysource & "/" & varfgen & ".csv"
Puis dans un second, d'essayer ainsi :
'remplacement par xlMacintosh
Workbooks.OpenText Filename:= _
mysource & "/" & varfgen & ".csv" _
, Origin:=xlMacintosh, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
edit : en effet, sur mac ce sont des slashs et non des anti-slash.
Cdlt,
Comme je vous ai dit, je ne connais pas cette méthode et je ne peux pas avoir d'idée si je ne sais pas sur quelle ligne porte l'erreur.
Mais déjà, j'essaierais ceci :
activeworkbook.activesheet.Range("A1:C2001").Copy workbooks("data.xlsm").sheets("nomdelafeuilledestination").Range("A2")
'ou bien activeworkbook.activesheet.Range("A1:C2001").Copy thisworkbook.sheets("nomdelafeuilledestination").Range("A2")
Bonjour
Si vous cliquez sur deboguage, le code s'arrete sur quelle ligne ?
Ben cela c'est normal...windows sur MAC... vous allez faire sortir Steve Jobs de sa tombe...
Bon mettez plutot ceci --> Workbooks("Data.xlsm").Activate ou modifiez le code
Range("A1:C2001").Select
Selection.Copy
Windows("data.xlsm").Activate
Range("A2").Select
ActiveSheet.Paste
par ceci
Range("A1:C2001").Copy Workbooks("data.xlsm").sheets("nomdelafeuille").Range("A2")
Dites moi car je n'ai pas testé sur MAC
Edit : attention car vous devrez modifier la ligne en dessous aussi -->
Workbooks("data.xlsm")
.sheets("nomdelafeuille").cells(1,25) =varfgen
.saveas.....
End with
Merci beaucoup Dan !! Ca avance bien !
Maintenant il reste 2 petits problèmes
Le premier concerne la sauvegarde du fichier (et donc les dernières lignes du code) :
Et enfin, le dernier problème (plus important puisqu'il fausse tous les calculs...) : je ne sais pas pourquoi mais Excel intègre une ligne vide entre chacune de mes valeurs (voir ci dessous)
Alors que cela ne le fait pas sur le PC, et que les valeurs ne sont pas classées comme cela dans le fichier de base en .CSV (elles sont uniquement séparées par des virgules, voir ci dessous)
En espérant que cela ne soit pas trop complexe 😳😳
Merci et bonne journée !
Pierre
Bonjour
Le premier concerne la sauvegarde du fichier (et donc les dernières lignes du code) :
Pas facile cela...
Pourquoi avez-vous un 0 derrière l'extension XLSM ?
Le fichier est en mode partagé avec d'autres personnes ou vous êtes le seul à l'utiliser ?
Et enfin, le dernier problème (plus important puisqu'il fausse tous les calculs...) : je ne sais pas pourquoi mais Excel intègre une ligne vide entre chacune de mes valeurs (voir ci dessous)
Là il faudrait voir les options lors de la conversion CSV vers excel.
Le mieux serait d'utiliser l'enregistreur automatique d'excel et faire la conversion CSV. Ensuite voir ce qu'excel MAC vous renvoie comme instruction afin de comparer les deux lignes workbook.opentext.filename (windows et MAC)
Bonjour Dan,
Merci pour votre réponse.
Malheureusement, aucune idée pour ce 0 qui apparait après l'extension... Toutefois, après avoir fermé le message d'erreur, mon ficher s'est renommé comme il le fallait et je peux l'enregistrer manuellement sans problème. Je pense donc traiter ce problème par le mépris, même s'il rajoute 2/3 manips.
Pour le problème de la conversion CSV vers Excel, j'ai épluché les options dans "Préférences", mais je n'ai rien trouvé qui mentionne cette conversion.
Quand j'ouvre directement le ficher .CSV, cela ouvre une seule colonne, avec la série de 3 chiffres séparés par des virgules.
Quand j'ouvre le fichier .CSV en passant par "nouveau classeur Excel", "données", "ouvrir un fichier texte" et que je sélectionne le .CSV, on me demande de choisir quelques options :
Après, ce qui est étonnant c'est que lorsqu'on utilise le macro sur PC, il n'inclue aucune ligne supplémentaire entre les données... Et je ne vois pas ce qui pourrait changer cela dans le code du macro 😭
Bonjour,
Pouvez-vous essayer ainsi :
Workbooks.OpenText Filename:= mysource & "/" & varfgen & ".csv", _
Origin:=xlMacintosh, StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
Comma:=True, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
ou carrément en omettant le paramètre Origin, qui est peut-être la cause de l'insertion de lignes intermédiaires :
Workbooks.OpenText Filename:= mysource & "/" & varfgen & ".csv", _
StartRow:=1, DataType:=xlDelimited, TextQualifier:=xlDoubleQuote, _
Comma:=True, FieldInfo:=Array(Array(1, 1), Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
Cdlt,
Ca y est !! Cela semble marcher !!!
J'ai du tout reprendre depuis le début car le code qui marchait hier ne marchait de nouveau plus aujourd'hui...
J'ai re-tenté avec les explications de 3GB (message de vendredi, 12h42) et cela a supprimé les espaces et a permis a la macro de charger toutes les données du CSV et de faire tous les calculs correctement !!!
Voici le code final qui marche :
Sub Ouverture_RhinoValve()
'
' Ouverture_RhinoValve Macro
mypath = ActiveWorkbook.Path
mysource = "/Users/pierregagnieur/Documents/Médecine Internat/Articles/Article valve rhinomano/source"
varfgen = InputBox(4, "Entrer le nom géné du fichier", 0)
If Dir(mysource & "/" & varfgen & ".csv") <> "" Then
'suite code
'ou If Dir(mysource & "/" & varfgen & ".csv") = "" Then exit sub
'suite code
'
Workbooks.OpenText Filename:= _
mysource & "/" & varfgen & ".csv" _
, Origin:=xlMSDOS, StartRow:=1, DataType:=xlDelimited, TextQualifier:= _
xlDoubleQuote, ConsecutiveDelimiter:=False, Tab:=True, Semicolon:=False, _
Comma:=True, Space:=False, Other:=False, FieldInfo:=Array(Array(1, 1), _
Array(2, 1), Array(3, 1)), TrailingMinusNumbers:=True
ActiveWorkbook.ActiveSheet.Range("A1:C2001").Copy ThisWorkbook.Sheets("Feuil1").Range("A2")
End If
Cells(1, 25) = varfgen
' save en xlsm
ActiveWorkbook.SaveAs Filename:=mysource & varfgen & "_AUC.xlsm", _
FileFormat:=xlOpenXMLWorkbookMacroEnabled, CreateBackup:=False
End Sub
Vous n'imaginez pas la joie... un immense merci 🍾🍾🍾
En ce qui concerne la sauvegarde du fichier (2 dernières lignes du code), je pense que je vais abandonner, car le fichier qui est enregistré est "juste" le .CSV rangé en colonnes, et non le tableau de la macro avec données du CSV remplies et exploitées... Mais je peux me contenter de récupérer les résultats des calculs dans la macro même je suppose !
Une excellente soirée à vous et chapeau bas pour votre générosité et votre disponibilité !
Merci pour ce retour sympathique !
Vous savez, il y a un ruban au-dessus de l'espace commentaire, sur lequel vous pourrez trouver un logo avec des balises </> pour y écrire du code
Sinon, pour l'enregistrement, regardez quand même ce lien : https://docs.microsoft.com/fr-fr/office/vba/api/excel.xlfileformat qui liste les valeurs possibles du paramètre fileformat de la méthode Saveas https://docs.microsoft.com/fr-fr/office/vba/api/excel.workbook.saveas. Il est question de CSV, de CSV macintosh...
Bonne soirée,
Cdlt,
Bonjour
Désolé de ne pas être revenu hier soir... mais comme 3GB me suivait, vous avez la solution. Toutefois je m'étonne que le xlMSDOS est lu par excel MAC.
Après, ce qui est étonnant c'est que lorsqu'on utilise le macro sur PC, il n'inclue aucune ligne supplémentaire entre les données... Et je ne vois pas ce qui pourrait changer cela dans le code du macro
Comme je vous ai dit avant, utilisez l'enregistreur de macro automatique lorsque vous faites la conversion du fichier CSV. Une fois terminé, arrêtez l'enregistreur et aller voir le code dans l'éditeur VBA. Cela vous permettra de vérifier ce qui est commun à windows et MAC.
Pour la sauvegarde, essayez comme ceci -->
ActiveWorkbook.SaveAs Filename:=mysource & varfgen & "_AUC.xlsm"
Cordialement