Simplifier code VBA

Bonjour, et merci à tous pour votre aide.

J'aimerai simplifier le code ci-dessous qui me permet de copier / coller les cellules spécifiques d'un tableau en provenance de plusieurs feuilles pour ensuite les regroupées dans une feuille (toujours dans le même classeur) avec comme condition de ne prendre en considération que les cellules visibles, explication ; les feuilles à partir des quelles je dois copier les cellules spécifiques sont en fait un fichier de suivi qui est mis à jour régulièrement (tous les mois) au niveau manipulation je reprend la même tram du tableau avec les remontées du mois N-1, que j'alimente avec les données du mois N, ensuite je masque le tableau du mois N-1 et ainsi de suite..

Étant débutant en vba je sollicite votre bienveillance pour m'aider à optimiser mon code car lorsque je compile l’intégralité de mon code j'ai le message d'erreur suivant : "Procédure trop grande" , je précise que la syntaxe du code est correcte ci dessous un bout de code qui va se répéter 25 fois :

'DR01 (il yen a 25 ^^')
x = 0
Sheets("Dette Refresco").Select
Range("A3").Select

If ActiveSheet.Rows(ActiveCell.Row).EntireRow.Hidden = False Then

    Range("A3").Activate
    ActiveCell.Offset(rowoffset:=x, columnoffset:=0).Activate
    Selection.Copy
    Sheets("Remontées DR").Select
    Range("C6").Select
    ActiveSheet.Paste
    Sheets("Dette Refresco").Select
    Range("C3").Select
    Range("C3").Activate
    ActiveCell.Offset(rowoffset:=x, columnoffset:=0).Activate
    Selection.Copy
    Sheets("Remontées DR").Select
    Range("E6").Select
    ActiveSheet.Paste

ElseIf ActiveSheet.Rows(ActiveCell.Row).EntireRow.Hidden = True Then

    While ActiveSheet.Rows(ActiveCell.Row).EntireRow.Hidden = True
    x = x + 1
    Range("A3").Select
    ActiveCell.Offset(rowoffset:=x, columnoffset:=0).Activate
    ActiveSheet.Rows(ActiveCell.Row).Select
    Wend

    Sheets("Dette Refresco").Select
    Range("A3").Select
    Range("A3").Activate
    ActiveCell.Offset(rowoffset:=x, columnoffset:=0).Activate
    Selection.Copy
    Sheets("Remontées DR").Select
    Range("C6").Select
    ActiveSheet.Paste
    Sheets("Dette Refresco").Select
    Range("C3").Select
    Range("C3").Activate
    ActiveCell.Offset(rowoffset:=x, columnoffset:=0).Activate
    Selection.Copy
    Sheets("Remontées DR").Select
    Range("E6").Select
    ActiveSheet.Paste

    End If

Merci beaucoup

Bonjour et bienvenue,

Si tu veux une aide adaptée du forum, joins un fichier à ta demande et reformule précisément ton objectif.

Cdlt.

Jean-Eric bonjour,

Tout d'abord je tiens à te remercier pour ta réactivité. Mon objectif

Je tiens un fichier à jour mensuellement dans le quel je saisi les remontées de mes fournisseurs (un fournisseurs par feuille) pour 25 directions régionales, je souhaiterais regroupées dans une autre feuille les remontées fournisseurs pour chaque direction régionale ( 1 tableau par direction régionale).

Les remontées des fournisseurs dont je souhaite automatiser le copier/coller changent chaque mois, ceci dit pour avoir un suivi je ne remplace pas les cellules des remontées du mois N-1 mais je reprends exactement la même tram du tableau avec les nouvelles remontées donc du mois N, ensuite je masque le tableau N-1.

Ci-joint le fichier Excel ,dans ce dernier il n'y a que le code qui concerne les remontée fournisseurs dans la feuille "Dette Roxane Paki" j'ai rendu visible les tableaux sur lesquels je test ma macro (même logique pour les autre fournisseurs)

7macro-test.xlsm (76.49 Ko)

Bonjour,

Chouette merdier !

Disons le tout de suite : je sais pas faire :

Il y a 2 gros inconvénients tes feuilles de fournisseurs ne sont pas normalisées mais ça encore on pourrait se débrouiller...

mais surtout ta feuille remontée DR est "nulle à chier ! "

Dans ces conditions je ne crois pas que tu puisses faire quelque chose de buvable.

Si tu as une marge de manoeuvre pour la conception de cette récap, je te conseille de présenter cette feuille comme ma feuille "Cible" moyennant quoi si tes feuilles "Dette fournisseurs" étaient normalisées, en une dizaine de ligne ta macro est bouclée.

