VBA de PC à MAC, problème d'ActiveX

  • Créateur du sujet Créateur du sujet fumexo
  • Date de début Date de début

fumexo

Membre confirmé
9 Mai 2017
16
0
28
Bonjour tout le monde ! :)

Alors voila, je viens de finir une macro de compilation de fichier Excel et tout marche nickel !
Enfin sur mon PC :P
Mais sur mac c'est une autre affaire !
J'ai regardé sur des forums mais je n'ai pas trouvé une solution qui convenait pour mon problème alors je tente ma chance !

Voici le code complet de ma macro :
Bloc de code:
Option Explicit
    ' Michel STAELENS
    Dim MonRepertoire As String, onglet As String, autofin As Boolean, lignedeb As String, lignefin As String, coldeb As String, colfin As String, destinataire, i As Integer, dimTab As Integer, depuis As Integer
    Dim TabEnTete() As String
Sub select_repertoire()
    Dim Repertoire As FileDialog
    Set Repertoire = Application.FileDialog(msoFileDialogFolderPicker)
    Repertoire.Show
    If Repertoire.SelectedItems.Count > 0 Then
        Range("repertoire").Value = Repertoire.SelectedItems(1)
    End If
End Sub
Sub compiler()

    ' mise en place des paramètres du programme
    MonRepertoire = Range("repertoire").Value

    Set destinataire = ActiveWorkbook
   
    coldeb = Range("coldeb").Value
    colfin = Range("colfin").Value
    lignedeb = Range("lignedeb").Value
    lignefin = Range("lignefin").Value
    onglet = Range("onglet").Value
    autofin = False
    If lignefin = "" Then autofin = True
    dimTab = 0
   
    If Range("debentete").Value <> "" Then
        dimTab = (Cells(Range("debentete").Row, Range("debentete").Column - 1).End(xlToRight).Column - Range("debentete").Column + 1)
        ReDim TabEnTete(dimTab - 1)
        For i = 0 To UBound(TabEnTete)
            TabEnTete(i) = Cells(Range("debentete").Row, Range("debentete").Column + i).Value
        Next i
    End If
       
    ' effacement des données

    Worksheets("compilation").Activate
    ActiveCell.Offset(rowOffset:=1).Activate
    Selection.ClearContents
   

    ' place le curseur au début
    Range("A2").Offset(0, dimTab).Select
    depuis = ActiveCell.Row
   
    ' lecture du répertoire
    MsgBox "Début de la compilation ..."
    ListeFichiers MonRepertoire
    MsgBox "Fin de la compilation ..."
   
