IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Appliquer une macro sur certaines colonnes [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut Appliquer une macro sur certaines colonnes
    Bonjour,

    J'ai une macro stockée dans mon classeur de macro personnel que j'applique sur certain fichier.

    Cette macro s'applique sur la sélection active au moment du lancement de la macro, mais je souhaiterai que celle-ci se lance et applique les arguments sur les valeurs de la colonnes : "B" "E" et "F".

    Voir même mieux, sur les colonnes dont l'entête (en ligne 1) est : "Nom", "Adresse 1" et "Adresse 2".

    "B" correspondant au "Nom"
    "E" correspondant au "Adresse 1"
    "F" correspondant au "Adresse 2"

    Je précise que mes connaissances sont très minime.

    Merci beaucoup d'avance à vous tous.

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    1) Pose le code avec la balise "[CODE]", ca nous permettra de savoir où se situe ton problème ou, peut-être encore mieux, ajoute un fichier exemple.

    2) Ta macro s'applique sur toutes les colonnes de ta feuille active, c'est ça ? Tu souhaites continuer à utiliser cette macro depuis cette feuille ou pouvoir la réaliser sur tout ton classeur d'un seul coup ?

    La fonction "With Worksheets("ma feuille")" te permet de cibler une feuille précise.

    3) Enfin, si ta macro s'applique bien à toute tes colonnes, tu peux utiliser la fonction "Find" qui te permet de chercher l'entête d'un colonne puis d'appliquer ce que tu veux faire sur celle-ci.

    Mais... puisque
    Je précise que mes connaissances sont très minime.
    je te propose de nous donner le fichier exemple ou ton code qui nous permettront, peut-être, de t'aider d'avantage !
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Salut Kimy,

    Voila mon code, il met en majuscule la sélection active au moment de son lancement.

    Il faut que je sélectionne les bonnes colonnes à chaque fois, mais il s'agit toujours des mêmes colonnes a mettre en majuscule.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub Mise_en_Maj()
     
    ' Mettre en MAJUSCULE la sélection Macro
     
    Dim Cel As Range
    Dim Plage As Range
    Set Plage = Intersect(Selection, ActiveSheet.UsedRange)
    If Plage Is Nothing Then Exit Sub
    For Each Cel In Plage
        Cel = UCase(Cel)
    Next Cel
    End Sub
    Il s'agit donc de mettre en majuscule les valeurs de mes colonnes :

    - Nom
    - Adresse 1
    - Adresse 2

    Et si possible en revanche ne pas mettre en majuscule les entêtes ...........

    Merci beaucoup pour ton aide, c'est super sympa.
    Julien

    Non non ma macro s'applique juste sur 3 des 12 colonnes de mon classeur.

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Je te propose le code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub Mise_en_Maj()
    Dim Cel As Range
    Dim Plage As Range
    Dim test As Range
    Dim nme(1 To 3) As String
     
    nme(1) = "Nom"
    nme(2) = "Adresse 1"
    nme(3) = "Adresse 2"
     
    With Worksheets("Feuil2")
        For i = LBound(nme()) To UBound(nme())
            Set test = .Rows(1).Find(nme(i), LookIn:=xlFormulas, lookat:=xlWhole)
            Set Plage = .Range(test.Offset(1, 0), .Columns(test.Column).Find("*", , , , xlByColumns, xlPrevious))
            If Plage Is Nothing Then Exit Sub
            For Each Cel In Plage
                Cel = UCase(Cel)
            Next Cel
        Next i
    End With
    End Sub
    1) Met à la place de "Feuil2" le nom de ta feuille (tu pourras de cette manière utiliser ta macro depuis n'importe quel onglet de ton classeur).

    2) J'ai supposé que tes entêtes étaient sur la ligne 1. Si ce n'est pas le cas, change ".Row(1)" par la ligne sur laquelle elles sont bien placées.

    3) Enfin, si tu souhaites (au cas où) augmenter le nombre de colonnes que tu veux caster en MAJ, change la dimension de ton tableau "nme(1 To 3)" au nombre de valeurs que tu veux en ajoutant un "nme(4) = "Adresse 3" " (par exemple).

    Dis moi si cela te convient.
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  5. #5
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 379
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 379
    Points : 12 075
    Points
    12 075
    Billets dans le blog
    8
    Par défaut heu...
    bonjour
    si j'ai bien compris tu veu metre en majuscule certaine colonnes
    si tu connais les colonnes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    Sub Mise_en_Maj()
     
    ' Mettre en MAJUSCULE la sélection Macro
     
    Dim Cel As Range
    Dim Plage As Range
    Set Plage = Intersect(Selection, ActiveSheet.UsedRange)
    If Plage Is Nothing Then Exit Sub
    For Each Cel In Plage
       select case Cel.column 
    case 1,3,5,8'ici les cellule en colonnes1 3 5 et 8 fesant partie de ta selection subiront le changement 
    Cel = UCase(Cel)
    end select 
    Next Cel
    End Sub
    au plaisir
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut


    Super merci !!!!!

    Juste une dernière chose, ma feuille ne s'appel jamais pareil il faut donc que la macro s’exécute sur la feuille active.

    Car mon fichier comme ma page s'appel tt deux : ERP_EXP_fournisseurs_20121127

    En vert : ma base identique chaque jour
    En rouge : la variable (date de l'export)

    Encore un grand merci pour cette aide précieuse.

    Amicalement,
    Julien

  7. #7
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Appliquer directement sur la feuille active :

    With Worksheets("Feuil2") => With ActiveSheet

    Bonne continuation à toi !
    La logique :
    • Plus ya de gruyère, moins ya de gruyère.
    • Plus tu pédales moins vite, moins tu avances plus vite.
    Plusoyer les réponses pertinentes et n'oublier pas de résolver en fin de post !

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Salut a tous,

    Le code que me propose Kimy_Ire me convient parfaitement, mais je voudrais juste y modifier une petite chose.

    Je ne souhaite pas que le code s'applique sur la "feuille 2", mais sur la feuille active du classeur.

    Je ne peux pas la nommer dans mon code puisque cette feuille change en partie de nom tt les jours ( ERP_EXP_fournisseurs_20121127 )

    La première partie : ERP_EXP_fournisseurs_ étant identique chaque jour.
    Mais la seconde ici 20121127 change chaque jour. (Date en AAAAMMJJ)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    Sub Mise_en_Maj()
    Dim Cel As Range
    Dim Plage As Range
    Dim test As Range
    Dim nme(1 To 3) As String
     
    nme(1) = "Nom"
    nme(2) = "Adresse 1"
    nme(3) = "Adresse 2"
     
    With Worksheets("Feuil2")
        For i = LBound(nme()) To UBound(nme())
            Set test = .Rows(1).Find(nme(i), LookIn:=xlFormulas, lookat:=xlWhole)
            Set Plage = .Range(test.Offset(1, 0), .Columns(test.Column).Find("*", , , , xlByColumns, xlPrevious))
            If Plage Is Nothing Then Exit Sub
            For Each Cel In Plage
                Cel = UCase(Cel)
            Next Cel
        Next i
    End With
    End Sub
    Quelqu'un connait-il le terme ou code qu'il faut que je renseigne pour remplacer :
    With Worksheets("Feuil2")

    Merci
    Julien

  9. #9
    Futur Membre du Club
    Profil pro
    Inscrit en
    Février 2010
    Messages
    11
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 11
    Points : 8
    Points
    8
    Par défaut
    Re,

    encore merci a tous et surtout Kimy_Ire qui m'indique le code suivant :

    Remplace With Worksheets("blabla") par With ActiveSheet

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/08/2017, 16h55
  2. Réponses: 1
    Dernier message: 11/02/2011, 14h14
  3. [VBA Excel] Appliquer une macro sur une celulle contenant une valeur
    Par tchauviere dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 21/01/2008, 10h21
  4. [VBA-Word] appliquer une macro sur un groupe de document
    Par perophron dans le forum VBA Word
    Réponses: 22
    Dernier message: 11/06/2007, 18h27
  5. [VBA-E] Comment appliquer une macro sur plusieurs cellules
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/01/2007, 10h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo