OVH Cloud OVH Cloud

Insertion de ligne

1 réponse
Avatar
benjaminalimi
Bonjour,
J'ai une feuille excel qui contient plusieurs colonnes correspondant
differents types d'applications (type1, type2, ...) rangées par ordr
alphabétique.
Je souhaiterais pouvoir insérer une application dans la colonne qui lu
correspond (pour ca pas de probleme.) mais je voudrais qu'elle s'insèr
dans l'ordre alphabétique *sans modifier aucunement les autre
colonnes* (au niveau du tri, des lignes vides ,...).

Merci beaucou

--
benjaminalim
-----------------------------------------------------------------------
benjaminalimi's Profile: http://www.msusenet.com/member.php?userid=209
View this thread: http://www.msusenet.com/t-187091822

1 réponse

Avatar
PMO
Bonjour,

Ce que j'ai compris:
Vous avez un tableau dans lequel vous voulez effectuer
un tri de la colonne où un changement est intervenu sans
toucher à l'ordre des autres colonnes. Ce tri doit se faire
sans toucher aux lignes vides. Par exemple supposons
dans la colonne D figurent (j'ai pris des nombres mais
ça peut être des chaînes)
ligne 1 TYPE1
ligne 2 1
ligne 5 39
ligne 10 43
ligne 13 5
(les cellules des autres lignes sont vides)
après avoir entré 8 en D16 (par exemple) vous voulez obtenir
ligne 1 TYPE1
ligne 2 1
ligne 5 5
ligne 10 8
ligne 13 39
ligne 16 43

Si c'est bien l'objet de votre demande voici une solution en VBA
ATTENTION faites le test sur une coipe de votre classeur

1) En premier lieu adaptez les constantes suivantes
Public Const MAFEUILLE As String = "Feuil1"
Const LIGNE_DEPART As Long = 2
Remplacez "Feuil1" par le nom de la feuille concernée.
Si le tableau n'a pas de ligne de titres remplacez 2 par 1.

2) Copiez le code suivant dans un module standard
**********
'### A adapter ###
Public Const MAFEUILLE As String = "Feuil1"
Const LIGNE_DEPART As Long = 2
'#################

Sub PMO_tri(colonne As Long)
Dim R As Range
Dim COL As New Collection
Dim i&
Dim j&
Dim var
Set R = Range(Cells(LIGNE_DEPART, colonne), _
Cells(ActiveSheet.UsedRange.Rows.Count, colonne))
var = R
On Error GoTo Erreur
For i& = 1 To UBound(var, 1)
If Not IsEmpty(var(i&, 1)) Then
If COL.Count = 0 Then
COL.Add var(i&, 1)
Else
If var(i&, 1) > COL(COL.Count) Then
COL.Add var(i&, 1), after:=COL.Count
Else
For j& = 1 To COL.Count
If var(i&, 1) <= COL(j&) Then
COL.Add var(i&, 1), before:=j&
Exit For
End If
Next j&
End If
End If
End If
Next i&
Application.EnableEvents = False
j& = 0
For i& = 1 To UBound(var, 1)
If Not IsEmpty(var(i&, 1)) Then
j& = j& + 1
var(i&, 1) = COL(j&)
End If
Next i&
R = var
Erreur:
Set COL = Nothing
Application.EnableEvents = True
End Sub
**********

3) Copiez le code suivant dans ThisWorkbook
**********
Private Sub Workbook_SheetChange _
(ByVal Sh As Object, ByVal Target As Range)
If Sh.Name = MAFEUILLE Then _
Call PMO_tri(Target.Column)
End Sub
**********

Cordialement.

--
PMO
Patrick Morange




Bonjour,
J'ai une feuille excel qui contient plusieurs colonnes correspondant à
differents types d'applications (type1, type2, ...) rangées par ordre
alphabétique.
Je souhaiterais pouvoir insérer une application dans la colonne qui lui
correspond (pour ca pas de probleme.) mais je voudrais qu'elle s'insère
dans l'ordre alphabétique *sans modifier aucunement les autres
colonnes* (au niveau du tri, des lignes vides ,...).

Merci beaucoup


--
benjaminalimi
------------------------------------------------------------------------
benjaminalimi's Profile: http://www.msusenet.com/member.php?userid 92
View this thread: http://www.msusenet.com/t-1870918228