XL 2016 créer une boucle avec +ieurs macros existantes

ABDELHAK

XLDnaute Occasionnel
Bonjour,

Je sollicite encore 1x votre aide.

J’ai 1 fichier avec +ieurs macros que je souhaîte rassembler en 1 seule macro.

La 1ière macro(1) « transfert » cherche les 10 ref en ligne 1 de la Feuil(ESPACE_WORK) dans la Feuil1 et copie la ligne entière correspondant à la ref de la Feuil1 à la Feuil(ESPACE_WORK).

La 2ième macro(2) « ADDITION_COLONNE » additionne colonne par colonne et affiche le résultat à la ligne 18 de la Feuil(ESPACE_WORK).

La 3ième macro(3) « Somme_10 » cherche dans Feuil(ESPACE_WORK) à la ligne 18 les colonnes = 10 et copie les résultats à la ligne 22.

Toutes ces macros fonctionnent parfaitement.

J’ai dans ce fichier dans la Feuil « REFERENCES » plus de 1000 lignes dont chacune possède 10 ref + 1 n° d’ordre.

J’aimerais que la nouvelle macro fasse une boucle.

  1. Elle doit copier la 1ière ligne de la Feuil « REFERENCES » vers la ligne 1 de la Feuil(ESPACE_WORK).

  2. Elle doit exécuter la macro(1) « transfert » Feuil(ESPACE_WORK).

  3. Elle doit exécuter la macro(2) « ADDITION_COLONNE » Feuil(ESPACE_WORK).

  4. Elle doit exécuter la macro(3) « Somme_10 ».

  5. Elle doit ensuite chercher à la ligne 18 de la Feuil(ESPACE_WORK) les colonnes = 10.

  6. S’il n’y a aucune colonne = 10.

  7. Retour à la Feuil « REFERENCES » copier la 2ième ligne vers la 1 ière ligne de la Feuil(ESPACE_WORK).

  8. Elle doit exécuter les points n°2 – n°3 – n°4 - n°5

  9. Et ainsi de suite pour toutes les lignes de la Feuil « REFERENCES » jusqu’à ce que dans la Feuil(ESPACE_WORK) une ou +ieurs colonnes = 10.

  10. La macro doit s’arrêter de fonctionner.
En espérant avoir été claire.

Je vous remercie d’avance

ABDELHAK
 

Fichiers joints

ChTi160

XLDnaute Barbatruc
Bonjour
Bonjour le Fil ,le Forum
voilà la macro que j'ai fais pour la Boucle
pas trop compris le But.
VB:
Sub BoucleReferences()
With Worksheets("REFERENCES")
 derlgn = .Cells(10000, 1).End(xlUp).Row
dercol = .Cells(1, 20).End(xlToLeft).Column
tabreferences = .Range(.Cells(1, 1), .Cells(derlgn, dercol)).Value
   For lgn = 1 To UBound(tabreferences, 1)
     With Worksheets("ESPACE_WORK")
     For col = 1 To UBound(tabreferences, 2)
          .Cells(1, col) = tabreferences(lgn, col)
     Next col     
     Transfert
     ADDITION_COLONNES
     Somme_10     
     End With
   Next lgn
End With
End Sub
si tu veux , mets un exemple avec Explications qui montre le Résultat voulu en fonction des Cinq lignes de la feuille " REFERENCES "!
jean marie
 

ABDELHAK

XLDnaute Occasionnel
Bonjour jean marie,
Merci d'avoir répondu et avec brio.
La macro fonctionne parfaitement comme je le souhaitais. Je l' ai testé avec 66 lignes pas de problèmes.
Elle traite les 66 lignes en +/- 10 min.
Je joins un fichier avec les explications supplémentaires comme vous l'avez demandé.
En espérant que ce soit plus compréhensible.
Et encore merci pour votre aide précieuse.
Bien à vous.
ABDELHAK
 

Fichiers joints

ABDELHAK

XLDnaute Occasionnel
Bonjour,

Je sollicite encore votre aide pour alléger la macro ci-dessous.

J’ai 1 fichier avec 1 macro que je souhaite alléger parce qu’elle est très lourde.

La macro « BoucleReferences » copie la ligne 1 de la Feuil (REFERENCES) vers la ligne 1 de la Feuil(ESPACE_WORK) ensuite elle exécute les macros 2, 3 et 4 si il n’y a aucun résultat elle passe à la ligne 2 de la Feuil (REFERENCES) et recommence toute la procédure.

1) La macro(1) « transfert » cherche les 10 ref en ligne 1 de la Feuil(ESPACE_WORK) dans la (Feuil1) colonne A et copie la ligne entière correspondant à la ref de la Feuil1 à la Feuil(ESPACE_WORK).

2) La macro(2) « ADDITION_COLONNE » additionne colonne par colonne et affiche le résultat à la ligne 18 de la Feuil(ESPACE_WORK).

