Intervenir pendant Macro

bonjour

depuis quelques jours je recherche une solution pour une macro

je vous explique

j'ai créé une macro qui fonctionne très bien sauf une chose bloque ...

j'ai besoin d'intervenir lors du lancement de la macro

A un moment dans ma macro j'ai besoin de surligné des lignes en grises mais manuellement car c'est à l'instant T que je sais lesquelles sont concernées

J'ai donc mis

MsgBox ("Surligner en gris les cdes décalées"vbinformation)

après ça la macro me propore une boite de dialogie avec le bouton OK je clique mais j'aimerais à ce moment pouvoir griser mes lignes et ensuite relancer la macro pour terminer.

pourriez vous m'aider svp .

merci par avance

Bonsoir,

voici ce que je vous propose :

une variable Continue déclarée en Public pour être accessible à partir du projet complet.

A la place du MsgBox utiliser un Userform affiché en mode Modal = 0 afin de donner accès à la feuille malgré son affichage.

Une boucle Do Loop avec un DoEvents qui attends une condition, sans le DoEvents, la boucle Do Loop serait infinie sans jamais pouvoir cliquer sur le bouton OK du Userform. Cette condition est un prérequis pour quitter la boucle Do Loop :

il faut que Continue soit à VRAI et Continue passe à VRAI quand vous cliquez sur le bouton OK du Userform...

Voir le fichier joint :

201attente-loureed.xlsm (17.86 Ko)

@ bientôt

LouReeD

Bonsoir,

As-tu essayé Application.InputBox avec sélection d'une plage de cellules ?

Tu sélectionnes les données sur lesquelles tu dois intervenir et l'action prévue est réalisée par ton code qui suit...

Cordialement.

LouReeD a écrit :

Bonsoir,

voici ce que je vous propose :

une variable Continue déclarée en Public pour être accessible à partir du projet complet.

A la place du MsgBox utiliser un Userform affiché en mode Modal = 0 afin de donner accès à la feuille malgré son affichage.

Une boucle Do Loop avec un DoEvents qui attends une condition, sans le DoEvents, la boucle Do Loop serait infinie sans jamais pouvoir cliquer sur le bouton OK du Userform. Cette condition est un prérequis pour quitter la boucle Do Loop :

il faut que Continue soit à VRAI et Continue passe à VRAI quand vous cliquez sur le bouton OK du Userform...

Voir le fichier joint :

@ bientôt

LouReeD

Merci de votre réponse mais je rencontre un probleme

je vous montre une partie de ma macro

" ' Sélection des en-têtes couleur jaune

Range("A1:R1").Select

Selection.Interior.ColorIndex = 49

' Couleur du texte en A1 : vert (Couleur n°10)

Range("A1:R1").Select

Selection.Font.ColorIndex = 2

