Comment activer deux macros dans le même code

Résolu
Bremic83 -  
 Bremic83 -
Bonjourà tous
Je butte actuellement surle problème suivant: J'ai deux macros qui sont dans des classeurs différents,et fonctionent très bien.

Voiçi la première:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("D25:O25")) Is Nothing Then Exit Sub
'enlève la couleur en ligne 1
Range("D25:O25").Interior.ColorIndex = xlNone
' colorie la ligne 1 de la colonne active
Cells(25, Target.Column).Interior.ColorIndex = 3
Range(Cells(28, Target.Column), Cells(35, Target.Column)).Interior.ColorIndex = xlNone
Cells(27, Target.Column).Interior.ColorIndex = 6
Cells(27, Target.Column).Font.ColorIndex = 49
End Sub

Voiçi la seconde :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)

If Not Intersect(Target, [D27:O35]) Is Nothing Then MiseEnFormeColonne Target.Column - 4

End Sub

J'ai essayé de les utiliser dans le même classeur,et là,j'ai une fenêtre d'erreur,qui me signale un
problème,les deux codes commençant par: Private Sub Worksheet_SelectionChange(ByVal Target As Range), (le débogueur m'indique les mots en gras )

Je suis allé consulter "Aide",mais les explications données s'adressent à des gens beaucoup plus initiés que moi au langage informatique,et je n'y ai rien compris.
Quelqu'un pourrait-il m'expliqueren langage clair,ce que je dois changer dans ces codes,pour pouvoir les utiliser sur le même tableau ?

Merci d'avance à qui s'intéressera à ce petit problème.

A plus

Bremic83

20 réponses


 
Bonjour,
probablement comme cela :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("D25:O25")) Is Nothing Then Exit Sub
'enlève la couleur en ligne 1
Range("D25:O25").Interior.ColorIndex = xlNone
' colorie la ligne 1 de la colonne active
Cells(25, Target.Column).Interior.ColorIndex = 3
Range(Cells(28, Target.Column), Cells(35, Target.Column)).Interior.ColorIndex = xlNone
Cells(27, Target.Column).Interior.ColorIndex = 6
Cells(27, Target.Column).Font.ColorIndex = 49

If Not Intersect(Target, [D27:O35]) Is Nothing Then MiseEnFormeColonne Target.Column - 4

End Sub
0
Migou76
 
Bonjour,

C'est peut-être bête ce que je vais te dire (mes connaissances sont limités) mais pourquoi ne pas coller la deuxième dans la première ?
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("D25:O25")) Is Nothing Then Exit Sub
'enlève la couleur en ligne 1
Range("D25:O25").Interior.ColorIndex = xlNone
' colorie la ligne 1 de la colonne active
Cells(25, Target.Column).Interior.ColorIndex = 3
Range(Cells(28, Target.Column), Cells(35, Target.Column)).Interior.ColorIndex = xlNone
Cells(27, Target.Column).Interior.ColorIndex = 6
Cells(27, Target.Column).Font.ColorIndex = 49

If Not Intersect(Target, [D27:O35]) Is Nothing Then MiseEnFormeColonne Target.Column - 4

End Sub

Cordialement,
Migou
0
Bremic83
 
Re à Le Pingou,et Migou76

Tout d'abord,merci pour vos réponses.( Elles sont toutes deux exactement les mêmes ! )

J'ai copié les deux dans mon code et j'obtiens la même réponse:

Fenêtre d'erreur: Erreur de compilation
Sub ou Fonction non définie

Et,dans le texte,: " MiseEnFormeColonne"est surligné en bleu.

Dans le tebleau,la première macro fonctionne,mais pas la deuxième.

Je n'y comprends rien .

A plus

Cordialement
Bremic83
0

 
Bonjour,
Comme cela se sera correcte :
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("D25:O25")) Is Nothing Then
'enlève la couleur en ligne 1
Range("D25:O25").Interior.ColorIndex = xlNone
' colorie la ligne 1 de la colonne active
Cells(25, Target.Column).Interior.ColorIndex = 3
Range(Cells(28, Target.Column), Cells(35, Target.Column)).Interior.ColorIndex = xlNone
Cells(27, Target.Column).Interior.ColorIndex = 6
Cells(27, Target.Column).Font.ColorIndex = 49
End If
If Not Intersect(Target, [D27:O35]) Is Nothing Then MiseEnFormeColonne Target.Column - 4

