Formule clignotante qui interfère avec les autres macros
Bonjour,
J'ai obtenu du Forum une formule en Visual Basic qui permet à une alerte de clignoter.
Mon problème est que la formule interfère avec les autres macros de mon fichier. (Voir pièce jointe avec explication).
Merci de votre aide
Bonjour,
Le problème c'est que quand vous avez fait la première demande pour le clignotement vous n'avez rien dit au sujet de l'utilisation d'autres macros.
Votre problème vient du fait que le déclenchement du clignotement est provoqué sur l'événement de feuille SelectionChange donc à chaque changement de sélection dans la feuille la macro clignotement est démarrée.
Or dans vos macro 1, 2, 2A etc vous mettez plein de Range("xx").Select donc tous ces sélect provoquent le démarrage de la macro.
De plus la macro de clignotement est conçue pour fonctionner tant qu'il y a le mot alerte donc là problème car tant qu'on est dans l'exécution d'une macro on ne sait pas lancer une autre macro.
Il faudrait donc déterminer combien de fois la macro doit fonctionner avant de se terminer.
Pour un bouton qui déclenche une macro à la demande on mettrait comme code au bouton un InputBox et un Select Case
Comme ça
Private Sub CommandButton21_Click()
Choix = InputBox("Quelle macro exécutez-vous ?")
Select Case Choix
Case "1"
CopierColler01
Case "2"
CopierColler02
Case "2A"
CopierColler02A
Case "2B"
CopierColler02B
Case "2C"
CopierColler02C
Case "2D"
CopierColler02D
End Select
End SubPour les Select c'est facile au lieu de faire
Range("F10").Select
Selection.CopyFaites
Range("F10").CopyMême chose pour les PasteSpecial.
Si j'ai le renseignement je peux essayer d'arranger cela.
PS: J'ai ajouté une version modifiée à vous de voir.
Bonjour,
Wow!!! Votre version modifiée fonctionne très bien.
Je dois vous avouez que je suis très novice en création de formule VBA. Je peux très bien l'interpréter et la modifier si nécessaire mais je n'ai jamais créé de formule comme telle. Comme exemple, j'ai modifié le nombre de clignotement de 5 à 10 sans problème.
Jusqu'à maintenant, je peux créé des macro simples seulement. Mais avec l'aide du Forum, j'apprends beaucoup et je m'améliores de jour en jour. Ce qui m'amène a dire, ça va vous sembler bizarre, mais je n'ai jamais créé de InputBox et je ne sais pas comment faire. J'aurais besoin d'explication.
Avec l'InputBox je vais pouvoir éliminer tous les autres boutons et ne garder que celui de l'InputBox. C'est super..
Je ne suis pas certain de ce que vous voulez dire à propos du PasteSpecial. Quels renseignements avez vous besoin ? Comme je vous l'ai mentionné plus haut, avec votre version de la formule, tout fonctionne parfaitement. Que reste t'il à ajouter ?
Il se peut qu'à la réception de votre prochaine réponse, il se passe quelque temps avant que je vous réponde. Je dois transférer toutes les données dans mon fichier principale et les adapter à celui-ci. Ça peut prendre quelques jours.
Merci beaucoup de votre aide. C'est très apprécié.
Bonjour,
Pour InputBox vous aurez les explications dans l'aide de VBA.
Pour PasteSpecial c'était simplement pour faire
Range("D3").Copy
Range("F10").PasteSpecial Paste:=xlPasteValuesau lieu de
Range("D3").Select
Selection.Copy
Range("F10").Select
Selection.PasteSpecial Paste:=xlPasteValuesInputBox, fonction
Voir aussi Exemple Particularités
Affiche une invite dans une boîte de dialogue, attend que l'utilisateur tape du texte ou clique sur un bouton, puis renvoie le contenu de la zone de texte sous la forme d'une valeur de type String.
Syntaxe
InputBox(prompt[, title] [, default] [, xpos] [, ypos] [, helpfile, context])
La syntaxe de la fonction InputBox comprend les arguments nommés suivants :
Élément Description
prompt Expression de chaîne affichée comme message dans la boîte de dialogue. La longueur maximale de l'argument prompt est d'environ 1 024 caractères, selon la largeur des caractères utilisés. Si prompt occupe plus d'une ligne, n'oubliez pas d'insérer un retour chariot (Chr(13)) ou un saut de ligne (Chr(10)) entre les lignes, ou une combinaison de caractères retour chariot-saut de ligne (Chr(13) & Chr(10)) entre chaque ligne.
title Facultatif. Expression de chaîne affichée dans la barre de titre de la boîte de dialogue. Si l'argument title est omis, le nom de l'application est placé dans la barre de titre.
default Facultatif. Expression de chaîne affichée par défaut dans la zone de texte en l'absence de toute autre valeur. Si l'argument default est omis, la zone de texte qui s'affiche est vide.
xpos Facultatif. Expression numérique indiquant, en twips, la distance horizontale qui sépare le bord gauche de l'écran de la bordure gauche de la boîte de dialogue. Si l'argument xpos est omis, la boîte de dialogue est centrée horizontalement.
ypos Facultatif. Expression numérique indiquant, en twips, la distance verticale qui sépare le haut de l'écran de la bordure supérieure de la boîte de dialogue. Si l'argument ypos est omis, la boîte de dialogue est positionnée verticalement, à environ un tiers de l'écran en partant du haut.
helpfile Facultatif. Expression de chaîne indiquant le fichier d'aide à utiliser pour fournir une aide contextuelle sur la boîte de dialogue. Si l'argument helpfile est défini, l'argument context doit l'être également.
context Facultatif. Expression numérique indiquant le numéro de contexte attribué par l'auteur de l'aide à la rubrique appropriée. Si l'argument context est défini, l'argument helpfile doit l'être également.
Remarques
Lorsque les deux arguments helpfile et context sont définis, l'utilisateur peut appuyer sur F1 pour afficher la rubrique d'aide correspondant à l'argument context. Certaines applications hôtes, Microsoft Excel par exemple, peuvent ajouter automatiquement un bouton Aide à la boîte de dialogue. Si l'utilisateur clique sur OK ou appuie sur ENTRÉE , la fonction InputBox renvoie le texte contenu dans la zone de texte. Si l'utilisateur clique sur le bouton Annuler, la fonction renvoie une chaîne de longueur nulle ("").
Note Si vous souhaitez préciser plus d'informations que celles fournies par le premier argument nommé, vous devez utiliser la fonction InputBox dans une expression. Si vous voulez omettre certains arguments de position, vous devez quand même placer la virgule de séparation correspondante.
Bonjour,
Je m'excuse du retard de ma réponse. Je devais créer une InputBox, ce qui m'a pris beaucoup de temps avant de réussir.
Je dois maintenant adapter toutes les macros et les nouvelles données à mon système principal. Ce sera une grosse tâche qui me prendra beaucoup de temps.
Tout semble fonctionner dans le fichierTest02.
Je te remercie pour ton aide. Si jamais des problèmes surgissent durant le transfère, je vais, comme d'habitude, consulter le Forum.
J'espère pouvoir tout faire sans vous importuner.
Merci encore pour ton aide précieuse.
Bonjour,
Le fichier que j'ai joint a déjà été travaillé par RobJam. J'y ai ajouté une InputBox dans la feuil2 qui fait fonctionner 3 macros différentes tout comme la macro dans la feuil1. Mais celle-ci active aussi le clignotement des cellules dans la colonne A.
J'ai réussi à transférer la macro de la feuil1 dans mon système principal mais je n'arrive pas à lui coller une InputBox.
Le fait que la macro débute par la phrase suivante: "Private Declare Function GetTickCount _
Lib "Kernel32" () As Long", et non par Sub m'empêche de relier la InputBox à cette macro comme elle l'est dans la feuil1. Si je click sur l'onglet macro, la macro n'apparait pas dans la liste des macros.
Je ne sais pas comment faire.
Aussi le bouton de la InputBox dans la feuil1 est statique et n'accepte pas les "clicks droite" contrairement à la InputBox que j'ai créée dans la feuil2 qui elle accepte les "Clicks droite". Pourquoi ?
Comme je l'ai mentionné précédemment, je suis assez novice dans la création de macro.
SVP m'expliquer comment la InputBox de la feuil1 est reliée à la macro. Je pourrai par la suite en relier une à la macro dans mon système principal.
Merci de votre aide précieuse.
Bonjour,
La macro n'est pas dans la liste des macros parce que c'est une macro qui n'est pas dans un module mais bien liée à la feuille 1
Pour la mettre dans une autre feuille il faut cliquer droit sur l'onglet de la feuille et Choisir Visualiser le code.
Private declare..... n'est pas une macro mais une déclaration pour la macro qui suit.
Pour les boutons celui de la feuille 1 est un contrôle ActiveX et l'autre un contrôle de formulaire. Pour voir les propriétés du premier il faut activer l'onglet Développeur puis Mode Création et Propriétés
Pour voir le code lié au bouton même chose Développeur > Mode création > Visualiser le code.
Bonjour,
Merci pour les explications. Tout fonctionne très bien mais il y a un petit bémol.
J'ai joint une partie de mon système original dans la pièce jointe.
Sur la feuil1, dès que vous mettez le nom de la case correspondante dans la InputBox et faite enter, la cellule dans la colonne A clignote instantanément.
Ce n'est pas ce qui arrive dans mon système original. Je dois changer le curseur de place afin de faire clignoter la cellule et souvent il y a un délai assez prononcé avant le clignotement.
Serait-ce parce que la macro attachée à la Inputbox est trop volumineuse ?
Merci encore pour votre aide.
Bonjour,
A tester
Regardez dans les procédures CopierColler j'ai modifié les 5 ou 6 premières. Il faut éviter tous les Select inutile (perte de temps à l'exécution) j'ai ajouter aussi des drapeaux (flag) pour écourter l'exécution quand c'est possible.
J' ai aussi modifier la procédure qui gère le clignotement en éliminant tous les tests et en remplaçant les n° de ligne dans Cells(N°Ligne,Colonne) par une variable que j'ai appelé j colonne reste toujours 3.
A vous de voir
Bonjour,
Merci pour les modifications. Ça semble mieux fonctionner.
Je suis quelque peu confus.
J'ai fini les modifications dans le module4. J'ai aussi ajouté le "Flag2" à chacune des cases.
La nouvelle formule fait fonctionner les 5 premières cellules (C3:C7) mais je n'arrive pas à faire fonctionner les cellules C9 en montant.
Si je change le nom de la cellule I9 (Case6) et que j'indique 6 dans la InputBox, le clignotement ne fonctionne pas en C9. Mais si je laisse le nom changé dans la cellule I9 et je change le nom dans la cellule I3 (Case1) et que j'indique 1 dans la InputBox, les deux Cellules (C3 et C9 clignotent.
J'ai essayé plusieurs ajouts et modifications à votre formule, sans succès. Je n'arrive pas à trouver la solution pour faire clignoter les cellules supérieures à la cellule C7, sauf si la cellule C3 clignote.
Que dois-je modifier ou ajouter à votre formule afin que toutes les cases fonctionnent correctement ?
Merci encore pour votre aide précieuse. J'apprend beaucoup de nos communications.
Bonjour,
Effectivement je n'avais pas tenu compte dans le calcul de J que après chaque groupe de 5 il y avait une ligne vide d'où le décalage.
A tester pour contrôle.
Bonjour,
Vous êtes un génie. J'ai appliqué votre formule dans mon système principal avec les modifications qui s'imposaient, et ça fonctionne super bien. Le tout se fait instantanément.
Avec vos conseils, je vais améliorer l'efficacité de mon système principal qui devrait être beaucoup plus performant en enlevant tous les "Select". Je peux vous dire qu'il y en a beaucoup. Le système comprend 60 dossiers différents. 34 de ces dossiers contiennent une très grosse macro qui exécute beaucoup de copier/coller/trier, ce qui fait beaucoup de "select" à enlever.
La grosseur du système est de 17Mo.
Je ne sais comment vous remercier.
Merci encore.