XL 2016 VBA - Exporter / Importer un Projet VBA complet

Dudu2

XLDnaute Barbatruc
Bonjour,

Sur un Desktop Excel 2016 64 bits j'ai un fichier de macros qui n'a jamais posé de problème.
Sur un Laptop Excel 2021 64 bits juste installé, ce fichier de macros refuse de s'ouvrir. La réparation vire tout le code VBA.
1717141491225.png

Cet insupportable message ne donne aucune indication sur "le problème" trouvé, c'est bien du Microsoft !
Un peu comme si un garagiste disait "il y a une panne sur cette voiture".

J'ai tout essayé, la sécurité et le reste. Pas moyen.

Comme il y a beaucoup de Modules et de UserForms dans ce fichier, j'aimerais exporter tout le projet à partir du DeskTop et le ré-importer sur le Laptop.
Existe-t-il un outil pour faire ça ?
 

Gégé-45550

XLDnaute Accro

Lolote83

XLDnaute Barbatruc
Bonjour à tous.
@patricktoulon , tu es beaucoup plus rapide que moi.
Merci d'avoir choisi la "gueule" de mon interface.
Par contre, j'ai revue aussi ma copie mais toujours pas finalisée. Par contre, j'ai remarqué qu'il manquait éventuellement les codes des feuilles "ThisWorkbook, Feuil1, Feuil2 ....."

1717244085959.png


La chose que je n'arrive pas à faire actuellement, c'est qu'il me liste dans la liste des feuilles (Ici Feuil1, Feuil3 et ThisWorkbook) mais seulement Feuil3 contient du code. Je ne sais pas du coup comment tester si il y a ou non du code dans ThisWorkbook et/ou Feuil1 (J'ai pris pour exemple ton fichier CreateRibbon)
Je continue tout de même
@+ Lolote83
 

Pièces jointes

  • 1717243097505.png
    1717243097505.png
    57.8 KB · Affichages: 1
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
bonjour @Lolote83
c'est dans le vba indenter que tu trouvera comment je fait pour savoir si il y a du code dans les modules quel qu'il soit (module / classe / userform / feuille / thisworkbook / etc)
alors attention aussi car le thisworkbook est un module classe aussi il risque de se retrouver dans la listbox lst_cls et les feuille aussi me semble t il
 

Lolote83

XLDnaute Barbatruc
Re bonjour @patricktoulon ,

J'avais effectivement remarqué que ce soit pour le ThisWorkbook ou les feuilles, on aura du .cls

alors attention aussi car le thisworkbook est un module classe aussi il risque de se retrouver dans la listbox lst_cls et les feuille aussi me semble t il
Je n'ai pas regardé ton code pour l'instant mais du coup, je fais de mon coté la différence ici

VB:
    '----------------- Récupération des données dans les listes
    Dim LaForm
    
    For Each LaForm In xWBSour.VBProject.VBComponents
    'For Each LaForm In ThisWorkbook.VBProject.VBComponents
        xNom = LaForm.Name
        xTyp = LaForm.Type
        Select Case xTyp
            Case Is = 1
                Usf_ImportExport.Lst_Mod.AddItem xNom       'Les Modules
            Case Is = 2
                Usf_ImportExport.Lst_Cls.AddItem xNom       'Les Classes
            Case Is = 3
                Usf_ImportExport.Lst_Usf.AddItem xNom       'Les Formulaires
            Case Is = 100
                Usf_ImportExport.Lst_Feu.AddItem xNom       'Les Feuilles
        End Select
    Next

Pour le ThisWorkbook et feuilles, c'est le numéro 100
@+ Lolote83
 

patricktoulon

XLDnaute Barbatruc
@Lolote83 pour toi ça devrait être ça
Après il faut dire que la variable LaForm n'est pas tellement appropriée au contexte
le lecteur de ton code pourrait se perdre en confusion


Normalement ta listbox pour les feuille et thisworkbook ne devrait prendre que ceux qui ont du code

VB:
'----------------- Récupération des données dans les listes
    Dim LaForm
    Dim X&
    For Each LaForm In xWBSour.VBProject.VBComponents
    'For Each LaForm In ThisWorkbook.VBProject.VBComponents
        xNom = LaForm.Name
        xTyp = LaForm.Type
        X = LaForm.CodeModule.CountOfLines
        Select Case xTyp
            Case Is = 1
                Usf_ImportExport.Lst_Mod.AddItem xNom       'Les Modules
            Case Is = 2
                Usf_ImportExport.Lst_Cls.AddItem xNom       'Les Classes
            Case Is = 3
                Usf_ImportExport.Lst_Usf.AddItem xNom       'Les Formulaires
            Case Is = 100
                If X > 0 Then Usf_ImportExport.Lst_Feu.AddItem xNom     'Les Feuilles
        End Select
    Next
 

