Forum Clubic

Besoin d'aide sur excel

Bonjour à tous,

Tout d’abord je précise que j’utilise excel 2003
Je débute en macros excel et je souhaiterais réaliser la fonction suivante.

Je souhaite implémenter un bouton (ça ça va, j’ai compris comment faire ;-)) qui me trierait automatiquement des données avec pour condition que une cas de la ligne soit non vide.
Je m’explique pour éclaircir un peu les choses.

Admettons que j’ai un tableau de deux colonnes et de 100 lignes.
La première colonne est entièrement remplie, la deuxième contient des cases vides.
Je voudrais donc trier la première colonne par ordre alphabétique mais seulement pour les lignes contenant quelquechose en colonne B.

J’espère avoir été clair.

Merci d’avance

Bonne soirée

Tu peux donner un exemple sur une dizaine de lignes ?

Je ne sais pas faire avec un bouton… Mais, avec les fonctions :
Tu crées une 3ème colonne qui sera la concatenation des colonne B et A en remplaçant le contenu de la colonne B quand elle est vide par un point (.).
Exemple :
Dans la cellule C1 :
=SI(B1="";CONCATENER(".";A1);CONCATENER(B1;A1))

Puis tu reportes C1 dans toutes les cellules C.

Puis tu tries sur la colonne C

Bonjour et merci pour vos votre intérêt.

Pour un exemple (je vous le donne avec trois colonnes, mais le principe est le même) :

Tableau de départ

Bureau Table 2
Cuisine Four
Bureau Chaise 4
Salon Canapé 1
Cuisine Evier 1
Bureau Ordinateur

Ce que j’aimerai lorsque je clique sur mon bouton c’est (si ça se copie dans une autre feuille c’est encore mieux mais bon, je pourrais sûrement m’en sortir pour ça):

Bureau Table 2
Bureau Chaise 4
Cuisine Evier 1
Salon Canapé 1

voilà, merci encore !
Edité le 07/05/2010 à 10:14

Salut

Sélectionner la plage de cellules ou le tableau
Faire : Menu Données -> Trier
Dans le formulaire mettre :
trier par : colonne 3 Croissant
puis par : colonne 2 Décroissant
puis par : [rien du tout]
Les lignes du tableau ou il n’y a rien dans la colonne 3 apparaissent en fin de tableau.

++

Merci,

Cependant je suis plus à la recherche de code VBA, j’aimerais inclure cela dans un programme plus long.
Je débute mais j’ai quelques notions en prog (java notamment).

Mon soucis n’est pas vraiment le “rendu” en lui même, j’aurais du le préciser, mais plus d’acquérir quelques réflexes en Excel/VBA.

De plus, ta méthode permet effectivement de mettre à la fin les lignes où il n’y a rien en colonne 3, mais la colonne 1 n’apparaît pas triée dans l’ordre alphabétique.
En effet, tu imposes en premier une condition sur la colonne 3, et le tri de l’autre colonne se fait donc après classement des chiffres.
On aura alors selon l’exemple :

Bureau Chaise 4
Bureau Table 2
Cuisine Evier 1
Salon Canapé 1

L’exemple est mal choisi, je m’en rends compte puisque ça fonctionne ;-), mais je pense que tu vois ce que je veux dire.

Mais merci quand même pour l’intention :wink: !
Edité le 07/05/2010 à 12:18

C’est encore moi
J’ai réussi…
Pour ceux que ça intéresse, ma macro donne ça :

Je ne sais pas par contre si c’est “joli” d’un point de vue prog (j’en doute), mais ça fonctionne !

[i]Sub Feuil3_Bouton4_QuandClic()
Dim Lig As Long
Dim Col As String
Dim NbrLig As Long
Dim NumLig As Long

Sheets(“feuil2”).Activate ’ feuille de destination

Col = “C” ’ colonne où on a les valeurs à tester’
NumLig = 1 ‘numéro de la ligne de départ (-1) ’
With Sheets(“feuil3”) ’ feuille source’
NbrLig = .Cells(65536, Col).End(xlUp).Row
For Lig = 2 To NbrLig ‘n° de la 1ere ligne de données’
If .Cells(Lig, Col).Value <> “” Then
.Cells(Lig, Col).EntireRow.Copy
NumLig = NumLig + 1
Sheets(“feuil2”).Cells(NumLig, 1).Insert Shift:=xlDown
‘on colle dans la feuille d’arrivée’
End If
Next
End With

For i = Feuil2.Cells(1, 3).CurrentRegion.Rows.Count To 1 Step -1
If Feuil2.Cells(i, 3).Value = “” Then Feuil2.Cells(i, 3).EntireRow.Delete
Next

Feuil5.Cells.Select
Selection.Sort Key1:=Range("A1"), Order1:=xlAscending, Header:=xlGuess, _
    OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom, _
    DataOption1:=xlSortNormal
    'on trie'

End Sub
[/i]

:jap::jap:

C’est pour supprimer les lignes qui n’auraient pas de valeur dans la colonne C ?
Pourtant, normalement, il ne devrait pas y en avoir :

Mais là tu dois avoir un petit problème :
Cells(Lig, Col) attend deux arguments numériques.
Or toi tu as Col = “C” …