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 :

Recherche de l'avant dernier enregistrement dans une colonne !


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 51
    Par défaut Recherche de l'avant dernier enregistrement dans une colonne !
    Bonjour,
    Je n'ai que quelques notions en VBA. Créer des super UserForm, je sais faire, les faire vivre est un autre monde. Alors voilà:
    Je suis des vols d'avions, j'ai donc des numéros d'aéronef dans une colonne et leur numéro de vol à chaque nouvelle sortie dans une colonne située à côté.
    J'aimerai, lorsque je sélectionne sur mon UserForm via un ComboList, mon numéro d'avion, remonter au vol précédent pour afficher dans un TxtBox le numéro du dernier vol. Ainsi, je pourrai dans un autre TxtBox incrémenté mon nouveau vol de 1.
    Auriez-vous s'il vous plaît une idée ou peut-être connaissez-vous sur le forum, un post précédent, de ce genre ?
    Cordialement.

  2. #2
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Tu trouves la ligne correspondant à ton avion avec un Find en partant de la fin et en utilisant un SearchDirection:=xlPrevious.
    https://msdn.microsoft.com/fr-fr/lib.../ff839746.aspx
    Ensuite (après avoir fait un test pour vérifier que ton Find était fructueux), tu attrapes le numéro de vol avec un Offset.
    https://msdn.microsoft.com/fr-fr/lib.../ff840060.aspx

  3. #3
    Membre averti
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 51
    Par défaut
    Merci pour ce retour. À l'étranger pour le moment, il m'est difficile de répondre en temps et en heure mais je m'y atèle du mieux que je peux. Je vais tester tout cela cet après-midi et me permettrai d'apporter et commenter les résultats. Ca me semble en tout cas, une excellente idée.
    Je ne peux que dire bravo. J'espère penser VBA un jour 😉
    À bientôt.

  4. #4
    Expert confirmé Avatar de BENNASR
    Homme Profil pro
    Responsable comptable & financier
    Inscrit en
    Décembre 2013
    Messages
    2 962
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Responsable comptable & financier
    Secteur : Finance

    Informations forums :
    Inscription : Décembre 2013
    Messages : 2 962
    Par défaut
    Bonjour à tous
    partant du principe que la colonne A est réservé pour le nom des avions
    et colonne B pour le numéro des voles
    Que tu as un userform avec un combobox et deux textbox (un pour le dernier numéro et un pour le prochain numéro
    pour ça tu peux entreprendre de la façon suivante sachant que je suis un débutant en VBA et qu'il y a des solution meilleures que celle la
    bonne continuation
    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
    Dim dernLigne As Long
    Private Sub ComboBox1_Change()
    Dim plage As Range
    Set plage = Sheets("feuil1").Range("A2:A" & [A65536].End(xlUp).Row)
    codrecherché = ComboBox1.Value
    For Each Cell In plage
     If Cell.Value = codrecherché Then
    TextBox1.Value = Cells(Cell.Row, 2)
    End If
        Next Cell
     TextBox2.Value = TextBox1.Value + 1
    End Sub
     
    Private Sub CommandButton1_Click()
    Unload UserForm1
    End Sub
     
    Private Sub UserForm_Initialize()
    dernLigne = Sheets("feuil1").Range("A" & Rows.Count).End(xlUp).Row
    Dim i As Integer
    dernLigne = Sheets("feuil1").Range("A" & Rows.Count).End(xlUp).Row
    For i = 2 To dernLigne
      ComboBox1 = Sheets("feuil1").Range("A" & i)
      If ComboBox1.ListIndex = -1 Then ComboBox1.AddItem Sheets("feuil1").Range("A" & i)
    Next i
    TextBox1.Value = ""
    TextBox2.Value = ""
    End Sub

  5. #5
    Membre averti
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 51
    Par défaut
    Bien le bonjour,

    Oui il est tôt mais je tenais à répondre à vos message.
    Et bien un grand merci à vous deux. Menhir pour m'avoir permis de lire et découvrir la bibliothèque Microsoft MSDN. Riche d'enseignement au point que j'en ai presque fait mon livre de chevet. J'ai découvert tant de chose ne serait-ce que que l'objet Range !!! Un grand merci.
    Et merci à BENNASR qui avec une partie de son code a pu m'ouvrir les yeux.
    Finalement cette petite partie a suffit dans le code de mon bouton "Valider" à répondre à mes attentes.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim plage As Range
    Set plage = Sheets("Source1").Range("B2:B" & [A65536].End(xlUp).Row)
    codrecherché = cboAvion.Value
    For Each Cell In plage
    If Cell.Value = codrecherché Then
    TxtVolPrecedent.Value = Cells(Cell.Row, 3)
    End If
    Next Cell
    TxtNumVol = format((Val(TxtVolPrecedent.Value) + 1), "0")
    À ce propos, l'instruction Val je ne l'ai pas vraiment compris et de plus, je l'ai vraiment trouvée par hasard.

    Encore bravo et à bientôt à vous deux et d'autres j'espère 😉

  6. #6
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Tony4152 Voir le message
    Menhir pour m'avoir permis de lire et découvrir la bibliothèque Microsoft MSDN.
    Elle est accessible depuis ton éditeur VBA simplement en appuyant sur F1 après avoir placé ton curseur sur le terme souhaité.

    Pour info, toute ta boucle For Each (et son contenu) pourrait être remplacé par une seule ligne en utilisant un Find (voir mon post précédent).

    Pour la fonction Val() : https://msdn.microsoft.com/fr-fr/lib.../gg264296.aspx

  7. #7
    Membre averti
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 51
    Par défaut
    Merci Pour le retour Menhir.

    En gros je pourrai tenter cela ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    With This WorkBook.Sheets("Source1").Range ("B2:B" & [B65536].End(xlUp).row)
        Find(cboAvion.value, xlByRow, xlPreviews, MatchCase:= true)
            TxtVolPrecedent.Value = Cells(Cellrow, 3)
    End With
    txtNumVol = Format(Val(txtVolPrecedent.Value) + 1), "0")
    Je tenterai demain, si ça fonctionne et bien en effet cela fait quelques lignes de code en moins 😊

    Je vais voir pour l'instruction Val.

    Je continue sur mon projet de suivi des vols journaliers, et je suis confronté à d'autres soucis, tu t'en doutes bien et notamment celui-ci.
    Les heures de vols sont en centièmes. J'ai donc créé une case txt heure centième (nommée txtHHC) où à chaque changement dans cette case, il se passe un événement dans la case txt heure/minutes/secondes (nommées txtHHM) située juste après sur le UserForm.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub txtHHC_Change
    txtHHC.Value = Replace(txtHHC.Value, ".", ",") ´ je transforme les points en virgule
    txtHHM.Value = Format((txtHHC.Value / 24), "hh:mm:ss") ' je remplace heures centièmes en heure minute
    End Sub
    Cela fonctionne mais !
    Primo si je rentre une valeur autre que des chiffres où le point où la virgule, j'ai une erreur que j'aimerai ignorer
    Secundo, lorsque j'ai saisi dans mon txt centième la valeur, si je fais à nouveau le focus dessus avec ma souris pour changer totalement la valeur avec la touche BackSpace du clavier, et bien à la suppression de tous les caractères, il me sort une erreur de type.
    Je peux aller avec ma souris dans la case et changer un chiffre mais en aucun cas je ne peux tout y supprimer via cette fameuse touche BackSpace. À savoir que je n'ai pas essayer la touche Supp 🤔 !
    Je ne sais pas trop si je suis assez clair là ?
    De plus j'ai limité à 4 le nombre de caractère via les propriétés du TxtBox ! Est ce qu'il y aurait une incidence à cela ?

  8. #8
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    Citation Envoyé par Tony4152 Voir le message
    With This WorkBook.Sheets("Source1").Range ("B2:B" & [B65536].End(xlUp).row)
    ThisWorkbook, ça s'écrit en un seul mot.

    Poser des questions dans un sujet marqué Résolu, ce n'est pas une bonne idée si l'on espère des réponses.

    Pense à baliser ton code (icone # de l'éditeur).

  9. #9
    Membre averti
    Homme Profil pro
    Autre
    Inscrit en
    Mars 2017
    Messages
    51
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Haute Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Autre
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2017
    Messages : 51
    Par défaut
    Ah oui en effet. Je vais réouvrir une discussion alors 🙃
    Merci pour ces infos. Je suis pas un pro 😐

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

Discussions similaires

  1. [Toutes versions] Recherche du dernier numéro dans une colonne
    Par MP5078 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 11/07/2012, 12h59
  2. recuperer le dernier enregistrement dans une table
    Par l_achraf dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 29/04/2009, 10h38
  3. Réponses: 1
    Dernier message: 14/09/2007, 19h04
  4. dernier enregistrements dans une base
    Par ac/dc dans le forum Administration
    Réponses: 2
    Dernier message: 13/02/2007, 12h45
  5. [VB6] Allez en avant dernier enregistrement d'une table acce
    Par bb62 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 10/02/2006, 16h42

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