Problème avec xlam (sur 365 x32 bits)

Bonjour,

Pour helper un internaute...

Tout est dans le titre : J'ai une macro aux petits oignons qui me fait la misère sous 365 quand je la transpose en tant que complémentaire sous 365.

Cherche testeur pour compte rendu de débogage.

Dans le classeur joint la macro fait correctement le job.

Si on enlève la macro de ce classeur et qu'on la transfère dans un classeur de macro complémentaire et qu'on l'ajoute au ruban ça plante à l'exécution sous 365.

Votre analyse SVP...

12macroatester.zip (311.43 Ko)

Merci d'avance !

Salut Galopin,

Si on enlève la macro de ce classeur et qu'on la transfère dans un classeur de macro complémentaire et qu'on l'ajoute au ruban ça plante à l'exécution sous 365.

Tu veux dire que la macro devient une XLAM ?

Ou c'est cela. Je n'ai pas 365. Mais l'utilisateur me dit que ça plante sur la ligne :

Y2 = Feuil2.Name = "src"

On a testé en enregistrant la macro en tant que classeur de macro complémentaire dans le répertoire .../Addins

puis on a rattaché la macro à un bouton perso dans le ruban développeur.

Enfin on a coché le complément "Perso" dans les compléments Excel

La macro plante dès la ligne :

Y2 = Feuil2.Name = "src" 'Erreur d'exécution 424 (Objet requis !)

J'ai tenté :

Y2 = ActiveWorkbook.Feuil2.Name = "src"

... Mais c'est pire Erreur 400 !

Il n'y a pas de déclaré manquant dans Outils > Référence

Une idée ?

A+

Hello,

Etrange cette histoire ...

Le code name de la feuille du fichier est bien Feuil2 ?

Re,

Essaie le code comme ceci :

Sub Galopin()
Dim WsC$, WsS$, iLR&, iC$, S$
Dim Y1 As Boolean, Y2 As Boolean
Y1 = Sheets(1).Name = "cible"
Y2 = Sheets(2).Name = "src"
If Y1 And Y2 Then
   On Error GoTo GESTERR
   WsC = Sheets(1).Name
   iC = Sheets(WsC).Cells(1).End(xlDown).Row

   WsS = Sheets(2).Name
   iLR = Sheets(WsS).Cells(1).End(xlDown).Row

   With Worksheets(WsC)
      .Cells(2) = "N° de cde"
         .Range("B2").Formula = "=VLOOKUP(A2," & WsS & "!A1:H" & iLR & ",1,FALSE)"
         .Range("B2").AutoFill Destination:=.Range("B2:B" & iC)
      .Cells(4) = "Nom"
         .Range("D2").Formula = "=VLOOKUP(A2," & WsS & "!A1:H" & iLR & ",2,FALSE)"
         .Range("D2").AutoFill Destination:=.Range("D2:D" & iC)
      .Cells(5) = "Réf produit"
         .Range("E2").Formula = "=VLOOKUP(A2," & WsS & "!A1:H" & iLR & ",7,FALSE)"
         .Range("E2").AutoFill Destination:=.Range("E2:E" & iC)
      .Cells(7) = "Qté cdée"
         .Range("G2").Formula = "=VLOOKUP(A2," & WsS & "!A1:H" & iLR & ",8,FALSE)"
         .Range("G2").AutoFill Destination:=.Range("G2:G" & iC)
   End With
Else
   If Not Y1 Then S = "1 : Cible "
   If Not Y2 Then S = "2 : Export "
      MsgBox "Erreur Feuille " & S & "introuvable ou non conforme !"
End If
Exit Sub
GESTERR:
   MsgBox "Erreur imprévue " & Err & " : " & Error
End Sub

Par contre en mettant le fichier xlam dans les ADDIns, je n'arrive pas à retrouver le code sous l'onglet Compléments. Bizarre

Crdlt

Par contre en mettant le fichier wlam dans les ADDIns, je n'arrive pas à retrouver le code sous l'onglet Compléments. Bizarre

Il faut aller dans Complément Excel > Parcourir et sélectionner le complément avant de pouvoir le cocher.

On essaiera demain avec les N° d'index plutôt que les CodeName...

=> C'est quoi l'extension des complémentaires sous 365 ? c'est bien toujours .xlam ?

=> Tu me corriges si je me trompe : Il n'y a pas de nécessité d'activer la référence à la complémentaire dans le classeur (puisque tout se passe par le ruban)

A+

Bonsoir …

Les Maudits Mots ! Une piste peut-être avec mon concentré d’oignons ,

Sub Galopin()
  Dim WsC$, WsS$, L2&, L1&, S$
  On Error GoTo GESTERR
  WsC = Feuil1.Name
  L1 = Feuil1.Cells(1).End(xlDown).Row
  L2 = Feuil2.Cells(1).End(xlDown).Row
  WsS = Feuil2.Name
  With Feuil1
    .Cells(2) = "N° de cde": .Cells(4) = "Nom": .Cells(5) = "Réf produit": .Cells(7) = "Qté cdée"
    .[B2].Resize(L1).Formula = "=VLOOKUP(A2," & WsS & "!A2:H$" & L2 & ",1,FALSE)"
    .[D2].Resize(L1).Formula = "=VLOOKUP(A2," & WsS & "!A2:H$" & L2 & ",2,FALSE)"
    .[E2].Resize(L1).Formula = "=VLOOKUP(A2," & WsS & "!A2:H$" & L2 & ",7,FALSE)"
    .[G2].Resize(L1).Formula = "=VLOOKUP(A2," & WsS & "!A2:H$" & L2 & ",8,FALSE)"
  End With
  Exit Sub
  GESTERR:
  MsgBox "Problème avec une des 2 Feuilles !", , "Oups..."
