Obtenir une réponse à une question

Hervé 06

XLDnaute Nouveau
Bonjour a vous tous.

Ultra novice avec excel même si je l'utilise de manière simple, j'ai cru comprendre en lisant les post la grande manœuvrabilité de Excel.
Est-il possible de créer un module qui en l'ouvrante et en indiquant une rue ( voir exemple) dans la zone de texte une réponse souhaité s'affiche.

Effectivement j'ai affecté une rue à une réponse. merci de m'indiquer les termes qui correspondent le plus à mon besoin.

Désolé mais Je ne sais pas si un post de ce type est déjà rédiger car je ne connais pas les termes utilisé.

Merci pour vos conseils.
 

Pièces jointes

  • CLASSEUR RUE XL DUNLOAD - Copie.xlsx
    11 KB · Affichages: 29
Dernière édition:

Hervé 06

XLDnaute Nouveau
Bonjour et merci pour cette réponse rapide, votre accueil et ce module,
J'avoue que j'en espérai pas autant c'est vraiment sympa.
Le principe est parfait, Toutefois AR et AM sont des initiales. et lorsque je tape en D1 le nom de la rue je me retrouve toujours avec la même réponse a savoir le non de la rue en A2.
Pour etre un peu plus precis, j'ai besoin lorsque j'indique une rue avec un numéro paire ou impaire de savoir à quelle initiale il est rattaché.
 

job75

XLDnaute Barbatruc
Bonjour Hervé 06, Lone-wolf,

Il s'agit d'un problème de recherche tout à fait classique.

Très souvent on utilise pour cela une ComboBox.

Dans le fichier joint elle est pilotée par ces 2 macros dans le code de la feuille :
Code:
Option Compare Text 'la casse est ignorée

Private Sub ComboBox1_GotFocus()
Dim r As Range
With ComboBox1
    .Clear
    .Value = ""
    Set r = Range("A2:A" & Rows.Count)
    If Application.CountA(r) = 0 Then Exit Sub 'sécurité
    For Each r In r.SpecialCells(xlCellTypeConstants)
        .AddItem r & IIf(r(1, 3) = "", "", " " & r(1, 3))
    Next
    If .ListCount = 1 Then Exit Sub
    Application.ScreenUpdating = False
    With [D1].Resize(.ListCount) 'colonne auxiliaire
        .Value = ComboBox1.List
        .Sort .Cells, xlAscending, Header:=xlNo 'tri alphabétique
        ComboBox1.List = .Value
        .ClearContents
    End With
End With
End Sub

Private Sub ComboBox1_Change()
Dim r As Range, x As String
[H7] = "" 'RAZ
Set r = Range("A2:A" & Rows.Count)
If ComboBox1.ListIndex = -1 Or Application.CountA(r) = 0 Then ComboBox1 = "": Exit Sub
x = ComboBox1
For Each r In r.SpecialCells(xlCellTypeConstants)
    If r & IIf(r(1, 3) = "", "", " " & r(1, 3)) = x Then [H7] = r(1, 2): Exit For
Next
End Sub
A+
 

Pièces jointes

  • CLASSEUR RUE XL DUNLOAD(1).xlsm
    27.6 KB · Affichages: 35

Lone-wolf

XLDnaute Barbatruc
Bonsoir job75

D'après Hervé: j'ai besoin lorsque j'indique une rue avec un numéro paire ou impaire.

Et son fichier ne comporte aucun nombre. Maintenant, si il écrit les rues comme ceci

Rue Abbe Ardisson 1
Rue Auguste Tavel 10
Rue Casimir Raynaud 23

Avec cette macro, c'est différent. Merci à Jacques Boigontier pour la Fonction.

VB:
Sub test()
x = DernierNum([A4])
If x Mod 2 = 1 Then
MsgBox "nombre impaire"
Else
MsgBox "nombre paire"
End If
End Sub

Function DernierNum(chaine)
  Set obj = CreateObject("vbscript.regexp")
  obj.Global = True
  obj.Pattern = "\d+"
  Set a = obj.Execute(chaine)
  If a.Count > 0 Then DernierNum = Val(a(a.Count - 1)) Else DernierNum = 0
