Inventaire - trier une liste de cotes "Lettre/chiffres/chiffre"

  • Initiateur de la discussion Initiateur de la discussion GTriv
  • Date de début Date de début

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

GTriv

XLDnaute Nouveau
Bonjour,

J'ai excel 2011 sur Mac et j'aurai besoin d'un peu d'aide..
Je suis confronté à un problème de tri dans mon inventaire de documents. Je souhaiterais classer mes lignes
selon leur cote.
Les cotes sont de deux types : A et B.
Et de ce format :
A/23/1
A(ou B)/24(numéros du document)/1(ou2 = nombre de supports (VHS, CD, etc) physiques par document).

Le problème étant que par ligne (donc par document), il peut y avoir plusieurs cotes, ex : colonne B (cote) ligne 4 "A/13/1 ; B/124/2"
Je souhaiterais classer ces différentes lignes d'inventaire :
par lettres (A, B), par numéros de documents, et ce sans tenir compte du dernier chiffre (le nombre de support physiques, sachant qu'il peut ne pas être mentionné). Et il s'agirait de ne prendre en compte dans ce tri que de la première cote ("A/13/1" prenant le pas sur "B/124/2", dans l'exemple précédent)
Pour obtenir potentiellement des choses de cet ordre :
A/1/1
A/2/1
A/2/2
A/3
A/13/1
A/134/1
A/134/2
A/245/1 ; B/123/1
A/423/1 ; A/423/2 ; A/425/1 ; B/144/1
A/426
A/450
A/455/1

Les différentes colonnes de mon inventaire sont : Cote, Cote de numérisation, Titre, Nature du document, date, lieu, auteur, réalisateur, interprètes / intervenants, informations complémentaires, Nombre de supports physiques, Localisation des documents, Nombres de fiches descriptives.

J'espère que quelqu'un saura m'aider à trouver une solution.

Bien cordialement,

GTriv
 
Re : Inventaire - trier une liste de cotes "Lettre/chiffres/chiffre"

Je tiens à remercier PierreJean pour s'être penché sur mon problème et Christian pour son betatesting.
J'ai regardé la macro, qui m'a l'air parfaite (je n'y comprends rien). Et en effet, le bouton ne marche pas sur simple clique. Y a t il quelque chose à faire pour que le bouton marche sur un simple clique ?
 
Re : Inventaire - trier une liste de cotes "Lettre/chiffres/chiffre"

Problème résolu ! La macro fonctionne parfaitement. Il s'agit d'un problème de compatibilité entre les boutons pc et mac.
Il suffit de recréer le bouton sous mac et d'y affecter la macro de PierreJean.

Merci beaucoup pour votre aide !

Bonne continuation.

GTriv
 
Re : Inventaire - trier une liste de cotes "Lettre/chiffres/chiffre"

Alors, j'ai quand même une dernière question.
Je cherche maintenant à adapter la macro à mon tableur d'inventaire. J'ai importé la macro.
Il s'agit maintenant d'incorporer à la macro le fait que ma première cellule à trier est le B28, mon tableau
allant jusqu'à la colonne N et jusqu'à la ligne 631.
Quelles modifications dois-je apporter dans l'éditeur visual basic ?
Voici la macro de PierreJean :
Code:
Option Base 1
Sub classe()
'definir la 1ere ligne a partir de laquelle on effectue le tri
lig_deb = 2
Dim tabres
For n = lig_deb To Range("A" & Rows.Count).End(xlUp).Row
 If InStr(Range("A" & n), ";") <> 0 Then
    x = Split(Range("A" & n), ";")
    For m = LBound(x) To UBound(x)
      For p = LBound(x) To UBound(x)
        If Trim(x(m)) < Trim(x(p)) Then
          temp = x(m)
          x(m) = x(p)
          x(p) = temp
        End If
      Next p
    Next m
  For Z = LBound(x) To UBound(x)
    zz = zz & Trim(x(Z)) & " ; "
  Next Z
  Range("A" & n) = Left(zz, Len(zz) - 3)
  zz = ""
 End If
Next n

tablo = Range("A" & lig_deb & ":A" & Range("A" & Rows.Count).End(xlUp).Row)
ReDim tabres(UBound(tablo, 1), 3)
For n = 1 To 3
  Columns(2).Insert
Next
For n = LBound(tablo, 1) To UBound(tablo, 1)
 x = Split(tablo(n, 1), "/")
  For m = LBound(x) To UBound(x)
    If m < 3 Then tabres(n, m + 1) = Trim(x(m))
  Next m
Next n
Range("B" & lig_deb).Resize(UBound(tabres, 1), 3) = tabres

ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Clear
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("B" & lig_deb & ":B" & Range("B" & Rows.Count).End(xlUp).Row) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("C" & lig_deb & ":C" & Range("B" & Rows.Count).End(xlUp).Row) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    ActiveWorkbook.Worksheets("Feuil1").Sort.SortFields.Add Key:=Range("D" & lig_deb & ":D" & Range("B" & Rows.Count).End(xlUp).Row) _
        , SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal
    With ActiveWorkbook.Worksheets("Feuil1").Sort
    ' adapter la derniere colonne du tri (ici colonne S
        .SetRange Range("A" & lig_deb & ":S" & Range("B" & Rows.Count).End(xlUp).Row)
        .Header = xlGuess
        .MatchCase = False
        .Orientation = xlTopToBottom
        .SortMethod = xlPinYin
        .Apply
    End With

Columns("B:D").Delete
End Sub
 
Re : Inventaire - trier une liste de cotes "Lettre/chiffres/chiffre"

Re

De l'inconvenient de travailler 'en l'air' (je fus bien bon de creer un fichier test (mais le poblème m'a plu !! ))
A priori et bien entendu sans garantie de resultat
Remplacer lign_deb=2 par lign_deb=28
Remplacer A par B , B par C , C par D
Le nombre de ligne devrait etre géré par la macro
 
Re : Inventaire - trier une liste de cotes "Lettre/chiffres/chiffre"

Bonjour,
Je me suis contenté de changer la ligne de départ (en 28) et j'ai supprimé la première colonne de mon
tableur (A) pour correspondre à votre macro. C'est, absolument, parfait.

Je vous remercie chaleureusement,

GTriv
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

N
  • Question Question
Réponses
13
Affichages
7 K
Retour