Vous utilisez un navigateur obsolète. Il se peut que ce site ou d'autres sites Web ne s'affichent pas correctement. Vous devez le mettre à jour ou utiliser un navigateur alternatif.
Dans ce fichier, j'aimerais avoir dans un module, une petite macro qui rangera mes plantes par ordre croissant quand il y aura un rajout d'une nouvelle plante ( nouvelle ligne)
la colonne à mettre en ordre croissant, c'est la colonne F et à partir de F27. Bien sur, j'espère que cela ne mélangera pas les données à côté.
Pouvez-vous me mettre le code dans votre message si au cas ou je n'arrive pas à ouvrir le fichier.
Le tri est fait par une autre méthode ; cette fois, j'ai testé, et ça marche !
Fais un essai : clique sur le bouton « Copier » ➯ ta nouvelle plante carnivore « Crocus
cracoucass (carnivorus) » a été ajoutée sous la dernière ligne du tableau, en ligne 470 ;
puis le tableau a été trié selon le nom de plante, par ordre croissant ➯ la ligne 470 a
été remontée en ligne 121 ; et ton « curseur » va devant cette ligne, en E121.
Essaye de me donner ton avis ... enfin, si tu es saine et sauve, et que tu ne t'es pas fait
bouffer par la plante cracoucass (c'est très dangereux, l'élevage des plantes exotiques,
surtout les plantes carnivores ! ).
De plus, tu avais oublié de mettre b à 1 dans cette partie :
VB:
If Not cel Is Nothing Then
lig = cel.Row: b = 1 'plante trouvée
C'est grâce à cela que plus bas, les instructions qui sont dans ce test : If b = 0 Then ... End If ne seront pas exécutées (et c'est bien ça
qu'il faut ! )
Je n'oublie pas la discussion du filtrage, mais ça va encore tarder car
je suis encore très pris par des choses diverses (persos), et d'autres
exos du forum ; aussi, je m'en occuperai dès que je pourrai.
J'étais sur un autre exo, et j'viens d'voir ton post #20.
regarde la ligne Dim :
Dim cel As Range, plante$, lig&, b As Byte, i As Byte
1) tu peux voir que b est du type Byte (valeurs de 0 à 255)
2) quand la ligne Dim est exécutée, ça réserve de la place en mémoire (RAM)
pour les variables indiquées, et ça les initialise à une chaîne de caractères vide ("") pour les variables de type String ; à 0 pour les variables numériques (ceci
pour les variables locales d'une Sub ou d'une Function) ; donc pour b, il vaut
implicitement 0, sans que j'aie besoin de mettre explicitement b = 0.
3) donc b = 0 ; et c'est moi qui lui donne cette signification : quand b vaut 0,
ça veut dire que la plante n'a pas été trouvée.
4) maintenant, regarde cette partie de code :
VB:
Set cel = Columns(6).Find(plante, , -4163, 1, 1)
If Not cel Is Nothing Then
lig = cel.Row: b = 1 'plante trouvée
Else
a) l'instruction avec .Find cherche le nom de la plante dans la colonne F.
b) cel vaut Nothing (rien) si la plante n'a pas été trouvée, et dans ce cas,
ça exécute la partie du Else.
c) si au contraire la plante a été trouvée, cel est la cellule où le nom de la plante a
été trouvé, donc ça exécute : lig = cel.Row ➯ lig est le n° de la ligne de la cellule
de la plante trouvée ; et b = 1, pour indiquer que la plante a bien été trouvée ;
dans ce cas, ce sera une modification et pas un ajout en fin de tableau ; et ce ne
sera pas nécessaire de trier à nouveau le tableau puisque ça avait déjà été fait
au moment de l'ajout de cette plante (quand elle n'existait pas encore dans
ton tableau des plantes).
5) il aurait été possible de faire la même chose avec Dim b As Boolean : b est de
type Booléen, donc il est initialisé à False (Faux = 0) et je l'aurais mis à True (Vrai = -1) ; mais un Boolean est sur 2 octets alors qu'un Byte est sur 1 seul
octet ; plus bas, le test aurais été : If b = False Then ou If Not b Then.
à petite question, très longue réponse ; mais au moins, comme ça, tout sera clair !
enfin, j'espère ! (j'croise les doigts) ... quelle est ta question suivante ?
C'est bizarre, on dirait que tu n'as pas téléchargé le fichier du post #18 ;
tu as peut-être zappé ce post ? je t'ai retourné ton fichier Excel
"Création de Devis.xlsm".
dans mon fichier du post #11, il y a aussi : If b = 0 Then ... End If
attention : ne confonds pas le testIf b = 0avec une affectation de valeurb = 0
pour l'explication du testIf b = 0 : relis mon post #21 ; et en particulier le point 4) c) ;
car s'il s'agit d'une modification d'une ligne de plante (et non pas d'un ajout), ce sera inutile
de trier à nouveau T_Datas, et le testIf b = 0 permet justement d'éviter ce tri, ainsi que
la 2ème recherche de la ligne de la plante (car elle a été déplacée suite au tri) pour pouvoir se
placer devant : « curseur » en début de ligne, colonne E (donc ça aussi est évité).
note bien qu'en cas de modif, avec lig = cel.Row : lig contient bien déjà le bon n°
de ligne ; donc même alors que If b = 0 Then ... End If n'est pas exécuté : Application.Goto Cells(lig, 5), Trueplace bien le « curseur » au bon endroit.
ok, c'est le post #18, et donc le fichier "Création de Devis.xlsm" ;
dans ce fichier, en K5, il y a : « Abutilon x canadensis » ; dis-
moi, c'est pas une plante qui existe déjà dans T_Datas ? si oui,
indique-moi sur quelle ligne, car j'ai pas envie de chercher ça
à ta place !
Ce site utilise des cookies pour personnaliser le contenu, adapter votre expérience et vous garder connecté si vous vous enregistrez.
En continuant à utiliser ce site, vous consentez à notre utilisation de cookies.