Code VBA pour tri a-z de liste déroulante qui augmente ?

Bonsoir à toutes et à tous.

J'ai créé sous Excel 2007 un petit fichier "Courrier.xlsm" comprenant une feuille "base de données" stockant les éléments d'adresses (nom, prénom, etc. ) et une feuille "page de courrier", où l'adresse s'installe toute seule dans sa fenêtre, par sélection du destinataire sur liste déroulante. Je l'ai amélioré en ajoutant une plage de saisie des nouveaux correspondants, dont les données s'enregistrent automatiquement, par un "bouton de commande", en incrémentant la fin de la base.

Pour faciliter la recherche dans la liste déroulante, j'ai souhaité automatiser le tri des noms de A à Z.

Mais quand j'ai voulu créer la macro, que ce soit en mode "Références relatives" ou pas, le code généré spécifie une plage "End(xlDown)" et "End(xlToRight)", qui malheureusement reste identique à chaque nouvelle exécution, et les adresses ajoutées ne sont pas triées.

Qui voudrait bien "tenir la main" à un très très vieux débutant ?

D'avance, grand merci ! Cordialement,

Georges JOP

bonsoir,

merci de joindre ton fichier (avec quelques données anonymisées)

Bonjour monsieur le "chimiste" so4h2, et merci de t'intéresser à mon cas.

Voici mon chantier. J'ai protégé la feuille "Matrice" pour que l'utilisateur final n'écrive pas n'importe où, mais il n'y a pas de mot de passe pour l'instant.

Puis-je profiter de l'occasion pour une question annexe : l'écran tressaute durant l'enregistrement. Je sais qu'on peut le figer pendant l'exécution du code, je l'ai déjà fait, puis j'ai oublié ... Ahhhh, les vieux et Alzheimer !!!

A bientôt, j'espère, cordialement

Georges Jop

24courrier.xlsm (51.13 Ko)

bonjour Georges jop, h2so4 et le forum

pour le tressautement essaie ceci

Application.ScreenUpdating = False
  Application.EnableEvents = False

a mettre en début de code et mettre la même chose en bas du code mais en changeant

false par true

Pascal

Merci, Grisan29, je vais essayer tout de suite !

Si j'en juge par ton avatar ... Serais-tu amateur d'ébénisterie ???

Bonne journée

Georges

P.S. En attendant la résolution de mon problème principal, je pense que je ne dois pas utiliser la "coche verte" ?

bonjour,

tri ajouté dans ta macro

45courrier.xlsm (51.43 Ko)

Bonjour au Forum, à Grisan29, à h2so4, et bravo pour vos rapides et efficaces réponses !

Ça maaaarche !!!

À mon âge, je n'attendais plus rien sous le sapin, https://forum.excel-pratique.com/posting.php?mode=smilies&f=2# un grand merci à mes deux Pères Noël !

Bonnes fêtes à tous.

Georges

bonjour georges jop

tu dits

Si j'en juge par ton avatar ... Serais-tu amateur d'ébénisterie ???

je suis en réalité un ancien ébéniste maintenant reconverti en pose de cuisines

tu pourrai essayer de retirer quasiment tout les .select de ton code afin de l'alléger un peu comme ceci

' Enregistre la ligne de coordonnées
    ActiveCell.Offset(0, 2).Range("A1").FormulaR1C1 = "=Adresse1"
    ActiveCell.Offset(0, 1).Range("A1").FormulaR1C1 = "=Adresse2"
    ActiveCell.Offset(0, 1).Range("A1").FormulaR1C1 = "=CodeVille"
    ActiveCell.Offset(0, 1).Range("A1").FormulaR1C1 = "=Pays"
    ActiveCell.Offset(0, 1).Range("A1").FormulaR1C1 = "=Fixe"
    ActiveCell.Offset(0, 1).Range("A1").FormulaR1C1 = "=Portable"
    ActiveCell.Offset(0, 1).Range("A1").FormulaR1C1 = "=Civilité"
    ActiveCell.Offset(0, 1).Range("A1").FormulaR1C1 = "=Prénom"
    ActiveCell.Offset(0, 1).Range("A1").FormulaR1C1 = "=Nom"

Pascal

bonjour Pascal,

l'instruction activell.cells(0,1).range("A1") pointera toujours vers la même cellule si tu ne mets pas de select

voici une autre proposition de simplification, (non testée)

' Enregistre la ligne de coordonnées
with    ActiveCell.Offset(0, 2)
   .Range("A1").FormulaR1C1 = "=Adresse1"
    .Range("B1").FormulaR1C1 = "=Adresse2"
    .Range("C1").FormulaR1C1 = "=CodeVille"
    .Range("D1").FormulaR1C1 = "=Pays"
    .Range("E1").FormulaR1C1 = "=Fixe"
    .range("F1").FormulaR1C1 = "=Portable"
    .Range("G1").FormulaR1C1 = "=Civilité"
    .Range("H1").FormulaR1C1 = "=Prénom"
    .Range("J1").FormulaR1C1 = "=Nom"
end with

bonjour h2so4

oups!!!! j'ai oublié, j'ai mis la modification brute merci pour la piqure de rappel, de toute façon il y a d'autres .select mais il faudrai faire référence a la feuille

Pascal

Bonsoir grisan29 et h2so4,

O.K. je vais tester la "cure d'amaigrissement", et vous dirai mes progrès.

Bonne soirée

Georges

Bonjour Grisan29 et h2so4

Passé Noël, j'ai essayé la formule With ... End With, "pour alléger le code".

Ça ne fonctionne pas, le programme ne bogue pas, mais la ligne n'enregistre que des zéros.

Pas grave, l'important c'est que vous m'avez donné les codes qui me manquaient, merci !

Bon "bout d'an", comme disent les provençaux, et à l'an prochain sur le site !

Georges

Rechercher des sujets similaires à "code vba tri liste deroulante qui augmente"