End Sub
0
Migou76
 
Bonsoir Pingou,

J'ai cherché où était l'erreur, t'es trop fort, t'as trouvé, mais t'as oublié le deuxième end if (je crois) le v'là :

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("D25:O25")) Is Nothing Then
'enlève la couleur en ligne 1
Range("D25:O25").Interior.ColorIndex = xlNone
' colorie la ligne 1 de la colonne active
Cells(25, Target.Column).Interior.ColorIndex = 3
Range(Cells(28, Target.Column), Cells(35, Target.Column)).Interior.ColorIndex = xlNone
Cells(27, Target.Column).Interior.ColorIndex = 6
Cells(27, Target.Column).Font.ColorIndex = 49
End If
If Not Intersect(Target, [D27:O35]) Is Nothing Then MiseEnFormeColonne Target.Column - 4
End If
End Sub

Très cordialement,
Migou
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question

 
Bonjour,
Ce n'est pas nécessaire pour le deuxième, mais par contre il faut inverser la première condition et la procédure devient:
Private Sub Worksheet_SelectionChange(ByVal Target As Range)
' Insérer le (Not) après (Is) ===> pas vide on exécute les instructions
If Intersect(Target, Range("D25:O25")) Is Not Nothing Then
'enlève la couleur en ligne 1
Range("D25:O25").Interior.ColorIndex = xlNone
' colorie la ligne 1 de la colonne active
Cells(25, Target.Column).Interior.ColorIndex = 3
Range(Cells(28, Target.Column), Cells(35, Target.Column)).Interior.ColorIndex = xlNone
Cells(27, Target.Column).Interior.ColorIndex = 6
Cells(27, Target.Column).Font.ColorIndex = 49
End If
If Not Intersect(Target, [D27:O35]) Is Nothing Then MiseEnFormeColonne Target.Column - 4

End Sub
0
eriiic Messages postés 24603 Date d'inscription   Statut Contributeur Dernière intervention   7 276
 
Bonsoir,

Je pense qu'il faut garder la 1ère proposition, et MiseEnFormeColonne est une macro qu'il faut ramener de l'autre classeur. Non ?
eric
0

 
Bonjour eriiic,
Oui je le pense aussi, d'ailleurs je vais les mettre dans le sens dodo ...
0
Bremic83
 
Bonjour à tous,Le Pingou,Eriiic,et Migou76

Je rencontre toujours des difficultés pour mettre les solutions proposées en place,il y a à chaque fois une fenêtre d'erreur ! Décourageant !
J'ai essayé de changer,en reprenant le code de la première et en changeant les plages de travail,mais,si
je ne fais plus apparaitre de fenêtre d'erreur,je n'obtiens aucun résultat !
La première partie fonctionne bien,l'autre : zéro,rien !
Je suppose qu'il y a quelque manip ou indication qui manque à l'appel, mais je suis incapable de trouve laquelle.
Je vous joins ce nouveau code,çi-dessous,peut-être que la solution vous apparaitra

En tous cas,quelque soit le résultat final,grand merci à tous

A plus

Bremic83



Private Sub Worksheet_SelectionChange(ByVal Target As Range)
If Intersect(Target, Range("D25:O25")) Is Nothing Then Exit Sub
'enlève la couleur en ligne 1
Range("D25:O25").Interior.ColorIndex = xlNone
' colorie la ligne 1 de la colonne active
Cells(25, Target.Column).Interior.ColorIndex = 3
Range(Cells(28, Target.Column), Cells(35, Target.Column)).Interior.ColorIndex = xlNone
Cells(27, Target.Column).Interior.ColorIndex = 6
Cells(27, Target.Column).Font.ColorIndex = 49


If Intersect(Target, Range("D27:O27")) Is Nothing Then Exit Sub
'enlève la couleur en ligne 1
Range("D27:O27").Interior.ColorIndex = xlNone
' colorie la ligne 1 de la colonne active
Cells(27, Target.Column).Interior.ColorIndex = 49
Range(Cells(28, Target.Column), Cells(35, Target.Column)).Interior.ColorIndex = xlNone
Cells(28, Target.Column).Interior.ColorIndex = 20
Cells(28, Target.Column).Font.ColorIndex = 49



