XL 2019 Récupérer une macro sur un autre fichier Excel

gthe

XLDnaute Junior
Bonjour,
Ca doit être l'affaire de 2-3 minutes pour vous car j'ai l'impression que c'est du B-A BA que je ne maîtrise pas (je ne sais pas coder en VBA).

J'ai récupéré une macro qu'on m'a réalisé sur une manipulation précise.

Je souhaite l'insérer dans mon fichier Excel qui contient tout ce que je cherche (il fait 4 Mo, on va plutôt regarder avec des images pour le moment).

Cette macro code un command_button et dès que je clique dessus, en lieu et place d'exécuter la commande, ça m'affiche directement le VBA comme ceci :

1619474075106.png


J'ai l'impression que l'ordinateur essaie de me dire que quelque chose ne va pas (alors que la macro marche nickel sur le fichier séparé), comme si j'avais mal intégré la macro.

Petite précision : sur l'autre fichier, elle s'ouvre directement avec Visual Basic et il n'y a pas de "module" spécifique dans le classeur originel qui contient cette seule macro :

1619474299190.png


Question : comment faire comprendre au fichier principal, duquel j'ai importé l'onglet par un copier-coller d'onglet (qui a copié également le CommandButton) que je souhaite utiliser cette macro ?

Merci beaucoup !
 

Pièces jointes

  • 1619474010829.png
    1619474010829.png
    105.4 KB · Affichages: 36
Solution
Bonjour gthe,

tu t'es embêté pour rien : pour les 2 classeurs, la sub CommandButton1_Click() (qui est la même) doit travailler uniquement sur la feuille active (y compris pour la recherche de la dernière ligne utilisée) ➯ c'est tout simplement inutile de spécifier le nom de la feuille. :)

remarque : quand tu cliques sur le bouton de commande "MaJ", devine quelle est la feuille active à ce moment-là ? 😁 si tu arrives à cliquer sur un bouton qui est sur une autre feuille que la feuille active, préviens-moi ! ça fera un scoop ! 😄 😂 🤣

VB:
Option Explicit

Private Sub CommandButton1_Click()
  Dim dlg& 'dernière ligne
  dlg = Cells(Rows.Count...

soan

XLDnaute Barbatruc
Inactif
Bonjour gthe,

la sub CommandButton1_Click() arrête de s'exécuter à cause d'une erreur d'exécution ; et cette erreur d'exécution se produit probablement car la feuille "performances BM" n'existe pas dans ton classeur. (celui où tu as recopié cette sub)

si tu ajoutes une feuille "performances BM", il faut qu'elle aie la même structure que celle d'origine.​



edit : la feuille "performances BM" existe bien dans ton classeur "PARIS SPORTIFS - COMPLET - Copie.xlsm" ; à moins que ce soit un espace normal dans le nom de la feuille de calcul et un espace insécable dans le nom codé en VBA. (ou l'inverse)

soan
 
Dernière édition:

soan

XLDnaute Barbatruc
Inactif
Bonjour Dranreb,

tu as raison, pour le point d'arrêt ; je l'ai bêtement zappé ! cependant, je ne comprends pas bien pourquoi il est là dans le sens où j'ai du mal à croire que c'est gthe qui l'a mis lui-même ; car s'il l'a fait lui, il ne devrait pas s'étonner que la sub s'arrête ! mais peut-être qu'il a mis ce point d'arrêt par mégarde, sans même s'en rendre compte ? ou peut-être qu'il l'a fait à un moment donné ... puis il a ensuite oublié qu'il avait mis un point d'arrêt. 😁

@gthe : si c'est ça, j'ai une bonne solution pour toi, pour que tu n'oublies plus : fais un nœud à ton mouchoir chaque fois que tu poses un point d'arrêt. 😜 (et défais le nœud quand tu enlèves le point d'arrêt)

soan
 
Dernière édition:

gthe

XLDnaute Junior
Le fil, @soan , @Dranreb



Bonsoir,

Merci pour vos réponses :)

Je n'ai plus mon ordinateur sur moi donc je ne pourrai réaliser la manip demain mais quelques points :

- sur le classeur d'origine la feuille s'appelait feuill1 mais après l'avoir copié sur mon classeur Excel habituel, j'ai du renommer cette feuille pour améliorer l'ergonomie du classeur et j'ai ensuite vu je que ça ne correspondait pas à Feuill1 qui était indiqué dans la macro. J'ai renommé Feuill1 en "performances BM" tout comme le nom de la feuille renommée.

- non je n'ai pas mis de point d'arrêt. Au début ça me mettait une erreur d'exécution puis proposition de déboggage j'ai quit et renommé la ligne de code (la même qu'en jaune) car il m'affichait cette ligne en jaune.
Mais depuis la manip le simple fait de cliquer sur le button affiché le menu tel qu'en image que je vous ai montrée et elle s'affiche en jaune (ce n'est pas moi même qui ai créé ce point d'arrêt ou alors serait-ce accidentel quand kai modifié le nom de la feuille dans le programme ? Je ne sais pas :)
 

soan

XLDnaute Barbatruc
Inactif
@gthe

il faudrait vérifier le nom de la feuille :

* est-ce bien "feuill1" (avec 2 L minuscules) ? ne serait-ce pas plutôt "Feuil1" ? (avec un seul L minuscule)

* et maint'nant la feuille s'appelle "performances BM" ? si oui, elle existe pourtant bien dans ton classeur ; mais difficile de trouver au juste quelle est l'erreur d'exécution sans ton fichier ! 😭

soan
 

gthe

XLDnaute Junior
Salut @soan

Il faudrait que je t'arrive à t'envoyer une copie de ma version que je réduirai au maximum.
Ainsi il restera le fichier avec l'erreur et je pourrai te montrer le problème :)
Je te fais ça, en espérant que ma pause soit suffisante ;)
Merci :)
 

gthe

XLDnaute Junior
@soan
J'ai réduit au maximum les onglets : l'idée serait de mettre la macro du command_button du fichier d'origine dans la version réduite du fichier de Paris.
Il se peut que tu trouves des macros enregistrées dans la version réduite mais elles sont si obsolètes car concernent d'autres onglets que j'ai supprimé pour réduire la taille du fichier.

Du coup, je devrai de mon côté réussir à reproduire exactement la même manipulation mais avec mon fichier complet.
Pourrais-tu m'expliquer la manipulation exacte que tu as opéré ?

En te remerciant :D
G.
 

Pièces jointes

  • Version réduite du fichier.xlsm
    105 KB · Affichages: 5
  • fichier avec macro d'origine.xlsm
    110.2 KB · Affichages: 6

soan

XLDnaute Barbatruc
Inactif
Bonjour gthe,

tu t'es embêté pour rien : pour les 2 classeurs, la sub CommandButton1_Click() (qui est la même) doit travailler uniquement sur la feuille active (y compris pour la recherche de la dernière ligne utilisée) ➯ c'est tout simplement inutile de spécifier le nom de la feuille. :)

