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 :

Renvoyer la première et la dernière valeur non nulles d'une colonne [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 86
    Points : 51
    Points
    51
    Par défaut Renvoyer la première et la dernière valeur non nulles d'une colonne
    Bonjour à tous,

    Voilà, je cherche un code qui me renvoie la première puis la dernière valeur non nulle d'une partie d'une colonne (C16:C21).
    j'ai essayé find:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Set rng = feuil1!.(C16:C21).Find(x,LookIn:=xlValues, LookAt:=xlWhole).Offset(1, 0)
     
        strt = rng.Value
    et pour vlookup je n'arrive pas à préciser les différentes conditions.


    Merci déjà!

  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
    Bonjour Maude_84,

    Voici pour toi !

    EDIT : Ce code renvoi la première et dernière plage non-vide. Je n'avais pas compris...
    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
    Sub frt_lst_cell()
    Dim oRng_frt As Range
    Dim oRng_lst As Range
    Dim marange As Range
     
    With Worksheets("Feuil1")
        Set marange = .Range("C16:C21")
     
        'Range de la première cells non-vide
        Set oRng_frt = marange.Find("*", After:=marange.Cells(marange.Cells.Count), LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlNext)
     
        'Range de la dernière
        Set oRng_lst = marange.Find("*", LookIn:=xlValues, LookAt:=xlWhole, SearchDirection:=xlPrevious)
     
        MsgBox "First : " & oRng_frt.Address & " et Last : " & oRng_lst.Address
    End With
     
    End Sub
    N'hésite pas à revenir vers moi !

    Cordialement,
    Kimy
    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
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    voila comment j'ai fait perso
    Vu que Find s’arrêtera à à la première occurrence trouvée
    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
    Public Function Prems(ByVal RG As Range) As Long
    Dim X As Long
        For X = 0 To RG.Rows.Count
            If IsNumeric(RG.Cells(1).Offset(X, 0).Value) And (RG.Cells(1).Offset(X, 0).Value <> 0) Then
                Prems = RG.Cells(1).Offset(X, 0).Value
                    Exit For
            End If
        Next
     
    End Function
     
    Public Function Der(ByVal RG As Range) As Long
    Dim X As Long
        For X = RG.Rows.Count To R0 Step -1
            If IsNumeric(RG.Cells(1).Offset(X, 0).Value) And (RG.Cells(1).Offset(X, 0).Value <> 0) Then
                Der = RG.Cells(1).Offset(X, 0).Value
                    Exit For
            End If
        Next
     
    End Function
     
     
    Public Sub Test()
        Dim First As Long
        Dim Last As Long
            First = Prems(Sheets("Feuil1").Range("A1:A20"))
            Last = Der(Sheets("Feuil1").Range("A1:A20"))
        MsgBox "Le premier est " & First & " le dernier est " & Last
    End Sub
    ++

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Une autre piste avec fonctions Excel :
    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
     
    Sub Test()
     
        Dim Plage As Range
        Dim Texte As String
        Dim I As Integer
     
        Set Plage = Worksheets("Feuil1").Range("C16:C21")
     
        With WorksheetFunction
     
            Texte = "Plus grande valeur : " & .Max(Plage) & vbCrLf
     
            Texte = Texte & "Plus petite valeur : " & .Min(Plage) & vbCrLf
     
            For I = 1 To Plage.Count
     
                If .Large(Plage, I) <> 0 Then
     
                    Texte = Texte & "Plus grande valeur non nulle : " & .Large(Plage, I) & vbCrLf
                    Exit For
     
                End If
     
            Next I
     
            For I = 1 To Plage.Count
     
                If .Small(Plage, I) <> 0 Then
     
                    Texte = Texte & "Plus petite valeur non nulle : " & .Small(Plage, I)
                    Exit For
     
                End If
     
            Next I
     
        End With
     
        MsgBox Texte
     
    End Sub
    Hervé.

  5. #5
    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
    Mea culpa.
    Je n'ai pas compris le besoin fonctionnel !
    Aïe ! Aïe ! Aïe !
    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 !

  6. #6
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    JE ne connais pas forcément toujours toutes les fonctions , mais bon j'essaie de répondre avec mes moyens intellectuels . J'ai moins d’étoiles que toi :-)

    Je décompose les problèmes pour trouver quelque chose qui va et c'est sur que c'est pas forcément la meilleure solution mais ca reste faisable.

    mais j'ai noté ta soluce pour moi perso t'inquiètes c'est pas perdu :-p

  7. #7
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    JE ne connais pas forcément toujours toutes les fonctions , mais bon j'essaie de répondre avec mes moyens intellectuels . J'ai moins d’étoiles que toi :-)
    Je décompose les problèmes pour trouver quelque chose qui va et c'est sur que c'est pas forcément la meilleure solution mais ca reste faisable.
    mais Ashireon ne te fâche pas, si c'est à moi que tu t'adresse, sache que je ne t'ai absolument pas critiqué, j'ai simplement donné une solution parmi tant d'autres ! D'autant plus, que je n'ai pas testé ce que tu as posté, j'en laisse le soins à Maude et probablement que ça lui conviendra aussi !

    Hervé.

  8. #8
    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
    Citation Envoyé par Theze Voir le message
    mais Ashireon ne te fâche pas, si c'est à moi que tu t'adresse, sache que je ne t'ai absolument pas critiqué, j'ai simplement donné une solution parmi tant d'autres ! D'autant plus, que je n'ai pas testé ce que tu as posté, j'en laisse le soins à Maude et probablement que ça lui conviendra aussi !

    Hervé.
    Quel quiproquo dû à mon incompréhension !
    C'est à moi qu'il répondait sur le post que j'ai modifié en disant "Mea culpa" !

    Bref, je vous laisse le soin de prendre soin de notre chère Maude_84, qui trouvera son bonheur dans les différentes solutions que vous proposez !

    Cordialement,
    Kimy
    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 !

  9. #9
    Membre averti
    Homme Profil pro
    Responsable Maintenance
    Inscrit en
    Août 2012
    Messages
    478
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Responsable Maintenance

    Informations forums :
    Inscription : Août 2012
    Messages : 478
    Points : 442
    Points
    442
    Par défaut
    Oh ben suis pas faché. Du tout
    J'adore ce site et ses membres ils m'ont dépannés bien des fois.

    J'apprends tous les jours avec VBA/vb.net

    d'ailleurs faudrait que je me trouve une bricole a faire en vb.net je perds mes acquis j'ai rien fait depuis un an...

    Un jour j'aurai ma seconde étoile oui je l'aurai même si je suis pas à la MAAF. :-p

  10. #10
    Membre du Club
    Femme Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2013
    Messages
    86
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2013
    Messages : 86
    Points : 51
    Points
    51
    Par défaut
    Bonjour à tous,
    Merci Kimy_Ire, Ashireon, Theze pour votre aide.
    j'ai pu trouver mon bonheur dans vos différentes propositions.

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

Discussions similaires

  1. [XL-2007] donner la dernière valeur (non-nul) d'une colonne
    Par Micdewe dans le forum Excel
    Réponses: 3
    Dernier message: 27/01/2011, 16h05
  2. Réponses: 3
    Dernier message: 25/10/2010, 15h11
  3. Copier valeur non vide dans une colonne
    Par Toad08 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 25/03/2008, 21h40
  4. Dernière cellule non vide d'une colonne
    Par RéviAT dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/02/2008, 14h43
  5. nombre de valeurs non nulles dans une tables
    Par 080983 dans le forum SQL
    Réponses: 33
    Dernier message: 27/08/2007, 12h04

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