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 :

Formule ou fonction vba renvoyant le premier numéro de ligne selon critère [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Chargé de projets stratégie et organisation
    Inscrit en
    Janvier 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chargé de projets stratégie et organisation
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Formule ou fonction vba renvoyant le premier numéro de ligne selon critère
    Bonjour à tous,

    Je n'arrive pas à trouver la solution au problème posé ci dessous:

    J'ai en colonne A une liste de code. Certains possèdent en 5ème position un "/".

    Selon le modèle ci dessous, je voudrais, pour chaque ligne où l'on retrouve le"/" en 5ème position que la colonne B me donne le nombre de cellules ou de lignes au dessus et adjacentes qui possèdent le "/" en 5ème position.
    De la même façon, la colonne C me renverrait le nombre de cellules ou de lignes mais en dessous et adjacentes.


    A B C
    xx RIEN RIEN
    2016/5645 0 2
    2016/5645 1 1
    2016/5645 2 0
    xx RIEN RIEN
    x/x RIEN
    2016/5645 0 1
    2016/5645 1 0
    xxf/ RIEN

    J'imagine que ça doit être possible via une formule matricielle mais je n'y suis pas arrivé.
    Idem VBA, j'ai pensé compter la plage sélectionnée jusqu'à interruption du critère (Do while?) mais pas les connaissances nécessaires .

    Merci pour votre aide.

    Cordialement

  2. #2
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonsoir,
    les données de la plage en A2, C & autant que tu veux, titres en ligne 1
    un exemple entre autres
    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
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    Sub test()
    Dim Dcel As Range, N As Long, x As Long, y As Long
      With Sheets("Feuil1")
        Set Dcel = .Range("A" & .Rows.Count).End(xlUp)
        For y = Dcel.Row To 2 Step -1
          N = 0
          If Mid(.Range("A" & y), 5, 1) = "/" Then
            For x = y - 1 To 1 Step -1
              If Mid(.Range("A" & x), 5, 1) = "/" Then
                N = N + 1
              Else
                Exit For
              End If
            Next x
            If N = 0 Then
              .Range("B" & y) = 0
            Else
              .Range("B" & y) = N
            End If
          Else
            .Range("B" & y) = "RIEN"
          End If
        Next y
        '---colonne C
        For y = 2 To Dcel.Row
          N = 0
          If Mid(.Range("A" & y), 5, 1) = "/" Then
            For x = y + 1 To Dcel.Row
              If Mid(.Range("A" & x), 5, 1) = "/" Then
                N = N + 1
              Else
                Exit For
              End If
            Next x
            If N = 0 Then
              .Range("C" & y) = 0
            Else
              .Range("C" & y) = N
            End If
          Else
            .Range("C" & y) = "RIEN"
          End If
        Next y
      End With
    End Sub
    si beaucoup de lignes, passer par une variable tableau
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Chargé de projets stratégie et organisation
    Inscrit en
    Janvier 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chargé de projets stratégie et organisation
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 13
    Points : 6
    Points
    6
    Par défaut Thanks!
    Merci Casefayere ça fonctionne impec!

    Encore une petite question, si je voulais construire une "function" pour la colonne B ou C à renseigner dans chaque cellule pour que ce soit dynamique, comment devrais-je m'y prendre?


    Cordialement

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    je regarderai ce soir, là je n'ai pas le temps, avec ce que j'ai présenté, je pense que deux fonctions seront nécessaires, une pour col B une pour C
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Chargé de projets stratégie et organisation
    Inscrit en
    Janvier 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chargé de projets stratégie et organisation
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Ok merci beaucoup pour ton temps et ton aide

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    j'en suis là, fonctions personnalisées
    fonction pour col B
    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
    Function Slasch1(ByVal Target As Range) As String
     
    'Target représente la cellule à analyser
     
    Dim N As Long, x As Long, y As Long
    y = Target.Row
    N = 0
    For x = y To 2 Step -1
      If Mid(Cells(x, 1).Value, 5, 1) <> "/" Then
        Exit For
      Else
        N = N + 1
      End If
    Next x
    If N = 0 Then Slasch1 = "RIEN": Exit Function
    If N = 1 Then Slasch1 = 0: Exit Function
    Slasch1 = N - 1
    End Function
    fonction pour col C
    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
    Function Slasch2(ByVal Target As Range) As String
     
    'Target représente la cellule à analyser
     
    Dim N As Long, x As Long, y As Long, Dcel As Long
    y = Target.Row
    Dcel = Cells(Rows.Count, Target.Column).End(xlUp).Row
    N = 0
    For x = y To Dcel
      If Mid(Cells(x, 1).Value, 5, 1) <> "/" Then
        Exit For
      Else
        N = N + 1
      End If
    Next x
    If N = 0 Then Slasch2 = "RIEN": Exit Function
    If N = 1 Then Slasch2 = 0: Exit Function
    Slasch2 = N - 1
    End Function
    si tu ne veux pas que les résultats soient des "String" pour les chiffres, il suffit de l'enlever
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function Slasch1(ByVal Target As Range)
    à la place de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Function Slasch1(ByVal Target As Range) As String
    Pour choisir le signe en remplacement de "/"
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function Slasch1(ByVal Target As Range, Sep As String)
    ......
    ......
    For x = y To 2 Step -1
      If Mid(Cells(x, 1).Value, 5, 1) <> Sep Then
    ....
    ....
    Pour choisir le signe en remplacement de "/" et sa position
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Function Slasch1(ByVal Target As Range, Sep As String, P As Integer)
    .....
    .....
    For x = y To 2 Step -1
      If Mid(Cells(x, 1).Value, P, 1) <> Sep Then
    ......
    .....
    Dis-moi tout
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  7. #7
    Futur Membre du Club
    Homme Profil pro
    Chargé de projets stratégie et organisation
    Inscrit en
    Janvier 2016
    Messages
    13
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Chargé de projets stratégie et organisation
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2016
    Messages : 13
    Points : 6
    Points
    6
    Par défaut
    Merci,
    c'est exactement ce dont j'avais besoin.

    Top!

    Cordialement

  8. #8
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    j'en suis ravi et si tu veux me ravir un peu plus, regardes la dernière ligne de ma signature

    Bonne soirée
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

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

Discussions similaires

  1. [XL-2010] Problème avec fonction VBA pour extraire un numéro de téléphone
    Par Kanigui dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 15/11/2014, 16h38
  2. [XL-MAC 2011] Fonction VBA renvoyant le point le plus proche du point considéré
    Par tomgalileo dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/03/2012, 12h54
  3. Réponses: 2
    Dernier message: 19/04/2007, 13h54
  4. [VBA-E] sélection plusieurs lignes selon critères
    Par clairefranclieu dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 06/09/2006, 17h22
  5. Fonctions VBA renvoyant des tableaux dans Excel
    Par phil_75 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 20/08/2006, 00h19

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