Macro feuille 1 à executer en feuille 2

Bonjour à tous,

je débute tous juste dans VBA, je dois dire que cela est vraiment très intéressant, mais ce n'est pas simple.

Je suis bloqué sur un problème et j'aurais besoin de vos lumières.

En fait j' ai 2 feuilles dans mon classeur : la 1ere "bon_de_commande", et la deuxieme "recap_commande" qui doit reprendre certaines données de ma première feuille.

J'ai réussi à créer une macro pour faire cela. Le problème et que je suis obligé de mettre dans ma feuille "recap_commande" pour que celle ci fonctionne.

En fait j'aimerai avoir un bouton dans ma feuille "bon_de_commande" qui ferait cela sans que je doive aller sur ma feuille "recap_commande".

Ci dessous le code :

Private Sub CommandButton1_Click()

Dim tablo As Variant, derlig As Long

'array representant le nom des cellule de la fiche de saisie dans l'ordre dans le quel elles seront transposées

plage = Array("G18", "G4", "e10", "B22", "g22", "d52", "c52", "b52", "a52", "f52")

ReDim tablo(1, UBound(plage)) ' redimentionnement d'une varaible de type tableau avec le nombre d'element dans l'array

For i = 0 To UBound(plage)

'inscription des données des cellules dans chaque items da la variable tableau

tablo(0, i) = Sheets("Bon_de_commande").Range(plage(i))

Next

'recupération de la premiere ligne vide et libre de la feuille de destination

derlig = Sheets("recap_commande").Range("A" & Rows.Count).End(xlUp).Row

'resize de la cellule A et derlig a la dimention du tableau et pose de du tablo

Range("A" & derlig).Resize(1, UBound(plage)) = tablo

End Sub

Merci de votre aide

bonjour,

Dans ce forum il est bienvenu de joindre le fichier KIVABIEN avec la macro. Même si tu peux alléger considérablement le fichier.

Ça évite au bénévole d'avoir à reconstituer péniblement un classeur factice...

De plus quand tu cites du code il est pratique de le sélectionner et l'appuyer sur la balise code. Sinon tu risques pas de motiver grand monde...

A+

[EDIT]

En général la bonne place pour les macros c'est un module standard ("Module1") (sauf pour les évènementielles...)

Tu n'aurais sans doute pas eu ce problème si tu avais mis ta macro dans un module standard en la modifiant de la manière suivante :

(Dernière ligne...)

Sheets("recap_commande").Range("A" & derlig).Resize(1, UBound(plage)) = tablo

A+

Bonjour,

C'est un peu confus au niveau des explications !

Ton code serait indenté, ce pourrait être pas mal !!

(Et utiliser les balises Code pour citer du code, c'est un peu mieux lisible !)

Sérions les problèmes :

D'abord une macro est une procédure qui fait ce que tu lui dis de faire à condition de le lui dire de la façon compréhensible par VBA.

plage : variable non déclarée, il n'y a aucune raison de ne pas le faire.

Inutile de déclarer un type Variant, Variant est le type lorsqu'on ne type pas individuellement une variable.

On peut mettre un tableau dans une variable de type Variant, comme tu le fais avec plage en utilisant la fonction Array.

Par contre pour redimensionner un tableau il faut l'avoir déclaré comme tableau dynamique, soit : Dim tablo(), ...

Pour la définition de plage, tu gagnerais du temps d'écriture en utilisant Split :

plage = Split("G18 G4 E10 B22 G22 D52 C52 B52 A52 F52")

Ton code indique que tu utilises un bouton ActiveX et que ta procédure se trouve dans le module de la feuille qui contient ce bouton, mais n'indique pas quelle est cette feuille.

Etant dans un module dédié à un objet (Worksheet), tu peux partout dans le code de ce module utiliser le mot-clé Me pour référer à l'objet, soit la feuille en question.

Avec derlig, tu récupères le numéro de la dernière ligne utilisée, pour avoir la suivante, il faut faire : +1

De même :

With Worksheets("recap_commande")
    derlig = .Range("A" & Rows.Count).End(xlUp).Row + 1
    .Range("A" & derlig).Resize(1, UBound(plage) + 1).Value = tablo
End With

Ton tableau, de même que plage, commence à l'indice 0.

L'affectation directe d'un tableau de valeurs à une plage exige de préciser .Value !

(Et ça ne coûte rien de qualifier toutes ses expressions, et c'est plus sûr !)

Si j'ai rien loupé, cela devrait fonctionner !

Une partie de mes remarques portent sur des points qui ne l'empêcheront pas de fonctionner, mais on peut toujours chercher à améliorer...

Bien que tu me forces à lire du code non indenté , je dois dire que j'y ai pris plaisir dans la mesure où il dénote un véritable effort de coder efficacement en VBA. C'est l'essentiel et ça facilite la compréhension des erreurs qu'il devient facile de surmonter...

Cordialement.


Salut Galopin !

Merci pour vos réponses et désolé de ne pas avoir suivi correctement la procédure, je ferai plus attention la prochaine fois...

je fait tester et vous tiens au jus.

Merci encore et bonne journée

j'ai modifie mon projet en mettant mes macros dans un module et en tenant en comptes toutes vos remarques et cela fonctionne parfaitement.

Je vous remercie encore et surement à bientôt sur le forum...

bonne journée

Rechercher des sujets similaires à "macro feuille executer"