End Sub

Il n’y a erreur que sur le mot .Name, pas sur la programmation.

Bonjour,

J'ai tenté :

Y2 = ActiveWorkbook.Feuil2.Name = "src"

C'est logique que ça ne fonctionne pas car Feuil2 (tout comme les UserForm's) est un objet rattaché au projet VBA et non à l'objet classeur.

Il n'y a pas de nécessité d'activer la référence à la complémentaire dans le classeur
Et si
. Il faut que la référence à la macro XLAM soit cochée dans (Outils --> Références) pour pouvoir faire référence aux objets du projet VBA relatif à la macro XLAM.

Bonjour,

ce qui me turlupine c'est, si j'ai bonne mémoire, qu'avec un xlam on n'est pas sensés avoir accès aux feuilles.
Pour travailler avec, tu pourrais passer temporairement la propriété IsAddin du classeur à False et voir si ça résous tes problèmes.
eric

bonjour à tous,

J'ai lu et testé toutes vos suggestions et le bingo reviens à la eriic qui m'a mis la puce à l'oreille : même sous 2016, il ne semble pas possible d'avoir accès à d'autres feuilles que la feuille active sans passer par IsAddin, AddInstall...

Ce qui ôterait tout intérêt à la macro en question dont le but est précisément d'être applicable à un classeur "banal".

Je vais donc être obligé de passer par un classeur modèle et d'exporter les feuilles in fine.

Merci à tous

Bonjour,

Je suis étonné. Es-tu bien certain d'avoir essayé ma suggestion ?

Car j'ai une macro XLAM dont la référence est bien présente dans l'éditeur de projets pour le classeur(Contrôle_calendrier.xlsm) où elle est utilisée (dossier références). Une fois rentré dans la macro via l'exécution d'une procédure de module, j'ai accès à tous ses objets : Feuilles, Userforms .

ci-jointe photo

capture

@Galopin

Il faut aller dans Complément Excel > Parcourir et sélectionner le complément avant de pouvoir le cocher.

Oui cela je savais mais ce n'est pas de cela dont je parlais mais bien de l'onglet Compléments que l'on trouve à droite de l'onglet développeur et que l'on peut activer via les options d'excel. Cette question car je pensais ajouter un bouton dans cet onglet pour exécuter le code. J'ai déjà fait cela par le passé... ici je pense qu'il faut aller dans les options d'excel --> personnaliser le ruban et créer un groupe spécifique. Ensuite placer le code dans ce groupe.

=> C'est quoi l'extension des complémentaires sous 365 ? c'est bien toujours .xlam ?

=> Tu me corriges si je me trompe : Il n'y a pas de nécessité d'activer la référence à la complémentaire dans le classeur (puisque tout se passe par le ruban)

Oui pour les deux

J'ai bien compris mais dans le contexte, ça ne m'intéresse pas car l'utilisateur final est un béotien (tendance jurassique inférieur ) et Le but est d'utiliser des classeurs lambda brut. (car il sont issus d'un ERP)

Si je dois utiliser un classeur ou la macro est référencé il me semble préférable de revenir à la solution que je vais adopter : Un classeur modèle ( avec cette macro) classeur qui recevra les feuilles de l'ERP et on exporte les résultats ensuite ou on veut. C'est ce qui me semble le plus simple dans ce contexte...

Merci encore.

A+

@Galopin

C'est aussi une solution parce que la macro XLAM est disponible à l'ouverture d'excel. Pour l'avoir fait précédemment, tu as deux solutions, soit tu fais une XLAM et tu mets une condition dans ton code pour qu'elle ne s'exécute que sur le classeur en question (ce que j'avais fait mais pas toujours simple...) soit tu fais ce que tu écris à savoir un classeur modèle avec le code en question

Cordialement

@Galopin

Au jurassique inférieur, le cerveau existait même s'il n'était pas parfaitement développé.

Plutôt que de mettre ta macro dans les compléments Excel, tu peux la stocker dans n'importe quel répertoire. Il suffit de lui adjoindre ce code à son ouverture :

Private Sub Workbook_Open()
    Dim ref As Reference

    On Error Resume Next
    With ActiveWorkbook.VBProject
        If Err.Number <> 0 Then Exit Sub
        Set ref = .References(ThisWorkbook.VBProject.Name): If Err.Number = 0 Then Exit Sub

        '// création d'un module pour conservation de la référence
        .VBComponents.Add (vbext_ct_StdModule)

        '// création de la référence à la macro 
        .References.AddFromFile ThisWorkbook.VBProject.Filename
    End With

End Sub

Après, la procédure est simple :

1- ouverture du classeur 1 auquel on veut accoler la macro

2- dans le classeur 1, ouvrir la macro et sauvegarder.

C'est tout. La macro restera accrochée au classeur avec la référence activée.

Bonsoir,

Ok. Bon on va clore la discussion la dessus : Mon problème de départ c'était 365 que je ne peux tester le reste des problèmes ça ira...

Le problème c'est que je récupère un projet en forme de patchwork ou tout le monde à mis son nez.

Cette macro n'étant que la face émergé du truc, j'ai fini par comprendre que les 2, 3 petites macros de ce projet que j'ai découvertes progressivement à force de tirage devers de nez se géraient parfaitement de manière traditionnelle.

Donc l'idée de base étant inadaptée, pour la synthèse, je vais faire comme d'hab. : Au plus simple et à ma sauce ! et 365 n'a qu'à bien se tenir.

Merci à tous.

A+

Rechercher des sujets similaires à "probleme xlam 365 x32 bits"