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

Excel Discussion :

ordre alphabétique et forcer majuscule après saisie dans ListObjects


Sujet :

Excel

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut ordre alphabétique et forcer majuscule après saisie dans ListObjects
    salut le phorum

    j'ai une macro qui me tri un tableau après mise à jour
    jusque là pas de problème
    par contre si je veux que la saisie soit en majuscule pas moyen
    voici mon code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
        With Me.ListObjects("BDD_CLIENTS")
     
            If Not Intersect(Target, .DataBodyRange.Columns(1)) Is Nothing Then
                .Range.Sort key1:=.Range.Cells(1, 1), order1:=xlAscending, Header:=xlYes
            End If
     
        End With
     
    End Sub
    voici ce que j'ai mis mais cela ne fonctionne pas cela plante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
            'If Not Intersect(Target, .DataBodyRange.Cells(1) Is Nothing Then
            '    .Range.value = UCase(.Range.value)
            'End If
    j'aimerai aussi qu'il teste si ce n'est pas un doublon et afficher un message dans ce cas et ne pas prendre en compte la saisie donc sortir de la boucle

    merci d'avance pour votre aide

    david

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    Bonjour
    L'objet ListObjects est une collection et est à traiter comme toute collection.
    Range n'est pas un membre de l'objet/collection ListObjects. Et donc --->>
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    .Range.value = UCase(.Range.value)
    n'a aucun sens et est incompréhensible.
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    merci de ta réponse Unparia

    mais pourrais tu être plus explicite ?

  4. #4
    Membre extrêmement actif
    Homme Profil pro
    aucune
    Inscrit en
    Avril 2016
    Messages
    7 563
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 82
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Avril 2016
    Messages : 7 563
    Points : 12 422
    Points
    12 422
    Par défaut
    mais pourrais tu être plus explicite ?
    oui. Et je l'ai déjà été --->>
    L'objet ListObjects est une collection et est à traiter comme toute collection.
    Ta question serait-elle : "comment manipuler les items d'une collection" ? (quelle que soit la collection) ...
    Je n'accepte pas de demande d' "amitié" individuelle. Tout développeur est pour moi un ami.
    Je n'ouvre AUCUN classeur tiers (avec ou sans macro ******). Ne m'en proposez donc pas .

    ****** : Non, non ... un classeur .xlsx ne "peut" par exemple et entre autres pas contenir un activex (de surcroît invisible) , "bien sûr" ...

    Il est illusoire de penser que l'on saurait exprimer valablement et précisément en un langage (rigide) de développement ce que l'on peine à exprimer dans le langage naturel, bien plus souple.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    139
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 139
    Points : 124
    Points
    124
    Par défaut
    tu es obligé de passer par un traitement vba ou autre.

    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
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    Option Explicit
     
    '*
    '* striEtMajuscule
    '* tri tableau et mise en majuscule
    '*************************
    Sub striEtMajuscule()
     
        Dim lo_tab As ListObject
        Dim r_Cel As Range
        '-------------------------
     
        Set lo_tab = Sheets("maFeuille").ListObjects("t_tab") ' t_tab nom donné au tableau structuré
     
        sTri_Table lo_tab, 1 ' tri colonne 1 du tableau lo_tab
     
        For Each r_Cel In lo_tab.ListColumns(1).DataBodyRange
            Debug.Print UCase(r_Cel.Value)
        Next
     
        Set lo_tab = Nothing
    End Sub
     
    '*
    '* sTri_Table
    '* ListObject : Lo concerné
    '* Col : Colonne sur laquelle sera appliquée le tri
    '**************************************************
    Public Sub sTri_Table(Tb As ListObject, Col As Integer)
        '---------------------------------------------------------
        Dim objCol As Range
        '---------------------------------------------------------
     
        'On sort si le nombre de colonnes du tableau est inférieur à la valeur
        'passée à la sous procédure.
        If Tb.ListColumns.Count < Col Then Exit Sub
     
        'Définit le champ à trier dans le tableau
        Set objCol = Tb.ListColumns(Col).Range
     
        With Tb.Sort
            'Supprime les tris existants
            .SortFields.Clear
            'Ajoute un nouveau tri
            .SortFields.Add objCol, xlSortOnValues, xlAscending, DataOption:=xlSortTextAsNumbers
            'Indique si la première ligne contient les en-têtes
            .Header = xlYes
            .Orientation = xlTopToBottom
            .SortMethod = xlPinYin
            'Applique le tri
            .Apply
        End With
    End Sub

  6. #6
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Salut

    Citation Envoyé par unparia Voir le message
    Bonjour
    L'objet ListObjects est une collection et est à traiter comme toute collection.[...]
    Dans le code fourni, il n'est pas question de ListObjectS, mais d'UN listobjet précis, celui nommé BDD_CLIENTS, qui possède bien une propriété Range (à ne pas confondre avec sa propriété DataBodyRange). ListObject.Range fait référence à la plage de l'entièreté du tableau structuré ( range("DBB_CLIENTS[#All]"), DataBodyRange faisant référence à la plage de données s'il y a des données (range("DBB_CLIENTS").

    @Munity: Dans ton message initial, tu parles de boucle, mais je ne vois pas de boucle dans ton code. Tu as intérêt à scinder ton code en procédures comme le montre WuKoDLaK . Tu appelleras ces procédures l'une après l'autre d'abord pour transformer en majuscules puis pour trier. Pour des raisons d'efficacité si tu saisis dans ton tableau "au kilomètre", je te déconseille de réaliser la mise en majuscules et le tri sur l'évènement Change, mais de le faire lorsque les saisies sont terminées.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    Bonsoir a tous les deux
    Et merci de vos reponses
    Oui effectivement la solution ideale serait de creer le code et de le valider avec un command button situe sur la feuille excel
    Mais j aurai preferer une mise a jour automatisee
    L utilisateur saisi le nouveau client appuie sur entree et la table se met a jour
    Tri
    Majuscule
    Controle et suppression si doublons

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut
    Bonjour !

    Une Table, un Tableau que d'aucun qualifie de structuré, est avant tout un objet (une collection) Range.
    Il est donc plus commode d'utiliser le vocabulaire classique, de base connu donc éviter celui (alambiqué) réservé au Tableau.
    Avec un tableau nommé Clients et quand même l'évènement Change cela pourrait donner :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Private Sub Worksheet_Change(ByVal R As Range)
      Dim P As Range, C As Range
      Set P = [Clients].Columns(1)
      If Not Intersect(R, P) Is Nothing And R.Count = 1 Then
        Application.EnableEvents = 0
        'colonne 1 du Tableau sans doublon
        If Application.CountIf(P, R) > 1 Then R = ""
        'tri croissant du tableau à partir de sa colonne 1
        [Clients].Sort P.Rows(0), Header:=1
      End If
      'colonne 1 du Tableau en majuscules
      For Each C In Range(P.Address): C = UCase(C): Next
      Application.EnableEvents = 1
    End Sub
    Remarques
    - une petite difficulté de ces tableaux :
    For Each C In [Clients].Columns(1) pose problème ; mais pas For Each C In [Clients[Titre1]] !
    - Avec un nombre de lignes très important, il vaudra mieux passer par un tableau (VBA)
    Fichiers attachés Fichiers attachés

  9. #9
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Salut.

    Citation Envoyé par OrDonc Voir le message
    Bonjour !

    Une Table, un Tableau que d'aucun qualifie de structuré, est avant tout un objet (une collection) Range.
    Il est donc plus commode d'utiliser le vocabulaire classique, de base connu donc éviter celui (alambiqué) réservé au Tableau.[...]
    Sans vouloir à tout prix polémiquer, je ne suis pas d'accord avec ce qui est dit ici. Je termine un tuto sur les tableaux structurés en VBA, et je montre dans ce tuto les avantages énormes à travailler avec les tableaux structurés (et a minima avec les "plages nommées" de ces tableaux). Et un tableau structuré n'est pas, même avant tout, un objet Range. C'est un objet ListObject qui possède des propriétés de type Range (parmi d'autres).

    Les problèmes évoqués par OrDonc sont avant tout issus d'une méconnaissance de la manipulation des références structurées en VBA. Il est possible par exemple d'utiliser les références structurées en VBA. On peut donc pointer vers Range("Tableau1[Colonne1]") par exemple.

    Je ne peux en tout cas personnellement que conseiller de travailler avec des tableaux structurés et des références structurées, que ce soit en Excel ou en VBA, plutôt qu'avec des plages classiques. Le code produit sera plus léger et surtout beaucoup plus stable
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  10. #10
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    bonsoir

    désolé pour ce retour rapide
    la solution de OrDonc est parfaite...

    cependant j'ai une question (je ne sais pas si c'est possible mais bon je tente....), lorsque j'ai un tableaux avec x colonnes
    comment lui dire de faire un change après la saisie d'une ligne complète
    colonne 1 a x, validation après saisie de la dernière colonne du tableau

    merci pour tout en tout cas

    david

  11. #11
    Membre averti
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    772
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France, Nord (Nord Pas de Calais)

    Informations forums :
    Inscription : Septembre 2007
    Messages : 772
    Points : 319
    Points
    319
    Par défaut
    Citation Envoyé par Pierre Fauconnier Voir le message
    Salut.

    Sans vouloir à tout prix polémiquer, je ne suis pas d'accord avec ce qui est dit ici. Je termine un tuto sur les tableaux structurés en VBA, et je montre dans ce tuto les avantages énormes à travailler avec les tableaux structurés (et a minima avec les "plages nommées" de ces tableaux). Et un tableau structuré n'est pas, même avant tout, un objet Range. C'est un objet ListObject qui possède des propriétés de type Range (parmi d'autres).
    quand ce tuto sera disponible ?
    faut il s'abonner quelque part pour être informé de sa disponibilité

  12. #12
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Salut.

    Citation Envoyé par munity Voir le message
    quand ce tuto sera disponible ?
    faut il s'abonner quelque part pour être informé de sa disponibilité
    Fin de semaine prochaine ou de la suivante, je pense. Il sera annoncé sur le portail Excel et dans cette discussion à laquelle tu peux t'abonner si tu le souhaites
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  13. #13
    Membre averti
    Profil pro
    Inscrit en
    Mai 2008
    Messages
    364
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2008
    Messages : 364
    Points : 350
    Points
    350
    Par défaut Re
    Re !
    Citation Envoyé par Pierre Fauconnier Voir le message
    Les problèmes évoqués par OrDonc sont avant tout issus d'une méconnaissance de la manipulation des références structurées en VBA ...
    Pierre, tu as un début de réponse ici.

  14. #14
    Responsable
    Office & Excel


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 122
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 122
    Points : 55 924
    Points
    55 924
    Billets dans le blog
    131
    Par défaut
    Citation Envoyé par OrDonc Voir le message
    [...]
    - une petite difficulté de ces tableaux :
    For Each C In [Clients].Columns(1) pose problème ; mais pas For Each C In [Clients[Titre1]][...]
    Il faut écrire For Each C in [Clients].Columns(1).Cells

    Au passage, avis personnel et donc subjectif, je n'aime pas du tout la notation [Clients] ou [A1]... (notamment parce qu'elle ne permet pas la saisie semi-automatique derrière, ne permettant dès lors pas d'obtenir la liste des méthodes/propriétés de l'objet, et/ou de bien comprendre que l'on utilise un Range).
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

Discussions similaires

  1. [AC-2007] MAJ liste déroulante FormA aprés saisie dans FormB
    Par popoliline dans le forum IHM
    Réponses: 6
    Dernier message: 30/11/2009, 18h25
  2. Remplacer un caractère après saisie dans TextBox
    Par melouille56 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 11/10/2007, 15h12
  3. Réponses: 11
    Dernier message: 17/03/2007, 20h17
  4. [VBA-E] afficher des données apres saisie dans cellule
    Par user0505 dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 14/04/2006, 14h04
  5. Refresh de page initiale après saisie dans une popup
    Par muppetshow dans le forum Général JavaScript
    Réponses: 7
    Dernier message: 16/03/2005, 12h21

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