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 :

Trouver la dernière ligne avec nombre positif


Sujet :

Macros et VBA Excel

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

    Informations forums :
    Inscription : Février 2011
    Messages : 61
    Points : 40
    Points
    40
    Par défaut Trouver la dernière ligne avec nombre positif
    * Bonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LastLine = Range("D65536").End(xlUp).Row
    Avec ca j'arrive à faire calculer la dernière ligne en colonne D.

    Mais moi ce que je veux c lui faire calculer un LastLinePositif,la dernière ligne pour laquelle j'ai un chiffre positif en colonne D qui est trier(de la ligne 20 à cette LastLinePositif j'ai des chiffres positif et après des negatifs).

    J'ai plusieurs onglets et donc j'en ai besoin pour la suite de ma macro.

    Merci pour votre aide

  2. #2
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    Fais une boucle Do... Loop avec un While ou un Until qui teste ta condition et un offset vers le haut pour passer à la cellule suivante.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Do While Range("D" & CStr(LastLine)).Value < 0
        LastLine = LastLine - 1
    Loop
    (pas testé)

  3. #3
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut recherche valeur positive
    Bonjour,

    Dans le même esprit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Public Sub essai()
    Dim c As Range
    Set c = Range("A1")
    Do While c.Value > 0
            Set c = c.Offset(1, 0)
            ligne = c.Row - 1
    Loop
    Debug.Print ligne
    End Sub
    Testé

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2011
    Messages
    61
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 61
    Points : 40
    Points
    40
    Par défaut
    Merci zazaraignée de m'avoir lu (il ya un bug sur la première ligne je ne vois pas où est l'erreur)

    Merci MarcelG ta macro marche bien
    si je peux me permettre une dernière petite chose
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("AP(ligne+1):APLastLine").Select
    ici j'ai ligne(la ligne que tu m'as aidé à calculer) et LastLine qui sont des variables dans ma boucle.

    Mais la syntaxe n'est pas bonne ça bug

    aurais-tu une idée ?

    Merci encore pour votre aide

    Par exemple si dans un onglet ligne=135 et Lastline=358 on a
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("AP136:AP358").Select
    J'aimerai juste intégrer ces variables la dedans

  5. #5
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 66
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut concaténation
    Bonsoir Andréas,

    Tu fais une erreur de concaténation.

    L'une des syntaxes pour désigner un objet Range
    est par exemple

    Il te faut donc rétablir ta chaîne de yexte, en respectant bien les doubles-cotes (")

    Donc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("AP" & (ligne + 1) & ":AP" & LastLine).Select
    exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Public Sub ESSAI()
    ligne = 10
    LastLine = 20
    Range("AP" & (ligne + 1) & ":AP" & LastLine).Select
    End Sub
    Bien entendu, ligne et lastline sont à adapter à ton cas

  6. #6
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    En supposant que la cellule active est dans la colonne qui nous intéresse :
    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
    Function DerniereLignePositive(colonne As Integer) As Long
        Dim ligne As Long
        ligne = Feuil1.Rows.Count
        ligne = Range(Chr(colonne + 64) & CStr(ligne)).End(xlUp).Row
        Do While Range(Chr(colonne + 64) & CStr(ligne)).Value < 0
            ligne = ligne - 1
        Loop
        DerniereLignePositive = ligne
    End Function
     
    Sub SelectionnerDernierePositive()
        Dim ligne As Long
        ligne = DerniereLignePositive(ActiveCell.Column)
        Range(Chr(ActiveCell.Column + 64) & CStr(ligne)).Select
    End Sub
    Si tu souhaites sélectionner toute la ligne, Il faut ajouter un EntireRow avant le Select :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
        Range(Chr(ActiveCell.Column + 64) & CStr(ligne)).EntireRow.Select
    Code testé, cette fois-ci.

  7. #7
    Expert éminent
    Avatar de Qwazerty
    Homme Profil pro
    La très haute tension :D
    Inscrit en
    Avril 2002
    Messages
    3 906
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France

    Informations professionnelles :
    Activité : La très haute tension :D
    Secteur : Service public

    Informations forums :
    Inscription : Avril 2002
    Messages : 3 906
    Points : 8 539
    Points
    8 539
    Par défaut
    Salut
    Oula Zaza, y'a Cells
    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
    Function DerniereLignePositive(Colonne As Integer) As Long
        Dim ligne As Long
        With Feuil1
            ligne = .Cells(.Rows.Count, Colonne).End(xlUp).Row
            Do While .Cells(ligne, Colonne).Value < 0
                ligne = ligne - 1
            Loop
        End With
        DerniereLignePositive = ligne
    End Function
     
    Sub SelectionnerDernierePositive()
        Dim ligne As Long
        ligne = DerniereLignePositive(ActiveCell.Column)
        Cells(ligne, ActiveCell.Column).Select
    End Sub
    Pourquoi ne pas faire une boucle For each, ce serait plus élégant non ?
    [Edit]
    Ou encore, comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Function DerRangePositiv(Colonne As Range) As Range
     
    With Colonne
        If .Worksheet.AutoFilterMode Then .Worksheet.AutoFilterMode = False
        .AutoFilter 1, ">0"
        Set DerRangePositiv = .Cells(.Rows.Count, 1).End(xlUp)
        .Worksheet.AutoFilterMode = False
    End With
     
    End Function
     
    Sub essaiLP()
    DerRangePositiv(Feuil1.Columns("A")).Select
    End Sub
    [/Edit]
    ++
    Qwaz

  8. #8
    Expert confirmé
    Avatar de zazaraignée
    Profil pro
    Étudiant
    Inscrit en
    Février 2004
    Messages
    3 174
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2004
    Messages : 3 174
    Points : 4 085
    Points
    4 085
    Par défaut
    @ Qwazerty
    Ouaip!
    Comme on dit chez nous : « T'as pas tort, mon pétard » (en québécois vulgaire, le ort de tort et le ard de pétard se prononcent pareil, identique, semblable commac, quoi! Ça se dit toujours, commac (ou k, sais plus) ? )

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

    Informations forums :
    Inscription : Février 2011
    Messages : 61
    Points : 40
    Points
    40
    Par défaut
    encore dsl pour le retard
    j'ai pu tester ca que maintenant et ca marche très bien c exactementr ce que je voulais
    Merci à vous tous.

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

Discussions similaires

  1. Comment trouver la dernière ligne de mon tableau?
    Par thenico35 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 03/03/2009, 14h35
  2. trouver la dernière ligne
    Par ghosty04 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/12/2008, 17h33
  3. [MySQL] sélection des dernières lignes avec affichage aléatoire
    Par nabmoah dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 08/08/2008, 23h57
  4. [VBA-E] Trouver la dernière ligne vide
    Par electrosat03 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 23/01/2007, 20h11
  5. [VBA-E]comment trouver la dernière ligne contenan
    Par couscoussier dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 23/03/2006, 16h53

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