Créer un code compatible mac et pc avec demande pour sélectionner un fichie
Bonjour à tous,
Je me tape la tête contre les murs avec un sujet qui pourtant a dû être traité mille fois :
je souhaite écrire un code où l'utilisateur choisis un fichier qui sera utilisé comme source de données
Le code doit-être compatible mac et PC. Je développe sur Mac.
Mes chemins même s'il ne sont pas vide ne sont pas reconnus.
Qui peut m'orienter svp ?
merci à tous
Bonjour
Mettez déjà le code que vous avez sous MAC. On adaptera pour Windows ensuite
Mes chemins même s'il ne sont pas vide ne sont pas reconnus.
C'est à dire ?
Avez-vous plusieurs chemins sous MAC ?
Le fichier à ouvrir est-il dans le même répertoire que votre fichier excel contenant les macros ?
Sinon sous MAC pour ouvrir la boite de dialogue, essayez avec cette commande
Application.Dialogs(xlDialogOpen).ShowCrdlt
Bonjour,
Merci pour votre retour.
Je précise que le fichier à choisir n'est pas forcément dans le même répertoire que le fichier porteur de la macro.
Alors j'en suis là dans mon code. Une fois le fichier cible ouvert on veut prendre les données de la feuille 1 à partir de la ligne 20 et les coller dans un nouveau classeur.
J'arrive à choisir le fichier sous mac mais c'est sous windows que ça ne fonctionne pas étonnamment.
ça ne marche sur la ligne où je vérifie si le fichier a bien été sélectionné.
Merci pour vos lumières
Sub TESTOUVRIR()
Dim wbSource As Workbook
Dim wsSource As Worksheet
Dim wsDest As Worksheet
Dim wbDest As Workbook
Dim sourceFilePath As String
Dim lastRow As Long
Dim targetRange As Range
' Création d'un nouveau fichier pour les données copiées
Set wbDest = Workbooks.Add
Set wsDest = wbDest.Sheets(1)
#If Mac Then
' Utilisation d'AppleScript pour obtenir le chemin du fichier sur Mac
sourceFilePath = MacScript("return posix path of (choose file of type {""org.openxmlformats.spreadsheetml.sheet"", ""com.microsoft.excel.xls"", ""com.microsoft.excel.xlsx"", ""com.microsoft.excel.xlsm""} with prompt ""Sélectionnez un fichier Excel"")")
' Vérifier si un fichier a été sélectionné
If sourceFilePath = "" Then
MsgBox "Aucun fichier sélectionné.", vbExclamation
Exit Sub
End If
' Afficher le chemin du fichier pour le débogage
MsgBox "Chemin du fichier sélectionné : " & sourceFilePath
' Ouverture du fichier source
On Error Resume Next
Set wbSource = Workbooks.Open(sourceFilePath)
On Error GoTo 0
' Vérifiez que le fichier source a été ouvert correctement
If wbSource Is Nothing Then
MsgBox "Erreur lors de l'ouverture du fichier source. Chemin du fichier : " & sourceFilePath, vbCritical
Exit Sub
End If
#Else
With Application.fileDialog(msoFileDialogFilePicker)
.AllowMultiSelect = False
.Show
If .SelectedItems.Count = 0 Then
MsgBox "aucun fichier sélectionné"
Exit Sub
Else
Application.Workbooks.Open .SelectedItems(1)
End If
End With
Set wbSource = ActiveWorkbook
' Vérifier si un fichier a été sélectionné
If VarType(sourceFilePath) = vbBoolean And sourceFilePath = False Then
MsgBox "Aucun fichier sélectionné.", vbExclamation
Exit Sub
End If
#End If
' Définir la feuille source (vous pouvez changer l'index ou le nom de la feuille si nécessaire)
Set wsSource = wbSource.Sheets(1)
' Vérifiez que la feuille source a été définie correctement
If wsSource Is Nothing Then
MsgBox "Erreur lors de l'accès à la feuille source.", vbCritical
wbSource.Close SaveChanges:=False
Exit Sub
End If
' Trouver la dernière ligne de données dans la colonne A
On Error Resume Next
lastRow = wsSource.Cells(wsSource.Rows.Count, 1).End(xlUp).Row
On Error GoTo 0
MsgBox lastRow
If lastRow < 20 Then
MsgBox "Il n'y a pas de données à copier à partir de la ligne 20.", vbExclamation
wbSource.Close SaveChanges:=False
Exit Sub
End If
' Copier les données des colonnes A et B à partir de la ligne 20
On Error Resume Next
Set targetRange = wsSource.Range("A20:B" & lastRow)
targetRange.Copy Destination:=wsDest.Range("A1")
If Err.Number <> 0 Then
MsgBox "Erreur lors de la copie des données : " & Err.Description, vbCritical
wbSource.Close SaveChanges:=False
Exit Sub
End If
On Error GoTo 0
' Fermer le fichier source sans enregistrer les modifications
wbSource.Close SaveChanges:=False
' Message de confirmation
MsgBox "Les données ont été copiées avec succès dans un nouveau fichier.", vbInformation
End SubBonjour
Je précise que le fichier à choisir n'est pas forcément dans le même répertoire que le fichier porteur de la macro.
Désolé de mon retour tardif
Je ne vois aucun souci pour ouvrir le fichier sous Windows avec le code que vous postez
Si je sélectionne sous Windows, le fichier s'ouvre bien et cette partie de code est correcte
Quel est le souci que vous rencontrez et à quelle ligne dans le code
Crdlt