Comment associer trois macro différentes à chaque feuille

Bonjour

J'ai fait différents tableaux. le 1er dans la feuille N, le 2éme dans la feuille D et la 3ème dans la feuille M

Comment associé chaque VBA (qté 3) à la feuille N ou D ou M, sachant que les tableaux sont dans le même classeur.

Est ce possible ?

Cordialement

Merci

Bonjour,

donc vos trois tableaux sont dans le classeur, je suppose aussi que les trois feuilles y sont également ? C'est mieux comme cela tout est ensemble, mais votre classeur, lui, il est où ?

@ bientôt

LouReeD

re

c'est quoi il est où enregistré ? sur mon ordinateur

mdr3 - excel

Alors si c'est excel 2007

Bonsoir, et désolé,

c'était juste une façon "amusante" de vous demander de poster votre fichier. Voilà tout.

@ bientôt

LouReeD

Pas de pub ériiic ! Pas de pub !

Et puis, vous, qu'est-ce que vous faisiez là-bas ?

Je ne le dirais à personne...

@ bientôt

LouReeD

chuuut, tu vas attirer l'attention

@ bientôt

LouReeD

Bonjour

"Donc vos trois tableaux sont dans le classeur, je suppose aussi que les trois feuilles y sont également ? C'est mieux comme cela tout est ensemble, mais votre classeur, lui, il est où ?" Mille excuses mais je n'avais pas compris la subtilité. Je vous joins le classeur complet, effectivement c'est plus facile qu'un long discours.

Dans ce fichier je n'ai qu'un module VBA qui a les éléments qui correspondrais à la feuille N pour respecter les repères de colonne. les lettres de colonnes dans D et M ne correspondent pas toutes aux lettres de N. Peut être recopier le même module en modifiant pour les lettres de colonne pour être en adéquation avec D et M

Cordialement

Autrement peut être mon frère sur l'autre ligne

3palvadeau-2.xlsm (48.26 Ko)

Bonjour,

Peut être recopier le même module en modifiant pour les lettres de colonne pour être en adéquation avec D et M

tout à fait.
Comme tu utilises l'événement Change, chaque feuille doit avoir sa propre macro et son traitement.

Tu peux rendre ton code un peu plus compact :

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Or Target.Value = "" Then Exit Sub
    Application.EnableEvents = False
    ' MAJUSCULE
    If Not Intersect(Target, Union(Columns("D"), Columns("O"))) Is Nothing Then
        Target = UCase(Target)
    End If
    ' Nom Propre
    If Not Intersect(Target, Union(Columns("G"), Columns("L:M"), Columns("P"))) Is Nothing Then
        Target = WorksheetFunction.Proper(Target.Value)
    End If
    Application.EnableEvents = True
End Sub

Si besoin tu peux aussi le modifier pour qu'il traite plusieurs cellules en cas de collé de plages. Tu dis
eric

re

Ta ligne de code fonctionne, mais comment je procède pour insérer les macros pour chaque feuille.

Pouvez-vous me l'insérer dans le modèle joint ? Une autre petite chose, il arrive parfois que j'ai des métier en 1, 2 ou 3 mots ( ex : Tailleur De Pierres le mieux serait Tailleur de pierres). le problème c'est que toutes les 1ères lettres de chaque mot qui compose le métier se mette en majuscule. Y-a-t-il un moyen pour que seulement la 1ère lettre soit en majuscule

Cordialement

Merci

Comme il s'agit d'un événement feuille, il faut coller le code dans les modules des feuilles :

image

je te laisse adapter aux bonnes colonnes

8palvadeau-2.xlsm (51.07 Ko)

Une autre petite chose...
je t'ai fait une fonction personnalisée initialeMaj()
Tu peux aussi l'utiliser sur feuille, elle doit rester dans un module Standard.

Private Sub Worksheet_Change(ByVal Target As Range)
    If Target.Count > 1 Or Target.Value = "" Then Exit Sub
    Application.EnableEvents = False
    If Not Intersect(Target, Union(Columns("D"), Columns("O"))) Is Nothing Then
        ' MAJUSCULE
        Target = UCase(Target)
    ElseIf Not Intersect(Target, Union(Columns("G"), Columns("L"), Columns("P"))) Is Nothing Then
        ' Nom Propre
        Target = WorksheetFunction.Proper(Target.Value)
    ElseIf Not Intersect(Target, Columns("M")) Is Nothing Then
        ' initiale
        Target = initialeMaj(Target.Value)
    End If
    Application.EnableEvents = True
End Sub

Function initialeMaj(ch As String) As String
    If Len(ch) = 1 Then
        initialeMaj = UCase(ch)
    Else
        initialeMaj = UCase(Left(ch, 1)) & LCase(Mid(ch, 2))
    End If
End Function

eric

Bonjour

J'ai testé c’est super, tes explications sont du top. Un petit point sur lequel je n'ai pas fait attention c'est que dans les mariages, il existe en plus la colonne X, mais comment ajouter la colonne X car je viens de tomber sur le métier de l'épouse qui comporte 3 mots.

Ta formule : ElseIf Not Intersect(Target, Columns("N")) Is Nothing Then

' initiale

Cordialement et encore mille merci, je me suis régalé cet après midi avec les transcription des relevés N,M,D

Cordialement

Bonjour,

Sers-toi du réalisé comme modèle. Tu vois qu'on peut faire une Union() de colonnes pour appliquer le même traitement à plusieurs.
eric

Re,

j'ai essayé avec l'union au départ mais je pense que j'ai oublié des parenthèses puisque j'ai essayé de nouveau ce soir et ça marche

Merci à vous tous pour le travail fourni

Cordialement

C'est comme ça qu'on apprend.
plus ça rate, plus on a de chances que ça marche

Rechercher des sujets similaires à "comment associer trois macro differentes chaque feuille"