End Function

En PJ macro modifiée avec la fonction.
 

Pièces jointes

  • CLASSEUR RUE XL DOWNLOAD-V3.xlsm
    26.4 KB · Affichages: 28
Dernière édition:

Hervé 06

XLDnaute Nouveau
Bonjour,

Je m'appercoit en vous lisant que ma demande n'est vraiment pas claire. Alors ma démarche est la suivante :
- Dans une ville j'ai des rues qui sont affectées à un distributeur (les initiales AR et AM ). toutefois certaines rues sont partager par deux distributeurs ( un sur les numéros paires et l'autre trottoir sur les numéros impaires)

J'ai besoin de savoir quand je tape la rue a qui est attribuer la rue et donc d'indiquer systématiquement si le numéro de la rue et paire ou impaire.

Je n'ai pas besoin d'indiquer le numéro de rue mais simplement si paire et impaire.

Merci de votre implication et je commence a comprendre le fonctionnement
 

job75

XLDnaute Barbatruc
Bonjour Hervé, le forum,

Votre demande m'a paru claire.

Pour tester j'ai recopié la plage A1:C23 jusqu'à la ligne 23 000.

Sur le fichier de mon post #5 la ComboBox se charge chez moi en 2,3 secondes (20 000 données).

C'est trop lent à mon goût, pour accélérer utilisez cette macro (nettement plus habile) :
Code:
Private Sub ComboBox1_GotFocus()
Dim r As Range
Application.ScreenUpdating = False
If FilterMode Then ShowAllData 'si la feuille est filtrée
ComboBox1.Clear
ComboBox1 = ""
Set r = Range("A2", Range("A" & Rows.Count).End(xlUp)(2))
If Application.CountA(r) = 0 Then Exit Sub
With [D1].Resize(r.Count) 'colonne auxiliaire
    .Formula = "=A2&REPT("" ""&C2,C2<>"""")"
    .Value = .Value 'supprime les formules
    .Sort .Cells, xlAscending, Header:=xlNo 'tri alphabétique
    ComboBox1.List = .Resize(Application.CountA(.Cells), 2).Value 'au moins 2 éléments
    .ClearContents
End With
End Sub
Fichier (2), avec 23 000 lignes la macro s'exécute maintenant en 0,3 seconde.

Edit : Application.CountA(.Cells) mieux que Application.CountA(r)

Bonne journée.
 

Pièces jointes

  • CLASSEUR RUE XL DUNLOAD(2).xlsm
    28.4 KB · Affichages: 23
Dernière édition:

job75

XLDnaute Barbatruc
Re,

Eh non ce n'était pas fini...

Dans ce fichier (3) la ComboBox est dotée d'une 2ème colonne (masquée) pour rendre immédiate la 2ème macro :
Code:
Private Sub ComboBox1_GotFocus()
Dim r As Range
Application.ScreenUpdating = False
If FilterMode Then ShowAllData 'si la feuille est filtrée
ComboBox1.Clear
ComboBox1 = ""
Set r = Range("A2", Range("A" & Rows.Count).End(xlUp)(2))
If Application.CountA(r) = 0 Then Exit Sub
With [D1].Resize(r.Count, 2) '2 colonnes auxiliaires
    .Columns(1) = "=A2&REPT("" ""&C2,C2<>"""")"
    .Columns(2) = "=B2"
    .Value = .Value 'supprime les formules
    .Sort .Cells(1), xlAscending, Header:=xlNo 'tri alphabétique
    ComboBox1.List = .Resize(Application.CountA(.Columns(1))).Value
    .ClearContents
End With
End Sub

Private Sub ComboBox1_Change()
[H7] = "" 'RAZ
If ComboBox1.ListIndex = -1 Then ComboBox1 = "": Exit Sub
[H7] = ComboBox1.List(ComboBox1.ListIndex, 1) 'valeur en 2ème colonne
End Sub
A+
 

Pièces jointes

  • CLASSEUR RUE XL DUNLOAD(3).xlsm
    26.6 KB · Affichages: 23

Discussions similaires

Statistiques des forums

Discussions
312 111
Messages
2 085 407
Membres
102 884
dernier inscrit
Macarena