C'est le cas pour Roxane et Refresco donc ma macro importe les données de Roxane et Refresco mais pas les autres...

Bonjour,

Chouette merdier !

Disons le tout de suite : je sais pas faire :

Il y a 2 gros inconvénients tes feuilles de fournisseurs ne sont pas normalisées mais ça encore on pourrait se débrouiller...

mais surtout ta feuille remontée DR est "nulle à chier ! "

Dans ces conditions je ne crois pas que tu puisses faire quelque chose de buvable.

Si tu as une marge de manoeuvre pour la conception de cette récap, je te conseille de présenter cette feuille comme ma feuille "Cible" moyennant quoi si tes feuilles "Dette fournisseurs" étaient normalisées, en une dizaine de ligne ta macro est bouclée.

C'est le cas pour Roxane et Refresco donc ma macro importe les données de Roxane et Refresco mais pas les autres...

Pardon c'est parti trop vite la suite dans un instant...

Déjà je te met le fichier...

4maa-vg.xlsm (82.15 Ko)

Il n' y aurait pas grand chose à modifier pour traiter toutes les feuilles : Il faudrait déjà quelles existent avec pour nom "Dette machin, dette truc...." ou machin et truc sont les noms tel que je les orthographiés dans la feuille "Param"

Dans ce cas il y aurait juste à modifier la ligne

For k = 1 To 2  'remplacer par
For k = 1 To [Four].Count

Dans ce cas ça traiterai tout.

Le problème c'est les feuilles à géométrie variable : si tu n'as pas la possibilité d'imposer une liste complète des DR dans chaque feuille il va falloir adapter la macro pour tenir compte des DR manquantes.

Tu me diras quelle marge de manoeuvre tu as... et j'ajusterai en conséquence.

Mais si tu n'as pas la possibilité de changer ta feuille "Remontées DR" pour l'organiser comme ma feuille cible, dans ce cas je laisserai tomber.

Bon j'ai pas pu tout tester parce que avec une page de test, test, test, test, test, test, test, test c'est pas top... mébon je crois pas m'être gourré !

Après je n'ai peut-être pas bien traité le problème des lignes Hidden parce que tes modèles n'en possédaient pas. Donc je ne sais pas ce que contiennent ces lignes masqués. Est-ce que ce sont des DR absentes ou d'autres lignes inutiles ???

Dont un modèle plus pertinent et complets serait nécessaire...

De même des feuilles avec des lignes inutiles parasitent le système. (cf Roxane)

[EDIT] je viens de voir que les lignes masquées étaient en fait décalées à la fin<... Ce qui parasite le système également.

Lignes absentes et lignes masquées, on revient à ma constatation première : Quel b... !

Je pense reprendre le truc en me basant sur une recherche des lignes visibles ET présentes. Par contre la question de la feuille cible est un préalable indispensable : Si tu ne peux même pas remanier ta feuille cible, pas la peine que je me fatigue !

On ne peut programmer que des processus relativement répétitif or ta feuille "Remontées RP" est vraiment catastrrophique !

Que se passe-il si un jour ou l'autre un DR adopte un nouveau fournisseur ? (Tu es obligé de tout reprogrammer...)

Sur ma feuille cible ça ne changerait rien.

A+

J'ai encore travaillé un peu sur ton bouzin... C'est pas un reproche hein !

J'ai finaliser le truc pour toutes les feuilles (mais il faudra rajouter les feuilles manquantes) qui devront impérativement s'appeler :

"Dette blabla" ou blabla est le nom du fournisseur tel qu'il est orthographié dans la feuille param.

Les données sont remontées dans la feuille cible.

Ensuite ce sont des formules qui renvoient les données dans ta feuille "Remontés DR"

Mais je n'ai mis les formules que pour les 7 premières DR.

Il faut bien que je te laisse quelque chose à faire hein ! C'est quand même moi le retraité...

Normalement j'ai supprimé les erreurs mébon... Comme je ne suis pas exempt de laisser des c... s'il en reste me le signaler !

Nota : J'ai partiellement rempli la feuille "Remontés DR" avec les bonnes adresses pour toutes les DR et tous les fournisseurs.

mais j'ai alors ajouté un complément de formule pour les 7 premières DR afin de ne pas remonter les résultat de lignes vides.

Bon c'est pas complique de copier la formule de B4 :

=SI(Cible!B3="";"";Cible!B3) et de la coller dans la barre de formule de I4, J4, J6... et de remplacer B3 par B9,C9,F9... (en se basant sur le contenu de la cellule que tu vas modifier)

OK ?

A+

4mata-vg.xlsm (68.51 Ko)
Rechercher des sujets similaires à "simplifier code vba"