End Sub
0

 
Bonjour,
Que se passe-t-il avec ceci .
Private Sub Worksheet_SelectionChange(ByVal Target As Range) 
' Insérer le (Not) après (Is) ===> pas vide on exécute les instructions 
If Intersect(Target, Range("D25:O25")) Is Not Nothing Then 
'enlève la couleur en ligne 1 
Range("D25:O25").Interior.ColorIndex = xlNone 
' colorie la ligne 1 de la colonne active 
Cells(25, Target.Column).Interior.ColorIndex = 3 
Range(Cells(28, Target.Column), Cells(35, Target.Column)).Interior.ColorIndex = xlNone 
Cells(27, Target.Column).Interior.ColorIndex = 6 
Cells(27, Target.Column).Font.ColorIndex = 49 
End If 
If Not Intersect(Target, [D27:O35]) Is Nothing Then MiseEnFormeColonne Target.Column - 4 

End Sub 


Peut-être, mettre votre fichieur sur https://www.cjoint.com/ !

0
Bremic83
 
Bonjour Le Pingou.

Oui,je vide le code,avant de copier-coller le nouveau.
Cette fois,nouvelle fenêtre d'erreur :
Erreur de compilation
Utilisation incorrecte de l'objet

Et dans la ligne copiée ci-dessous,: Nothing , est surligné en bleu

If Intersect(Target, Range("D25:O25")) Is Not Nothing Then

Comme c'est de l'hébreu pour moi,je ne sais pas comment faire.
A plus

Cordialement Merci

Bremic83
0

 
Bonjour,
En complément; vous avez pris soin de supprimer la deuxième procédure dans le module de la feuille !
Si les 2 sont présantes dans le module vous aurez le message d'erreur.
0

 
Bonjour,
Corriger la ligne qui correspond au surlignage bleu par celle-ci:
If (Intersect(Target, Range("D25:o25")) Is Nothing) = False Then 

Si cela ne marche pas, peut-être, mettre votre fichier sur https://www.cjoint.com/ et poster le lien!
0
Bremic83
 
Bonsoir Le Pingou.

Ca y est, ça fonctionne comme désiré.
Il me reste à te remercier pour ta gentillesse et la patience dont tu as fait preuve à mon égard, et,bien sûr,
à saluer ta compérence.
Je remercie également Migou76 et Eriiic,pour leur participation,vous êtes tous trois très sympas.

Peut-être à plus pour une autre discussion.

Un Bremic83 ravi !
0
Bremic83
 
Bonsoir Le Pingou

Désolé de revenir sur la question que je croyais réglée hier.

Je me heurte à un curieux problème :

J'ai enregistré ton code selon tes dernières instructions,et ça fonctionne parfaitement.
J'ai voulu le copier dans un autre classeur,et je me retrouve avec la fenêtre d'erreur qui m'a déjà bien embêté:
Erreur de compilationSub ou fonction non définie et dans la ligne du code>MiseEnFormeColonne est surligné en bleu.
J'ai essayé sur un autre classeur:même résultat !
J'ai vidé ltoute les macros et les codes VBA de ces classeurs,et réenregistré le code ,sans obtenir de changement
Pourquoi celà fonctionne impeccablement sur un classeur et non sur les autres ? Mystère !

Excuses moi de te relancer,mais,je suis perdu !

A plus

Bremic83
0

 
Bonjour,
Se serait plus facile si vous pouviez mettre le classeur qui fonctionne sur https://www.cjoint.com/ et poster le lien !
Note : à quoi fait référence le texte [MiseEnFormeColonne] ?
0
Bremic83
 
Bonjour Le Pingou
D'abord,merci de me répondre.
J'ai essayé de te transmettre le classeur qui fonctionne,mais,quand je vérifie mon envoi,il ne fonctionne plus !
Il me sort le fenêtre d'erreur :Erreur de compilation ;;;etc,etc.
Je te soumets le tableau que je cherche à réaliser.
Vois si tu peux en tirer quelque chose,car,moi,je ne comprends rien à ce qui se passe.
Tu auras,peut-être une autre idée de code,et,l'essentiel est d'arriver au résultat désiré.

Merci aussi pour ta patience.
Cordialement
A plus

Bremic83


http://www.cijoint.fr/cjlink.php?file=cj201003/cijrtFmAsg.xlsm
0

 
Bonjour,
C'est très gentil, mais pour vous aidez j'ai besoin du classeur qui fonctionnait et non pas ce classeur sans macro !
0
Bremic83
 
