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

  1. #1
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 71
    Points : 41
    Points
    41
    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 éclairé 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
    Points : 879
    Points
    879
    Par défaut
    bonjour DeamonRav,

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

  3. #3
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 71
    Points : 41
    Points
    41
    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 éclairé 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
    Points : 879
    Points
    879
    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 du Club
    Inscrit en
    Mars 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 71
    Points : 41
    Points
    41
    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 régulier
    Profil pro
    Inscrit en
    Novembre 2009
    Messages
    104
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2009
    Messages : 104
    Points : 101
    Points
    101
    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

  7. #7
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 71
    Points : 41
    Points
    41
    Par défaut
    Bonjour Bugzy,

    Je me suis inspiré de ta méthode sur mon code qui me permettait déjà d'insérer des lignes et ça fonctionne parfaitement...

    Merci beaucoup,

  8. #8
    Membre du Club
    Inscrit en
    Mars 2010
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Mars 2010
    Messages : 71
    Points : 41
    Points
    41
    Par défaut
    Bonjour à vous,

    Euh finialement, après plusieurs test j'ai noté un petit souci pour la comparaison...

    Le contenu des cellules que je dois comparer est du type "01 01 01" il y a donc des espaces (que je ne peux pas supprimer...

    J'avais commencé par comparer les 2 premiers chiffres comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For i = 2 To .Range("A1:A65536").End(xlDown).Row
        If StrComp(Left(Ttb_Codedéchet, Len(Ttb_Codedéchet.Value) - 6), Left(.Range("a" & i).Value, Len(.Range("a" & i).Value) - 6), vbBinaryCompare = -1) Then
             r = i
        End If
    Next i
    Malheureusement cela ne marche pas et il va jusqu'à la fin de la boucle à chaque fois!
    Savez-vous comment faire pour comparer des chiffres d'une chaine de texte?

+ 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