End Sub
Sub ListeFichiers(Repertoire As String)
   
    If Repertoire = "" Then
        MsgBox " Choisissez le répertoire !"
        Exit Sub
    End If
   
    Dim Fso, SourceFolder, SubFolder, fichier As Object
    Set Fso = CreateObject("Scripting.FileSystemObject")
    Set SourceFolder = Fso.GetFolder(Repertoire)
       
    ' boucle sur tous les fichiers du répertoire
    For Each fichier In SourceFolder.Files
        If Right(fichier.Name, 4) = ".xls" Or Right(fichier.Name, 5) = ".xlsx" Or Right(fichier.Name, 5) = ".xlsm" Then
            If Left(fichier.Name, 2) <> "~$" Then
               
                Workbooks.Open Filename:=Repertoire & "\" & fichier.Name
                If FeuilleExiste(onglet) Then
                    Sheets(onglet).Select
               
                    ' trouve la dernière ligne
                    Range(coldeb & (lignedeb - 1)).End(xlDown).Select
                    If autofin Then lignefin = ActiveCell.Row

                    ' sélectionne la région à copier
                    Range(coldeb & lignedeb & ":" & colfin & lignefin).Select

                    ' copie la région
                    Selection.Copy

                    ' change de fichier
                    destinataire.Activate
                    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                    Application.CutCopyMode = False

                    If Range("debentete").Value <> "" Then
                        For i = 0 To UBound(TabEnTete)
                            Windows(fichier.Name).Activate
                            Range(TabEnTete(i)).Copy
                            destinataire.Activate
                            Range("A" & depuis & ":" & "A" & (depuis + lignefin - lignedeb)).Offset(0, i).Select
                            Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
                            Application.CutCopyMode = False
                        Next i
                    End If
                   
                End If

                ' ferme le fichier sans faire de changement
                Windows(fichier.Name).Activate
                ActiveWindow.Close

                ' place le curseur sous les données
                destinataire.Activate
                Cells(depuis + lignefin - lignedeb + 1, dimTab + 1).Select
                ' sauvegarde cette ligne pour recopie des en-têtes en colonne
                depuis = ActiveCell.Row

                If Range("pasapas").Value = "OUI" Then
                    MsgBox ("Fin de recopie de """ & fichier.Name & """ : " & lignefin - lignedeb + 1 & " lignes recopiées !")
                End If

                    Else
                        MsgBox "La feuille """ & onglet & """ du fichier """ & fichier.Name & """ est nouvelle et ne sera pas reprise !"
                    End If
       
        End If
    Next fichier

    ' appel récursif pour les sous-répertoires
    For Each SubFolder In SourceFolder.subfolders
        ListeFichiers SubFolder.Path
    Next SubFolder
    
End Sub
Function FeuilleExiste(NomFeuille As String) As Boolean
    On Error GoTo Err_FeuilleExiste
    FeuilleExiste = False
    FeuilleExiste = Not ActiveWorkbook.Worksheets(NomFeuille) Is Nothing
Err_FeuilleExiste:
End Function


Mais sous mac il y a le problème des "ActiveX" qui sont une composante de windows et qui par conséquent ne fonctionnent pas sous mac.
Et je n'arrive pas à contourner le problème.
L'erreur à laquelle je fais face est la suivante:
debogage.webp
Et le message suivant s'affiche :
"Erreur 429, un composant ActiveX ne peut pas créer d'objet"

Voila j'espère que l'un de vous sait comment contourner ce problème !
Merci d'avance :)
 
Haha j'étais en train de le lire ^^
Mais il parle d'un code sans activeX sauf qu'il ne le post pas alors ...
Je regarde donc la doc de Ron de Bruin mais je ne trouve rien ...
 
Là, je ne suis pas en mesure de t'aider, mais si Aliboron passe dans le coin, il va certainement pouvoir t'aiguiller .
 
Bon j'ai déjà lu les 6 première page de résultats Google concernant ce problème et beaucoup l'on eu mais aucun n'a trouvé de solution ^^
Mon dernier espoir était ce forum mais apparemment ce problème n'est pas contournable !

j'abandonne donc, je dirai a mon entreprise de trouver un PC !

En tout cas merci a ceux qui ont pris le temps de lire mon sujet et a toi zeltron54 pour y avoir répondu !
Bonne continuation à vous !
 
Après avoir regardé de plus prés la macro, ce ne sera pas le seul problème, d'autres instructions appellent les activesX,

Donc la solution ne doit pas être de contourner le problème, mais plutôt de réécrire une macro spécifique mac, avec une éventuelle aide d' applescript.
Pour ce faire il faut savoir exactement ce que doit faire cette macro !
Bon courage.
 
Alors je peux expliquer précisément le but de la macro et passer les documents nécessaires mais il faut savoir que je sais absolument pas coder en applescript donc il faut que quelqu'un soit motivé pour se taper tout le boulot :p

Remarque la partie gênante c'est juste la partie de compilation de fichier, ça doit pas être si compliqué a coder :P
 
Tu peux toujours passer les éléments.
Je pourrai essayer de voir ça, sans promesse de réussite ! LOL
 
Tu upload ton fichier chez un hébergeur et tu postes le lien.
ou
Tu me contactes en MP et échangera nos adresses mail.
 
Bon en gros, dans un dossier il y aura des documents Excel, des relevé de temps donc un par salarié et par mois, tous de la même forme, et le principe de cette macro est de compiler tous les fichiers du dossier afin de n'avoir plus qu'un seul fichier excel contenant toutes les informations de chaque travailleurs.

On part donc du tableau suivant (attention il est dans l'onglet recap du fichier excel) :
tab départ.webp
Le temps de travail et l'activité pour 1 salarié

Et le but est d'arrivé a cela :
tab arrivé.webp
Donc le temps passé par activité pour tous les salariés, et ainsi par un simple système de philtre savoir qui a fait quoi ou combien de temps avons nous passé sur telle activité.

Voila j'espère que c'est assez clair :p
 
Si ton fichier avec ta macro fonctionne sur PC, je ne vais pas réécrire le tout !:p
Transmet moi ces fichiers et dossiers (avec des fichiers exemples si tu trouves cela confidentiel)
que j' essai juste de modifier la partie qui utilise les activeX en script applescript . :p