Dudu2

XLDnaute Barbatruc
@patricktoulon,
L'Export parfait.
L'import j'ai les soucis suivants:
  1. Si je copie directement le répertoire dans la zone, il ne le prend pas. Il faut que je fasse parcourir.
    Et si je parcours, il n'y a pas non plus de fenêtre pour y copier une adresse de répertoire.
    Donc il faut absolument parcourir.

  2. Les CheckBoxes Tout sélectionner sont pré-chéckées alors que rien n'est sélectionné dans les listes.

  3. Plus embêtant, je n'arrive pas à sélectionner la sortie.
    import.gif
 

patricktoulon

XLDnaute Barbatruc
re je crois deviner ton problème de fenêtre parcourir
en effet quand on sélectionne un dossier il ouvre le dossier dans ce petit explorer
mais il faut faire ok tout simplement
petit défaut de ce dialog vieux comme le monde
par contre que la listbox aille se loger plus haut que le bouton là je pige pas
enlève le move de l'usf provisoirement
vous avez vraiment des version bizarre y a rien qui reste à sa place chez vous
comme je ne la place pas par macro replace la en mode vbe
c'est vraiment un truc de fou
t'a du le toucher c'est pas possible une différence pareil
je fait juste un visible/non visible dessus
en mode vbe
1717275580369.png


en fonctionnement
demo2.gif
 

patricktoulon

XLDnaute Barbatruc
re
remplace la fonction dialog folder par celle ci tu préfèrera peutêtre
VB:
Function ChooseFolderDoalog()
 With Application.FileDialog(msoFileDialogFolderPicker)
        If .Show = -1 Then ChooseFolderDoalog= .SelectedItems(1)
  End With
End Function
 

Dudu2

XLDnaute Barbatruc
Bonjour à toutetatousse,

t'a du le toucher c'est pas possible une différence pareil
Ah non, je ne me permettrais pas !

remplace la fonction dialog folder par celle ci tu préfèrera peutêtre
Oui je préfère car on peut entrer un raccourci directement sans avoir à se promener dans les répertoires.

Pour la ListBox, j'ai ajouté son positionnement .Top, mais il faut le faire à l'endroit où je l'ai mis sinon si on le met au début, au 1er clic sur le bouton elle décale toujours et ce n'est qu'au 2ème clic qu'elle se positionne comme voulu.
VB:
Private Sub cmd_Import_Click()
    Dim Wb As Workbook
    listboxwb.Visible = Not listboxwb.Visible
    listboxwb.Clear
    listboxwb.ZOrder 0
    listboxwb.AddItem "Nouveau"
    listboxwb.Top = cmd_Import.Top - listboxwb.Height
    For Each Wb In Workbooks
        If Not Wb Is ThisWorkbook Then listboxwb.AddItem Wb.Name
    Next
End Sub
 
Dernière édition:

patricktoulon

XLDnaute Barbatruc
re
Pour info à l'affichage elle fait 172 de Height alors qu'elle est définie à 181,75 dans le UserForm.
c'est bien ce que je te dis depuis 3 ans maintenant
j'avais EXACTEMENT les mêmes problèmes avant d'avoir LES BONS DRIVERS
1717310002618.png


VB:
Private Sub cmd_Import_Click()
    Dim Wb As Workbook
    listboxwb.Visible = Not listboxwb.Visible
    listboxwb.Clear
    listboxwb.ZOrder 0
    listboxwb.AddItem "Nouveau"
    For Each Wb In Workbooks
        If Not Wb Is ThisWorkbook Then listboxwb.AddItem Wb.Name
    Next
MsgBox listboxwb.Height
End Sub
demo2.gif


avec les bon drivers
1° le coeff pt to pixel reste à 0.75 quelque soit le zoom Windows(calculs plus precis )
2° les controls ne sont plus redimensionnés et replacés( comme dans l'exemple d'aujourd'hui)
3° le freez sur le texte il y est plus
4° ce besoin que vous avez parfois de faire un repaint sur le userform terminé aussi
et j'en passe et des meilleurs
des 10 aines de petits soucis que j'avais comme toi ne sont plus aujourd'hui
chez moi 181.75 ça reste 181.75
 

Statistiques des forums

Discussions
313 027
Messages
2 094 519
Membres
106 040
dernier inscrit
lutin74330