3) La macro(3) « Somme_10 » cherche dans Feuil(ESPACE_WORK) à la ligne 18 les colonnes = 10 et copie les résultats à la ligne 22.

Le tout fonctionne parfaitement à un détail près. Elle traite 5000 lignes en 10 :30. A mon humble avis, il me semble que c’est un peu long et surtout les tâches que la macro doit exécuter sont multiples et nombreuses.

J’ai dans ce fichier dans la Feuil « REFERENCES » plusieurs centaines de milliers de lignes dont chacune possède 10 ref + 1 n° d’ordre.

J’aimerais que la nouvelle macro exécute

1) Couper/coller la 1ière ligne de la Feuil « REFERENCES » vers la 1ière ligne de la Feuil « ESPACE_WORK ».

2) Sélectionner la plage de cellules (A2 : K500000) de la Feuil « REFERENCES » et couper/coller le tout à la 1ière ligne de la Feuil « REFERENCES ». De sorte que la macro s’exécutera à chaque fois à partir de la 1ière ligne de la Feuil « REFERENCES ». Je pense que cela ferait gagner du temps ?

En espérant avoir été claire.

Je vous remercie d’avance

ABDELHAK
 

ChTi160

XLDnaute Barbatruc
Bonjour ABDELHAK
Bonjour le Fil ,le Forum
question :
Peut il y avoir plusieurs colonne =10 ?
Si Oui !
Comment les met on en place sur la Ligne 22 de la feuille "ESPACE_WORK" ?
Doit on les empiler les une après les autres ?
jean marie
 

ABDELHAK

XLDnaute Occasionnel
Bonjour jean marie,
Oui, il peut y avoir plusieurs colonnes = 10.
On les places les uns à coté des autres sur la ligne 22 de la feuille "ESPACE_WORK".
Bien à vous.
ABDELHAK
 

ABDELHAK

XLDnaute Occasionnel
Bonjour,

Je sollicite votre aide pour alléger la macro ci-dessous.

J’ai 1 fichier avec 1 macro que je souhaite alléger parce qu’elle est très lourde.

La macro « BoucleReferences » copie la ligne 1 de la Feuil (REFERENCES) vers la ligne 1 de la Feuil(ESPACE_WORK) ensuite elle exécute les macros 2, 3 et 4 si il n’y a aucun résultat elle passe à la ligne 2 de la Feuil (REFERENCES) et recommence toute la procédure.

1) La macro(1) « transfert » cherche les 10 ref en ligne 1 de la Feuil(ESPACE_WORK) dans la (Feuil1) colonne A et copie la ligne entière correspondant à la ref de la Feuil1 à la Feuil(ESPACE_WORK).

2) La macro(2) « ADDITION_COLONNE » additionne colonne par colonne et affiche le résultat à la ligne 18 de la Feuil(ESPACE_WORK).

3) La macro(3) « Somme_10 » cherche dans Feuil(ESPACE_WORK) à la ligne 18 les colonnes = 10 et copie les résultats à la ligne 22.

Le tout fonctionne parfaitement à un détail près. Elle traite 5000 lignes en 10 :30. A mon humble avis, il me semble que c’est un peu long et surtout les tâches que la macro doit exécuter sont multiples et nombreuses.

J’ai dans ce fichier dans la Feuil « REFERENCES » plusieurs centaines de milliers de lignes dont chacune possède 10 ref + 1 n° d’ordre.

J’aimerais que la nouvelle macro exécute

1) Couper/coller la 1ière ligne de la Feuil « REFERENCES » vers la 1ière ligne de la Feuil « ESPACE_WORK ».

2) Supprimer la 1ière ligne de la Feuil « REFERENCES ». De sorte que la macro s’exécute à chaque fois à partir de la 1ière ligne de la Feuil « REFERENCES ». Je pense que cela ferait gagner du temps ?

3) Réunir les macros 1, 2, et 3 en une seule macro :

1°) elle doit chercher les 10 ref de la 1ière ligne de la Feuil « ESPACE_WORK » à la colonne A de la Feuil « Feuil1 ».

2°) vérifier à la colonne B de la Feuil « Feuil1 » et à hauteur des 10 ref le contenu des cellules.

3°) si les 10 cellules n’ont pas un fond vert passer à la colonnes suivante C, D, E, …JJZ recommencer la procédure jusqu’à ce il y ait 10 cellules à fond vert.

Il y a 7045 colonnes au total.

En espérant avoir été claire.

Je vous remercie d’avance

ABDELHAK
 

Fichiers joints

ChTi160

XLDnaute Barbatruc
bonjour ABDELHAK
peux tu me dire comment il faut faire , après avoir à partir d'une ligne de Références , trouvé par exemple 4 colonnes avec 10 cellules à fond vert et avoir colle les données à partir de la Ligne 22
merci
jean marie
 
