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 :

Trier un tableau après avoir insérer une ligne! [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 71
    Par défaut Trier un tableau après avoir insérer une ligne!
    Bonjour à tous les developpez,

    J'ai un tableau dans lequel j'ai la possibilité d'insérer des lignes. J'aimerais par la suite pouvoir le trier...

    Pour le moment, je ne sais pas comment définir mon tableau, Car après avoir lu la FAQ à ce sujet, je ne comprends pas ce qu'est un tableau à plus de 3 dimensions?

    En ce qui concerne le tri du tableau je pensais mettre ceci en application, mais comme mon tableau n'est pas défini... Excel m'annonce une erreur de type 1004 "Pas de cellules correspondantes"

    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
    Dim monTableau As Range
     
        With Worksheets("Données MEDECO Type").Range("A:IV")
     
            Set c = .Find("CODE Déchet", LookIn:=xlValues, Lookat:=xlWhole)
     
            If Not c Is Nothing Then
     
                Set monTableau = ActiveSheet.Range(c.Address).CurrentArray
                monTableau.Sort Key1:=Range(c.Address), Order1:=xlAscending, header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
                Set monTableau = Nothing
            End If
            Set c = Nothing
     
        End With
    D'avance merci pour vos réponses.

    DeamonRav

  2. #2
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour DeamonRav,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Set monTableau = Range("A1").CurrentRegion

  3. #3
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 71
    Par défaut
    Bonjour Isabelle,

    J'ai pris en compte ta modification:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Dim monTableau As Range
     
        With Worksheets("Données MEDECO Type").Range("A:IV")
                Set monTableau = .Range("A2").CurrentRegion
                monTableau.Sort Key1:=Range("A:A"), Order1:=xlAscending, header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
                Set monTableau = Nothing
        End With
    J'en ai aussi profité pour retirer la recherche qur la première ligne puisque je sais que je tri par rapport à la première colonne...

    Mais il m'indique cette fois une erreur de type 1004 "référence de tri non valide"... Peut-être sais-tu pourquoi?

  4. #4
    Membre émérite Avatar de sabzzz
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 748
    Par défaut
    bonjour DeamonRav,

    la valeur de Key1 ne doit pas être une colonne,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monTableau.Sort Key1:=Range("A2"), Order1:=xlAscending, header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal

  5. #5
    Membre confirmé
    Inscrit en
    Mars 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 71
    Par défaut
    bonjour Isabelle,

    Et bien j'ai essayé avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    monTableau.Sort Key1:=Range("A2"), Order1:=xlAscending, header:=xlYes, OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, DataOption1:=xlSortNormal
    mais sans résultat...

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2009
    Messages : 104
    Par défaut Une aute façon
    Bonjour deamonRav

    Si tu le veux, je te propose une autre solution.

    J'ai une série d'information reçus par un USERFORM. J'insère et je trie dans la même procédure. J'utilise le nom et le prénom en deuxième et troisième colonne pour faire le trie en premier et l'insertion par la suite.
    Ma première ligne se trouve à la ligne 14.

    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
                   'Calcul du nombre de ligne remplie
    NbLigne = Cells(Rows.Count, 2).End(xlUp).Row - 13
                     'Nom et prénom du USERFORM
    NomIns = TextBox1
    PrenomIns = TextBox2
     
    Select Case NbLigne
       Case Is = 0      'Si la liste est vide inscrire les données à la ligne 14
          Row = 14
          GoTo InsererDonnees:
       Case Is = 1            'Si la liste n'a qu'une seule entrée
          If (StrComp(NomIns, Cells(14, 2), vbTextCompare) = 1) Or _ 
            ((StrComp(NomIns, Cells(14, 2), vbTextCompare) = 0) And _
            ((StrComp(PrenomIns, Cells(14, 3), vbTextCompare) = 1) Or  _
            (StrComp(PrenomIns, Cells(14, 3), vbTextCompare) = 0))) Then
             Row = 15    'Le nouvel employe est placé a la deuxième place
             GoTo InsererDonnees:
          Else
             Row = 14
             GoTo InsererDonnees:
          End If
       Case Is >= 2
          For i = NbLigne + 13 To 14 Step -1
              If (StrComp(NomIns, Cells(i, 2), vbTextCompare) = 1) Or _
                  ((StrComp(NomIns, Cells(i, 2), vbTextCompare) = 0) And _
                 ((StrComp(PrenomIns, Cells(i, 3), vbTextCompare) = 1) Or _
                 (StrComp(PrenomIns, Cells(i, 3), vbTextCompare) = 0))) Then
                 Row = i + 1
                 GoTo InsererDonnees:
              End If
              If i = 14 Then
                 Row = 14
                 GoTo InsererDonnees:
              End If
          Next i
    End Select
     
    InsererDonnees:  'A ce point, j'ai le numéro de ligne (Row) auquel je dois insérer mon nouvel emoployé
     
    'Si tu veux ma méhode d'insertion, tu n'as qu'à demander   
     
    Application.EnableEvents = False

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

Discussions similaires

  1. [WD-2002] Insérer une ligne à la fin d'un tableau
    Par Wanaka dans le forum VBA Word
    Réponses: 2
    Dernier message: 12/05/2009, 07h31
  2. Réponses: 3
    Dernier message: 26/02/2009, 14h08
  3. [RegEx] Insérer une ligne toutes les n lignes dans un tableau
    Par guidav dans le forum Langage
    Réponses: 5
    Dernier message: 09/07/2008, 15h12
  4. [Tableau] Insérer une ligne dynamique à un tableau statique
    Par michaeljeru dans le forum Général JavaScript
    Réponses: 8
    Dernier message: 11/06/2008, 10h38
  5. [Tableaux] Insérer une ligne au début d'un tableau
    Par WagaSeb dans le forum Langage
    Réponses: 5
    Dernier message: 20/06/2007, 12h13

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