( c'est à ce moment là que la macro doit me proposer de metre des lignes en gris et ensuite une fois fait que je puisse la relancer)

For i = 1 To 1000000

If i = 500000 Then

UserForm1.Show 0

Do Until Continue = True

DoEvents

Loop

End If

Next

MsgBox ("fini")

'End Sub

' Trier par transporteur

'

Rows("2:375").Select

Selection.Sort Key1:=Range("B2"), Order1:=xlAscending, Header:=xlGuess, _

OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal"

Quand je saisie votre formule macro, un message d'erreur s'affiche

"erreur d'éxécution 424 objet requis" et met en jaune la ligne USerform.show 0

merci pour votre aide

Angélique

Bonsoir,

en effet j'utilise un Userform...

Donc vous ouvrez les deux fichiers, le mien et le votre puis sous VBA vous cliquer/glisser/déposer mon Userform1 vers votre fichier, du coup l'objet existera chez vous et cela devrait fonctionner.

Au fait le For To Next était la que pour montrer que le code s'arrête, il vous suffit dans votre code de copier ces lignes :

UserForm1.Show 0
Do Until Continue = True
    DoEvents
Loop

et n'oubliez pas de mettre

Public Continue As Boolean

au début d'un des Modules du classeur sous VBA !

@ bientôt

LouReeD

Bonjour

je ne comprends pas je déplace votre userform sur mon fichier mais il m'indique toujours le message d'erreur dans le lancement de la macro "erreur d'éxécution 424 objet requis" et met en jaune la ligne USerform.show 0

ci joint un fichier qui recopie tout le début de la macro

merci de prendre de votre temps pour mon soucis c est très gentil

je suis novice en macro mais je compte bien faire une formation car ça me plait

Angélique

104macro-detaillee.xlsx (13.89 Ko)

Bonjour,

Une procédure Sub commence par Sub...

Sans Sub, le code exécutable est hors procédure, ce qui est incompatible.

MFerrand a écrit :

Bonjour,

Une procédure Sub commence par Sub...

Sans Sub, le code exécutable est hors procédure, ce qui est incompatible.

bonjour

au début de ma macro j'ai bien écrit sub et à la fin de celle ci End Sub

Mets donc un fichier fonctionnel, au lieu d'une reproduction sur un support inadéquat.

Voilà le fichier je suis vraiment désolé de ne pas réagir aussi rapidement

Mon cllègue avait créer des macros et aujourd'hui on me demande de tout modifier ...


avec la macro que je viens de vous envoyer tout se lance bien

le bouton griser vos lignes s'affiche donc je grise mes lignes et quand je veux appuyer OK rien ne se passe

93classeur1.xlsm (31.36 Ko)

Une question avant que je lise...

La macro commence par :

ActiveWorkbook.Activate

(En passant, s'il est actif, il n'est guère utile de l'activer ! )

Par contre il faut savoir si le classeur dont il est question est celui qui contient la macro ainsi lancée, ou s'il s'agit d'un autre classeur ?

En fait je n'ai pas touché à tout ça pour la macro

je reprends celle de mon ancien collègue

alors je fais une extraction sur un programme qui me fait parvenir un fichier excel

ensuite je clique sur la macro ancrée au ruban

la j'ai extrait la macro que j'utilise pour la coller sur une nouvelle feuille excel pour vous la joindre

car le fichier excel original contient au moins 6 macros ....

la quand je la lance ça commence la mise en forme

ça se stoppe avec une fenetre avec bouton donc la je grise moi meme les lignes que je choisi

et au moment d appuyer sur OK rien ne se fait

je suis vraiment désolé d'être aussi amatrice en MAcro ....

J'en suis désolé aussi, car je ne travaillerai pas sur ce classeur !

Macro interminable, à base de code enregistré, dont la moitié au moins (et sans doute plus) est inutile, "imbuvable" pour tout dire sans le réécrire en connaissance de cause, ce qui n'est pas rationnellement faisable dans un classeur sans données...

A mon avis, le plus simple et le plus rationnel serait de tout virer repartir à zéro et réécrire un projet qui tienne la route...

Tel que cela se présente ici, je jette l'éponge avant de commencer !

Cordialement.

je comprends ..

j'aimerais la refaire le probleme c'est que je doute réussir solo car moi aussi je trouve la macro beaucoup trop charge et repetitive.

car à la base les choses ne sont pas compliquées

créer des plannings différents en fonction de l'entrepôt de depart en supprimant quelques données et une bonne mise en page

merci encore d'avoir pris du temps

Bonjour Ferrand ...le forum,

Ce que Ferrand t'explique c'est qu'il ne travaillera pas sur cette macro à partir de ce classeur vide.

D'ailleurs je doute qu'aucun d'entre nous ne se hasarde à reprendre cette macro dans ce contexte...

Par contre, il est surement plus facile de reprendre et créer un nouveau code à partir des fichiers originaux.

Tu n'es pas obligé de tout faire "solo" : je pense que tu trouveras suffisamment d'aide sur le forum pour t'aider à concocter quelque chose de beaucoup mieux ficelé que le code actuel.

Par contre cela va t'obliger à un petite travail de préparation et d'explications pour nous permettre de comprendre les tenants et les aboutissants de ce travail, à partir de fichiers "presque réels" (c'est à dire juste anonymes pour la confidentialité, et allégés pour la commodité. pas besoin de noms, de N° de tel ou d'adresses... ni de n° de compte en banque ! Pas besoin non plus de 300 enregistrements si 10 peuvent suffisent à comprendre...

Moyennant quoi tout n'est pas perdu : On a déjà vu réaliser de véritable petit programme sur les forums... La compétence et la pugnacité des intervenants n'est plus à démontrer... Pour peu que toi même ait également la volonté de parvenir à quelque chose...

A+

Merci Galopin !...

Je n'avais vraiment pas la force aujourd'hui de me fendre d'une explication à ce niveau !

(je n'arrête pas de faire des fautes de frappes ! que je corrige, tout va donc lentement. Je ne vais tarder je pense à basculer vers des activités culinaires, en me souhaitant que le résultat soit meilleur ! )

Merci Galopin

Il est vrai que cette macro est à rallonge et dès ce soir je me penche sur le sujet

Je vous envoi quand meme les sources si c’est possible de me mettre sur le bon chemin

Encore merci

Je vous explique un peu les choses et je vais essayer d’être précise …

Lancement J-2 (1ere macro lancé l’après midi)

Il faut d’abord ouvrir le fichier brut et lancer la macro

  • retirer toutes les lignes dont la mention DOCLIENT apparait en colonne B
  • supprimer toutes les colonnes inutiles (est-ce nécessaire si on reporte que les données utiles ?)
  • créer la mise en page du fichier avec en-tête du tableau bleu écriture blanche de la colonne A à Z avec intitulé sur chaque colonne, quadrillage et hauteur de ligne de A1 à Z150
  • reporter les infos selon les colonnes (exemple infos Colonne L du fichier Brut devient Colonne A)
(il faut rien reporter dans les colonnes i à L)
  • Demande de griser des lignes ( info au jour le jour)
  • Saisir une date
  • Créer un planning global avec impression PDF Colonne A à O avec pour limite en lignes celles qui sont remplies et classer par ordre alphabetique la colonne B.
  • Créer un planning par lieu de chargement (colonne A) avec mêmes conditions qu’au-dessus et les enregistrer sur serveur

Lancement J-2(2eme macro lancé le matin)

Il faut d’abord ouvrir le fichier brut et lancer la macro

  • retirer toutes les lignes dont la mention DOCLIENT apparait en colonne B
  • supprimer toutes les colonnes inutiles (est-ce nécessaire si on reporte que les données utiles ?)
  • créer la mise en page du fichier avec en-tête du tableau bleu écriture blanche de la colonne A à Z avec intitulé sur chaque colonne, quadrillage et hauteur de ligne de A1 à Z150
  • reporter les infos selon les colonnes (exemple infos Colonne L du fichier Brut devient Colonne A) avec report des heures de la colonne BE dans colonne i.
  • Saisir une date
  • Créer un planning par lieu de chargement (colonne A) avec tri sur colonne i heure chargement et les enregistrer sur serveur

Angelique la Novice


MFerrand a écrit :

Merci Galopin !...

Je n'avais vraiment pas la force aujourd'hui de me fendre d'une explication à ce niveau !

(je n'arrête pas de faire des fautes de frappes ! que je corrige, tout va donc lentement. Je ne vais tarder je pense à basculer vers des activités culinaires, en me souhaitant que le résultat soit meilleur ! )

Désolé si je suis longue à comprendre mais j'ai la volontée de vouloir c'est déjà pas mal

pour ma part je me débrouille mieux en cuisine

24forum-extraction-brute.csv (744.00 Octets)

Quel f... !

Qu'est-ce que tu veux faire avec ta boite de dialogue ?

On peut supposer que tu veux pouvoir modifier la plage

Rows("2:375").Select

Sauf que plus loin dans le code on passe de Rows("2:375")... à Range("1:375")...

En réalité quel est le vrai besoin prendre toutes les lignes (nombre de lignes variables)

ou prendre seulement quelques lignes sur les 375 et dans ce cas une fois que tu auras fait une sélection partielle comment tu comptes t'en tirer ?

En fait tu vas sélectionner quoi ? des lignes entières ?

Des plages correspondant à des lignes entières et c'est VBA qui devra se débrouiller pour comprendre ???

Dans la pratique on fait rarement ça. VBA est bien capable de détecter sans risque d'erreur quelle est la plage utile... (s'il s'agit de traiter toutes les données)

EPI... ton csv il a des chances de pas servir à grand chose vu son contenu une fois les suppressions effectuées... Un ticket de métro devrait suffire pour imprimer ce qui reste... D'ailleurs la macro semble à peine correspondre à ton commentaire...

Bref pour l'instant plus tu avances moins j'y vois clair.

Pour l'instant tout ce que je peux conserver c'est le nom de ton chemin de fichiers...

Je te conseille de tuer ce fil. Et d'en recommencer un à partir de rien.

Le csv à importer (intégral)

La description précise des colonnes inutiles et des choses à imprimer, successivement. Parce que là cette macro elle ne me semble pas vraiment utile (pour l'instant...)

En fait effectivement il n'y a pas de suppression à faire si on sait ce qui est intéressant et si on connaît le résultat espéré...

Mais avec cette macro vu qu'on commence par faire des suppressions, on perd tout repère car les colonnes changent au fil des suppressions alors...

Donc au lieu de me faire un grand laïus, plutôt que de me pondre une macro qui ne me servira à rien...

...à partir d'un csv un peu plus réaliste :

Faire manuellement une feuille avec chaque extraction "Zone d'impression" finalisée pour chaque fichier à imprimer et enregistrer

Dans un premier temps inutile de t'intéresser au formatage : On ne va s'intéresser qu'au traitement des données.

Pour la déco on verra après...

A+

Bonsoir à tous !

D'accord avec tout le monde !

Ceci dit je fini mon intégration de code dans son projet....

@ bientôt

LouReeD

LouReeD a écrit :

Bonsoir à tous !

D'accord avec tout le monde !

Ceci dit je fini mon intégration de code dans son projet....

@ bientôt

LouReeD

Bonjour

Effectivement tout fonctionne la merci encore.

je vais quand meme réécrire celle ci pour être moins lourde à lire

Angélique


galopin01 a écrit :

Quel f... !

Qu'est-ce que tu veux faire avec ta boite de dialogue ?

On peut supposer que tu veux pouvoir modifier la plage

Rows("2:375").Select

Sauf que plus loin dans le code on passe de Rows("2:375")... à Range("1:375")...

En réalité quel est le vrai besoin prendre toutes les lignes (nombre de lignes variables)

ou prendre seulement quelques lignes sur les 375 et dans ce cas une fois que tu auras fait une sélection partielle comment tu comptes t'en tirer ?

En fait tu vas sélectionner quoi ? des lignes entières ?

Des plages correspondant à des lignes entières et c'est VBA qui devra se débrouiller pour comprendre ???

Dans la pratique on fait rarement ça. VBA est bien capable de détecter sans risque d'erreur quelle est la plage utile... (s'il s'agit de traiter toutes les données)

EPI... ton csv il a des chances de pas servir à grand chose vu son contenu une fois les suppressions effectuées... Un ticket de métro devrait suffire pour imprimer ce qui reste... D'ailleurs la macro semble à peine correspondre à ton commentaire...

Bref pour l'instant plus tu avances moins j'y vois clair.

Pour l'instant tout ce que je peux conserver c'est le nom de ton chemin de fichiers...

Je te conseille de tuer ce fil. Et d'en recommencer un à partir de rien.

Le csv à importer (intégral)

La description précise des colonnes inutiles et des choses à imprimer, successivement. Parce que là cette macro elle ne me semble pas vraiment utile (pour l'instant...)

En fait effectivement il n'y a pas de suppression à faire si on sait ce qui est intéressant et si on connaît le résultat espéré...

Mais avec cette macro vu qu'on commence par faire des suppressions, on perd tout repère car les colonnes changent au fil des suppressions alors...

Donc au lieu de me faire un grand laïus, plutôt que de me pondre une macro qui ne me servira à rien...

...à partir d'un csv un peu plus réaliste :

Faire manuellement une feuille avec chaque extraction "Zone d'impression" finalisée pour chaque fichier à imprimer et enregistrer

Dans un premier temps inutile de t'intéresser au formatage : On ne va s'intéresser qu'au traitement des données.

Pour la déco on verra après...

A+

bonjour

Vraiment désolé je n'ai rien créer de cette macro, on me demande d'ajouter des choses dessus

mais lors de la lecture je me rends bien compte que beaucoup d'étape ne servent à rien mais ça marche.

si j'ai bien compris ton message il faut que j'envoi le fichier CSV ( extraction de mon logiciel) et montrer le final que je veux sans la deco...

alors je vais le faire dès maintenant en espérant avoir compris ...

Angelique

Rechercher des sujets similaires à "intervenir macro"