VB | Excel - ajout conditionnel

Résolu/Fermé
Harry974 - 7 août 2008 à 14:32
 Harry974 - 8 août 2008 à 10:02
Bonjour,

voilà sous Excel j'ai une feuille "Liste noms et prénoms" avec dans la 1ere colonne les prénoms et la deuxième les noms, classé par ordre alphabétique par famille et ensuite les prenoms dans chaque famille le sont aussi.

Arthur Dupond
Lisette Ddupond
Benoit Gujot
Patricia Gujot
Etienne Sedat

j'ai créé une petite fenêtre Visual Basic avec deux champs : nom et prénom

si l'utilisateur saisit et clique sur valider, il faut que d'abord le prénom qu'il a saisi n'existe pas, même dans une autre famille, chaque prénom doit être unique dans toute la liste !

s'il n'existe pas, alors on peut le rajouter par ordre alphabétique.

Des exemples :
1) on ne peut pas rajouter Etienne Dupond car Etienne existe déjà.
2) si on rajoute Fanny Gujot, on pourra le faire et le nom se retrouvera entre Benoit et Patricia.


C'est possible de faire tout cela ? Ou avoir des idées pour approfondir ?
A voir également:

8 réponses

j'utilise Excel 2002 SP3 et Visual Basic 6.3 ...
0
m@rina Messages postés 20203 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 11 mai 2024 11 279
7 août 2008 à 16:07
Bonjour,

Je vais te donner le code à utiliser avec VBA, je pense que tu devrais t'y retrouver en VB.

Dans mon exemple, la colonne A contient les prénoms et la colonne B les noms.
Dans une Userform, on imagine 2 textbox (1 et 2) : la 1 pour entrer le prénom et la 2 pour entrer le nom. Plus un bouton de validation.

Private Sub CommandButton1_Click()
Range("A65536").End(xlUp).Offset(1, 0).Select

If Application.WorksheetFunction.CountIf(Range("A:A"), Me.TextBox1.Value) > 0 Then
MsgBox "ce prénom existe déjà"
Exit Sub
Else
ActiveCell.Value = Me.TextBox1.Value
ActiveCell.Offset(0, 1).Value = Me.TextBox2.Value

ActiveCell.CurrentRegion.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range_("A2"),Order2:=xlAscending, Header:=xlYes
End If

Unload Me
End Sub

m@rina
0
Merci de ta réponse,

j'ai essayé d'adapter à mon programme et j'obtiens une erreur : Sub ou Funtion non définie

ça bascule dans mon code VB et j'ai "Range_" qui est surligné en gris... peut être que cette fonction n'existe pas sous Excel 2002 ?
0
m@rina Messages postés 20203 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 11 mai 2024 11 279
7 août 2008 à 16:34
J'ai du mal à te répondre pour le VB pur que je ne connais pas... Je ne connais que le VBA et RANGE existe depuis longtemps, et en particulier sous Excel 2002.

Essaie peut être de préciser le classeur et la feuille :

Workbooks("monclasseur").Worksheets("mafeuille").Range("A65536").End(xlUp).Offset(1, 0).Select

Tu ne peux pas utiliser VBA ?

m@rina
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
oui je peux utiliser VBA.

j'ai mis en commentaire la ligne

ActiveCell.CurrentRegion.Sort Key1:=Range("B2"), Order1:=xlAscending, Key2:=Range_("A2"),Order2:=xlAscending, Header:=xlYes

et ça marche, si le prenom que je saisis existe déja il m'avertit. Est ce que cette ligne est importante ? A quoi sert-elle ?

seulement maintenant il reste mon deuxieme probleme, a savoir je veux insérer le nom non pas au debut ou a la fin mais là ou il y a le même nom dans la colonne B, et le mettre par ordre alphabétique comme je l'ai dit dan smon énoncé...

tu aurais une idée comment faire stp ?

merci pour tes réponses
0
m@rina Messages postés 20203 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 11 mai 2024 11 279
7 août 2008 à 17:17
Justement cette ligne de code sert à trier ! :D

Ce code trie la plage en cours, à condition que ta base soit créée correctement, qu'il n'y ait pas de lignes vides, etc. ça dépend de ton tableau.
Il trie alphabétiquement sur la 2e colonne (selon mon exemple) pour les noms (Key1), puis sur la première colonne pour les prénoms (Key2).

m@rina
0
autant pour moi ça marche c'est juste que j'avais bêtement oublié d'enlever le "_" après Range, le tri fonctionne super bien !

par contre un truc c'est que si la saisie est correcte il ajoute le nom et prenom dans la case active, qui est habituellement A1, comment faire pour qu'il aille au bout de la liste à la première cellule vide avant d'ajouter ..?
0
oups c'est bon une petite recherche sur le forum et j'ai pu trouvé une fonction ^^
merci encore pour ton aide à bientôt car je pense que j'aurai encore besoin d'aide pour d'autres trucs lol @+
0
m@rina Messages postés 20203 Date d'inscription mardi 12 juin 2007 Statut Contributeur Dernière intervention 11 mai 2024 11 279 > Harry974
8 août 2008 à 09:32
Bonjour,

Je comprends pas... Cette fonction était dans mon code:

Private Sub CommandButton1_Click()
Range("A65536").End(xlUp).Offset(1, 0).Select

m@rina
0
ah oui j'avais pas vu ça marche avec cette ligne merci ^^'
0