remarque : quand tu cliques sur le bouton de commande "MaJ", devine quelle est la feuille active à ce moment-là ? 😁 si tu arrives à cliquer sur un bouton qui est sur une autre feuille que la feuille active, préviens-moi ! ça fera un scoop ! 😄 😂 🤣

VB:
Option Explicit

Private Sub CommandButton1_Click()
  Dim dlg& 'dernière ligne
  dlg = Cells(Rows.Count, 3).End(xlUp).Row: If dlg = 1 Then Exit Sub
  Dim T, i&, j As Byte: Application.ScreenUpdating = 0
  T = Array("Domicile", "Nul", "Exterieur")
  For i = 2 To dlg
    For j = 0 To 2
      If Cells(i, 3 + j).Font.Bold Then Cells(i, 6) = T(j): Exit For
    Next j
  Next i
  ActiveCell.Select
End Sub

soan
 

Pièces jointes

  • Version réduite du fichier.xlsm
    114.3 KB · Affichages: 3
  • fichier avec macro d'origine.xlsm
    97.8 KB · Affichages: 3

gthe

XLDnaute Junior
Bonjour gthe,

tu t'es embêté pour rien : pour les 2 classeurs, la sub CommandButton1_Click() (qui est la même) doit travailler uniquement sur la feuille active (y compris pour la recherche de la dernière ligne utilisée) ➯ c'est tout simplement inutile de spécifier le nom de la feuille. :)

remarque : quand tu cliques sur le bouton de commande "MaJ", devine quelle est la feuille active à ce moment-là ? 😁 si tu arrives à cliquer sur un bouton qui est sur une autre feuille que la feuille active, préviens-moi ! ça fera un scoop ! 😄 😂 🤣

VB:
Option Explicit

Private Sub CommandButton1_Click()
  Dim dlg& 'dernière ligne
  dlg = Cells(Rows.Count, 3).End(xlUp).Row: If dlg = 1 Then Exit Sub
  Dim T, i&, j As Byte: Application.ScreenUpdating = 0
  T = Array("Domicile", "Nul", "Exterieur")
  For i = 2 To dlg
    For j = 0 To 2
      If Cells(i, 3 + j).Font.Bold Then Cells(i, 6) = T(j): Exit For
    Next j
  Next i
  ActiveCell.Select
End Sub

soan
Merci @soan

Mais concrètement, que dois-je faire sur mon fichier complet ?
Recopier cette macro-là ?
 

soan

XLDnaute Barbatruc
Inactif
@gthe

oui, c'est tout ; car c'est la sub du bouton de commande "MaJ" ; et ce bouton lance la macro CommandButton1_Click() ; mais attention : le code de cette sub doit être placé dans le module de la feuille concernée ; donc dans le module de la feuille qui contient le bouton de commande.​

soan
 

Discussions similaires

Réponses
2
Affichages
236

Statistiques des forums

Discussions
311 725
Messages
2 081 949
Membres
101 851
dernier inscrit
vaiata