Re LePingou
Voici l'envoi demandé.
A plBremic83

http://www.cijoint.fr/cjlink.php?file=cj201003/cijGi2cVq4.xlsm
0

 
Bonjour,
Merci c'est parfait.
Je viens de parcourir votre fichier et j'ai déjà découvert le problème.
La solution pour demain matin.
0

 
Bonjour,
J'ai un peu d'avance. Voir explication sur la feuille : https://www.cjoint.com/?djvLeMmSb6
0
Bremic83
 
Bonjour Le Pingou

Décidément,je collectionne les ennuis,
Impossible de décompresser le dossier ZIP.
J'opère de la même façon que d'habitude,je déplace le dossier,et à chaque fois,il reste ZIP
Celà m'est déjà arrivé une fois,et mon correspondant me l'a transmis en clair,essayons !

Cordialement

Bremic83
0

 
Bonjour,
Vous avez MSO 2007, alors enregistrer le fichier Zip sur le bureau, l'ouvrir et double clic sur le nom du classeur dans la partie de droite.
0
Bremic83
 
RE Le Pingou

Les manips indiquées,sont celles que je répète depuis hier soir,après réception de ce dossier ZIP
Plus celles-çi :
Menu (Démarrer)
Clicsur ( Aide et support)
Entrer "ZIP" dans textbox : " Recherches dans Aide "
Sélection " Compresser et décompresser des fichiers "ZIP "
Clic sur "Pour extraire les fichiers "

Et,j'en suis toujours au même point !

Désolé

Bremic83
0

 
Bonjour,
Qu'elle est votre système d'exploitation ?
Lorsque vous faite un double clic sur le fichier Zip qui est sur le bureau, que se passe-t-il ?
0

 
Bonjour,
Le voila transmis en clair : https://www.cjoint.com/?dkoHCF3qde
0
Bremic83
 
Bonsoir Le Pingou.

Tout d'abord,excusez moi de pratiquer le tutoiement,je n'avais pas remarqué que vous me vouvoyiez,plus absorbé par la teneur du texte que par la forme d'expression.Ne m'en tenez pas rigueur,SVP.
Je vous remercie de m'avoir expliqué comment débloquer le dossier ZIP,Je n'aurais pas trouvé celà tout seul.

Pour ce qui concerne le code,vous me dites l'avoir mis dans le feuillet tabatrans,et les deux actions se déroulent bien.
Je n'ai pas compris ce que vous avez fait,car je compare le code dans la fenêtre "Visualiser le code" dans l'onglet "développeur",et ne trouve aucun changement avec ce qui y était précédemment.
J'ai voulu mettre ce code dans l'un de mes classeurs,et je me retrouve avec l'erreur de compilation déjà rencontrée.
Dans le doute,j'ai regardé s'il y avait quelque chose dans les macros,sans rien y trouver.
Comment faut-il faire pour insérer la deuxième action ?
Vous le constatez,je suis loin de maitriser toutes les subtilités de l'informatique ,et je crains de lasser mes correspondants.
Encore merci pour votre patience.

A plus

Bremic83
0

 
Bonjour,
Alors vous n'avez pas lu attentivement l'explication sur la feuille (rectangle rose..).
Vous avez 2 procédures
1.- La procédure événementielle [Worksheet_SelectionChange] qui sur le module de feuille
2.- Aussi une autre procédure [MiseEnFormeColonne] qui est sur le module général [Modules]
Et c'est la 2 que vous oubliez de copier dans le nouveau classeur.
0
Bremic83
 
Bonsoir Le Pingou.

Après de nombreuses tentatives sans succès,je viens ,enfin,de comprendre le processus et de réussir la mise en place sur un classeur !
Le renouvellement de l'opération ne devrait pas poser de problème.

Très sincèrement,je vous remercie,pour votre gentillesse et,à nouveau pour votre patience,et ne me tenez pas trop rigueur,du temps que je vous ai mangé,par ma lenteur à comprendre.

Je ne sais si ce sera un plaisir pour vous,mais,moi,je serais très heureux de vous retrouver dans une nouvelle discussion,à l'occasion.

Très cordialement

Bremic83
0

 
Bonjour,
J'espère que ceci vous éclairera : https://www.cjoint.com/?dkwkEBashM
0