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 :

Référence unique numéro de ligne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2019
    Messages : 101
    Par défaut Référence unique numéro de ligne
    Bonjour à tous,

    Problème probablement très facile à régler:

    J'ai actuellement un fichier partagé dans mon entreprise (je sais que ce support n'est pas l'idéal mais bon…) dans lequel les utilisateurs remplissent un formulaire.

    Ma colonne A renvoie une référence grâce à ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dligne = Range("A15000").End(xlUp).Row 'Va chercher la derni?re ligne du tableau
    Cells(Dligne + 1, 1) = Cells(Dligne, 1) + 1 'prends le N? de la derni?re ligne +1 de la colonne 1

    Celui-ci prends la Ref de la ligne précedente et y ajoute +1 pour avoir des numéros uniques. Cependant, les utilisateurs ont la fâcheuse tendance de sauter des lignes parfois… Ce qui renvoie les références à 0...



    J'ai voulu créer un code pour donner comme référence le numéro de la ligne, et jusqu'ici ça donne ça:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Nligne()
    Dligne = Range("A1000").End(xlUp).Row
     
    Cells(Dligne + 1, 1) = Rows(Dligne + 1).Value
     
    End Sub

    Comme vous vous en doutez, cela ne fonctionne pas... Auriez-vous des pistes pour adapter ce code ?

    Merci,
    Mickamax

  2. #2
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mickamax Voir le message
    Bonjour,

    Et en récupérant à chaque fois, le max de la colonne ?

  3. #3
    Expert confirmé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Juillet 2014
    Messages
    2 680
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Santé

    Informations forums :
    Inscription : Juillet 2014
    Messages : 2 680
    Par défaut
    Bonjour
    pour donner comme référence le numéro de la ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Dligne = Range("A1000").End(xlUp).Row
    Cells(Dligne + 1, 1) = Dligne + 1

  4. #4
    Membre Expert Avatar de Thumb down
    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2019
    Messages
    1 574
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Juin 2019
    Messages : 1 574
    Par défaut
    bonjour,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Private Sub Worksheet_Change(ByVal Target As Range)
     Target.Parent.Cells(Target.Row, "A")=Target .Row
    End Sub

  5. #5
    Membre confirmé
    Homme Profil pro
    Étudiant
    Inscrit en
    Janvier 2019
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Aude (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Biens de consommation

    Informations forums :
    Inscription : Janvier 2019
    Messages : 101
    Par défaut
    Merci à tous pour votre aide,
    J'ai opté pour la solution de Halaster08 qui s'approchait le plus de mon code d'origine…

    @eric Kergresse: Ta solution est probablement la plus optimisée pour avoir forcément des références qui se suivent de 1 en 1... Ce qui ne sera pas le cas ici puisque les utilisateurs risquent toujours de sauter des lignes, mais enfin le problème est moindre qu'avant ma demande.

    J'ai réfléchi à la façon de définir la cellule avec la valeur max et j'avoue que pour ma culture personnelle j'aimerai bien savoir quelle technique est la plus simple. Du peu d'expérience que j'ai je vois deux solutions:

    - Utiliser la function Max+1. Mais est-il possible de variabiliser une fonction avec VBA par rapport à la dernière ligne ?

    - Faire une boucle sur toutes mes cellules en colonne 1, stocker la cellule avec la plus forte valeur, et pour chaque cellule dans ma boucle tester si la valeur > la valeur stockée, le cas échéant la valeur de ma cellule prends la place de la valeur stockée…



    Mickamax

  6. #6
    Invité
    Invité(e)
    Par défaut
    Citation Envoyé par Mickamax Voir le message
    A tester
    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 Test()
     
        MsgBox NumeroChantier(Sheets("Feuil2"), 1)
     
     
    End Sub
     
     
    Function NumeroChantier(ByVal ShSuivi As Worksheet, ByVal ColonneNumero As Long) As Long
     
      NumeroChantier = WorksheetFunction.Max(ShSuivi.Columns(ColonneNumero)) + 1
     
    End Function

  7. #7
    Inactif  

    Homme Profil pro
    cuisiniste
    Inscrit en
    Avril 2009
    Messages
    15 374
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : cuisiniste
    Secteur : Bâtiment

    Informations forums :
    Inscription : Avril 2009
    Messages : 15 374
    Billets dans le blog
    8
    Par défaut re
    bonsoir
    peut être empêcher toute tentative de sauter une ligne
    si je comprends bien ton énoncé le formulaire c'est une plage de cellules
    donc exemple en considérant que le formulaire c'est la plage A1:E10
    dans le module de la feuille du formulaire
    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
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        Set plage = ActiveSheet.Range("A1:E10")    ' le formulaire est en A1:E10
        If Target.Count > 1 Then Exit Sub
        If Not Intersect(Target, plage) Is Nothing Then
            Set c = plage.Columns(1).Find("*", SearchDirection:=xlPrevious)
            If c.Row < Target.Row Or Target.Row = plage.Row Then
                Application.EnableEvents = True
                If WorksheetFunction.CountBlank(c.Resize(1, plage.Columns.Count)) <> 0 Then
                    plage.Cells(c.Row, 1).Select
                Else
                    plage.Cells(c.Offset(1).Row, 1).Select
                End If
            End If
        End If
        Range(Selection.Address).Value = Val(Range(Selection.Address).Offset(-1).Value) + 1
        Application.EnableEvents = True
    End Sub
    Nom : demo3.gif
Affichages : 451
Taille : 430,8 Ko
    mes fichiers dans les contributions:
    mail avec CDO en vba et mail avec CDO en vbs dans un HTA
    survol des bouton dans userform
    prendre un cliché d'un range

    si ton problème est résolu n'oublie pas de pointer : : ça peut servir aux autres
    et n'oublie pas de voter

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 07/04/2017, 09h37
  2. Rajouter les numéros de ligne dans une colone d'une requete
    Par AntiSAL dans le forum MS SQL Server
    Réponses: 7
    Dernier message: 02/11/2005, 19h07
  3. Méthode donnant le numéro de ligne d'un Memo contenant un texte
    Par kilinette dans le forum Composants VCL
    Réponses: 3
    Dernier message: 25/06/2004, 10h16
  4. [DomAST] Numéro de ligne d'un noeud
    Par Satch dans le forum Eclipse Platform
    Réponses: 1
    Dernier message: 30/03/2004, 10h15
  5. [JSP] Affichage numéro de ligne d'une exception
    Par PhoneKilleR dans le forum Servlets/JSP
    Réponses: 12
    Dernier message: 23/09/2003, 14h59

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