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 :

Passer un range en paramètre d'une procédure


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Chargée d'étude statistique
    Inscrit en
    Mars 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargée d'étude statistique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 25
    Par défaut Passer un range en paramètre d'une procédure
    Bonjour,

    J'ai créé un petit bout de code qui ajoute un saut à la ligne dans ma cellule.
    Ce code, ô joie, après plein d'essais sur la manière de signifier que je voulais la cellule A2, fonctionne.
    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
    Sub titre_renvoi_a_la_ligne(Cellule_titre As Range)
    'Ajoute un saut de ligne quand une parenthèse est trouvée dans la cellule passée en paramètre
     
        position_parenthese = InStr(1, Cellule_titre, "(")
        Cellule_titre.Value = Left(Cellule_titre.Value, position_parenthese - 2) & Chr(10) & Right(Cellule_titre.Value, Len(Cellule_titre.Value) - position_parenthese + 1)
     
    End Sub
     
     
    Sub Test_sautl()
        Dim position_parenthese As Long
     
        titre_renvoi_a_la_ligne Range("a2")
     
    End sub

    J'essaye maintenant d'industrialiser le tout (car il y a beaucoup de cellules dans lesquelles je dois ajouter ce saut à la ligne).
    Et, bien sur, ca ne marche point.
    Pourriez-vous m'éclairer ?
    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 MEF_Fiche_Reseau()
    'Mise en forme de la fiche au niveau DR
     
        Dim cellule, fiche As Range
     
        '2. MISE EN FORME selon la valeur des cellules
        Set fiche = ActiveSheet.UsedRange
     
        For Each cellule In fiche
                'Si titre : on encadre et passe à la ligne
                If (cellule.Value Like "ENCOURS*") Then
                    cellule.Offset(0, 0).Select
                    titre_renvoi_a_la_ligne cellule
                End If
        Next    
    End Sub
    Merci,
    Aline

    nb : si mon code est tout crapi, n'hésitez pas à me dire en quoi il l'est, ça m'aidera.

  2. #2
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonsoir Aline, bonsoir le forum,

    Ton code est bien ! Juste ta variable Cellule qui n'était pas déclarée correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    Sub MEF_Fiche_Reseau()
    Dim Cellule As Range, Fiche As Range
     
    Set Fiche = ActiveSheet.UsedRange
    For Each Cellule In Fiche
        If (Cellule.Value Like "ENCOURS*") Then titre_renvoi_a_la_ligne Cellule
    Next Cellule
    End Sub

    Quelques conseils (si j'ose, mais j'ose...) :
    1. Les Select sont a éviter autant que tu le peux. Ils ne font que ralentir l'exécution du code et sont source de nombreux plantages.
    2. Mets au moins une majuscule à tes variables. Quand tu codes tu écris tout en minuscule et quand tu valides la ligne, tes variables se réécrivent avec la majuscule. Ça permet de voir rapidement s'il n'y a pas eu une faute de frappe...
    3. Quand tu boucles, précise Next quoi... En cas de nombreuses boucles on s'y retrouve tellement mieux...

  3. #3
    Membre averti
    Femme Profil pro
    Chargée d'étude statistique
    Inscrit en
    Mars 2011
    Messages
    25
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Chargée d'étude statistique
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2011
    Messages : 25
    Par défaut
    Ah super ! Merci beaucoup , ça marche impecc'

    • C'est fou, j'étais convaincu qu'on pouvait mettre plusieurs éléments à la suite comme je l'avais fait et que ca les mettait tous en Range.
    • C'est noté pour la majuscule ! Et c'est top, quand on le corrige dans la déclaration, ca corrige partout !
    • Pour le SELECT, j'avais déjà vu sur ce forum (peut-être était-ce un de vos messages d'ailleurs ?) que c'était plus efficace. Quand je sais faire, j'évite le SELECT. Malheureusement mon niveau en VBA ne me le permet pas tout le temps.
    • Pour le NEXT, je ne savais même pas qu'on pouvait le faire. Quand la boucle est longue, je mettais un commentaire expliquant de la fin de quelle boucle il s'agissait.

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

Discussions similaires

  1. [Toutes versions] Passer un textbox en paramètre d'une procédure
    Par indox dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 02/05/2014, 19h28
  2. Réponses: 2
    Dernier message: 23/01/2012, 15h19
  3. Passer un tableau en paramètre d'une procédure
    Par redpulse dans le forum PL/SQL
    Réponses: 1
    Dernier message: 04/09/2008, 13h47
  4. Passer un curseur en paramètre d'une procédure
    Par tommy_f dans le forum Forms
    Réponses: 4
    Dernier message: 13/05/2008, 16h54
  5. Réponses: 2
    Dernier message: 03/12/2006, 12h37

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