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
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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 ,...).
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 ,...).
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 ,...).