Dernière édition:

ABDELHAK

XLDnaute Occasionnel
Bonjour jean marie,
Après avoir trouvé 4 colonnes avec 10 cellules à fond vert et avoir collé les données à la ligne 22. La macro doit tout simplement s'arrêter.
La macro doit continuer que si le résultat ne répond pas aux critères des 10 cellules à fond vert trouvées.
Bien à vous.
ABDELHAK
 

ChTi160

XLDnaute Barbatruc
Re
Je m explique
Je passe la premiere ligne de ref en revue et je trouve une colonne avec 10*1 , que je colle en ligne 22
Donc Ensuite j arrete la boucle sur les lignes references?
C est ca ?
Jean marie
 

ABDELHAK

XLDnaute Occasionnel
RE
Oui absolument. Il faut que vous sachiez que j'ai modifié les données afin que vous puissiez visualiser résultat final.
En réalité, si la macro vérifie des centaines de millier de lignes Références, j'espère que 1, 2, 3 ou 4 lignes maximum répondent à ces critères.
Bien à vous.
ABDELHAK
 

ChTi160

XLDnaute Barbatruc
Re
en pièce jointe , une approche , j'ai modifié le tableau en "Feuil1" et constitué une ligne de références qui m'a permis de vérifier le fonctionnement des procédures .
à toi de tester et de me dire ce qui ne va pas .
tu dis :
j'espère que 1, 2, 3 ou 4 lignes maximum répondent à ces critères.
Est ce que ces Colonnes peuvent être issues de différentes lignes de références (si oui il me faudra modifier ma copie) Lol
jean marie
 

Fichiers joints

ABDELHAK

XLDnaute Occasionnel
RE,
J'ai essayé la macro, mais il m'affiche un message d'erreur : "dépassement de capacité".
Quant aux Colonnes, si je vous ai bien compris, font partie du tableau Feuil1 et elles sont constantes.
Le tableau Feuil1 reste en l'état, il ne bouge pas.
Bien à vous.
ABDELHAK
 

ChTi160

XLDnaute Barbatruc
Re
ok !
Dans le module 3 tu modifies la variable "Col"
tu as :
VB:
Public Col As Byte (Nombre entier de 0 à 255) 'pas suffisant vu le Nombre de colonnes du tableau
tu mets :
VB:
Public Col As Integer' Nombre entier de -32'768 à 32'767
pour ce qui est de la macro affectée au Bouton "Lancer Recherche" , elle se trouve dans le Module 3
pour vérifier tu fais :
Dans la barre "Developpeur" tu Cliques sur "Mode création"
puis tu Cliques droit sur le Bouton "Lancer Recherche" puis tu sélectionnes "Visualiser le Code".
tu arrives alors sur :
VB:
Private Sub CommandButton1_Click()
BoucleReferences 'macro qui est lancée
End Sub
pour ce qui est des colonnes on ne s'est pas compris , mais pas grave lol
jean marie
 

ABDELHAK

XLDnaute Occasionnel
Bonjour,


Désolé de cette réponse tardive, j’ai testé la macro que vous m’avez réalisée et je vous en remercie.

1°) la macro est un peu plus rapide : (pour 280 lignes, elle les traite en 20 min soit 10 min de moins par rapport à la précédente macro)

2°) j’aimerais si cela est possible que lorsqu’elle lance une nouvelle recherche à la Feuil(REFERENCES) qu’elle le fasse en supprimant, à chaque nouvelle recherche, la 1ière ligne, ainsi à la fin de la recherche la Feuil(REFERENCES) soit vider de son contenu (plus aucune ligne ne doit apparaître).

3°) à la ligne 22, il y a 11 références qui apparaissent au lieu de 10 références.

4°) je crois que la macro lance la recherche sur 11 références au lieu de 10 références.

J’ai essayé de modifier sans succès, je dois dire que je n’y comprends rien en lisant ces lignes de codes. Je suis un peu perdu.

Je joins le fichier avec le résultat de la recherche.

Bien à vous.

ABDELHAK
 

Fichiers joints

ChTi160

XLDnaute Barbatruc
Bonjour ABDELHAK
Bonjour le Fil, le Forum
J espere que tu vas bien?
Je regarde cela des que possible.
Jean marie
 

ABDELHAK

XLDnaute Occasionnel
Bonjour jean marie,
Je vais très bien et vous ?
D'avance merci pour votre aide, il n'y a pas le feu au lac.
Bien à vous.
ABDELHAK
 

Créez un compte ou connectez vous pour répondre

Vous devez être membre afin de pouvoir répondre ici

Créer un compte

Créez un compte Excel Downloads. C'est simple!

Connexion

Vous avez déjà un compte? Connectez vous ici.

Haut Bas