Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
1307 connectés 

  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Interaction utilisateur et macro

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Interaction utilisateur et macro

n°1796712
Sheeris
Posté le 07-10-2008 à 17:37:46  profilanswer
 

Bonjour à tous!
 
Après de vaines recherches, je me tourne vers vous en désespoir de cause!
 
J'ai besoin de faire une macro dans Excel (avec mes toutes petites connaissances de lilipucienne!) qui puisse me faire la chôse suivante:
 
D'après une liste de code postaux, déterminer à quelle région est rattacher à un code postal, dans une nouvelle colonne.
Mais il faudrait que je puisse laisser à l'utilisateur déterminer la plage de cellules des codes postaux à travailler, vu que cette macro va servir sur des listes avec des lignes très variables (pouvant aller de 100 à 20000 lignes)
 
Ex: une fenêtre qui invite à "Sélectionner la plage de cellules à transformer"  
 
 
Siouplait... Vous auriez pas une astuce pour moi?  :ange:  
 
 

mood
Publicité
Posté le 07-10-2008 à 17:37:46  profilanswer
 

n°1796774
kiki29
Posté le 07-10-2008 à 21:19:00  profilanswer
 

Salut, une approche VBA Excel à adapter à ton contexte http://www.excel-downloads.com/for [...] france.zip
sinon sans Excel http://www.fobec.com/protec/logici [...] hp3?id=181

n°1797205
Sheeris
Posté le 08-10-2008 à 14:27:44  profilanswer
 

Merci beaucoup pour ces liens, mais je crains hélas de ne pas avoir suffisamment de compétences pour savoir l'adapter à mon cas de figure :'(
 
Je voudrais à partir d'une liste dans Excel: "Nom" "Prénom" "Adresse" "Code Postal" "Ville", insérer une colonne avec la région qui correspond au Code Postal saisi.
 
ex: si code postal = 31000, insérer la valeur "Midi Pyrénées" dans une nouvelle colonne
 
N'ayant que peu de connaissance en VBA, je patauge un peu dans la semoule :D

n°1797226
SuppotDeSa​Tante
Aka dje69r
Posté le 08-10-2008 à 14:56:01  profilanswer
 

Bonjour
 
Pas besoin de vba pour faire ca. Enfin en fonction de ton dernier exemple.
 
Il te suffit de saisir tes régions par département en liste (De H à K) un peu plus loin sur la feuille (ou dns une autre feuille), par exemple en commencant en H2 (1ere ligne contenant l'entete)
 
La liste se trouve sur google en 2sc et demi. Sans liste tu ne peux rien faire ou presque. Les CP sont pas ordres Alpha et les régions par découpage Géo... Aucun lien entre eux si ce n'est si tu fais un tableau de concordance.
 
Je pars du principe que nom, prenom, adresse, cp et ville sont respectivement dans les colonne A,B,C, D et E et donc que la région viendra en F. La 1ere ligne contenant les entete de colonne.
En F2:
=RECHERCHEV(GAUCHE(D2;2);H:K;4;FAUX)
 
Je te joins ce fichier, ca t'aidera surement ;)


Message édité par SuppotDeSaTante le 08-10-2008 à 15:16:19

---------------
Soyez malin, louez entre voisins !
n°1797237
Sheeris
Posté le 08-10-2008 à 15:18:13  profilanswer
 

Effectivement, c'est une très bonne solution pour pallier à mon problème!
 
J'ai réussi néanmoins à me débrouiller pour écrire un ti bout de code, qui fonctionne très bien (mais qui risque peut être d'en faire hurler certains lol):
 

Citation :

Sub RepRegion()
Dim Cell As Range
Dim F As Worksheet
Dim dept As String
Dim Reg As String
 
Dim a As Integer
Dim CelA As String
 
Set F = Worksheets("Feuil1" )
 
a = 2
Range("E2:E100" ).Select
For Each Cell In Selection
    dept = Left(Cell.Text, 2)
    CelA = "G" & a & ":G" & a
    Range(CelA).Select
    For Each Cell2 In Selection
        If dept = "60" Or dept = "75" Or dept = "77" Or dept = "78" Or dept = "80" Or dept = "91" Or dept = "92" Or dept = "93" Or dept = "94" Or dept = "95" Then
            Reg = "IDF"
        ElseIf dept = "04" Or dept = "06" Or dept = "09" Or dept = "11" Or dept = "12" Or dept = "13" Or dept = "16" Or dept = "17" Or dept = "20" Or dept = "24" Or dept = "30" Or dept = "31" Or dept = "32" Or dept = "33" Or dept = "34" Or dept = "36" Or dept = "37" Or dept = "40" Or dept = "41" Or dept = "45" Or dept = "46" Or dept = "47" Or dept = "48" Or dept = "64" Or dept = "65" Or dept = "66" Or dept = "81" Or dept = "82" Or dept = "83" Or dept = "84" Or dept = "86" Or dept = "87" Or dept = "98" Then
            Reg = "SUD"
        ElseIf dept = "01" Or dept = "02" Or dept = "03" Or dept = "05" Or dept = "07" Or dept = "08" Or dept = "10" Or dept = "15" Or dept = "18" Or dept = "19" Or dept = "21" Or dept = "23" Or dept = "25" Or dept = "26" Or dept = "38" Or dept = "39" Or dept = "42" Or dept = "43" Or dept = "51" Or dept = "52" Or dept = "54" Or dept = "55" Or dept = "57" Or dept = "58" Or dept = "63" Or dept = "67" Or dept = "68" Or dept = "69" Or dept = "70" Or dept = "71" Or dept = "73" Or dept = "74" Or dept = "88" Or dept = "89" Or dept = "90" Then
            Reg = "CENTRE"
        ElseIf dept = "14" Or dept = "22" Or dept = "29" Or dept = "35" Or dept = "44" Or dept = "49" Or dept = "50" Or dept = "53" Or dept = "56" Or dept = "59" Or dept = "61" Or dept = "62" Or dept = "72" Or dept = "76" Or dept = "79" Or dept = "85" Then
            Reg = "OUEST"
        Else
            Reg = ""
        End If
   Next Cell2
   If Reg <> "" Then
       ActiveCell.Value = Reg
   Else
       ActiveCell.Value = "REGION NON DEFINIE"
       ActiveCell.Interior.ColorIndex = 50
   End If
   a = a + 1
Next Cell
 
End Sub


 
Et comme j'aime bien les challenges, j'aimerais bien aller au bout de mon ti script et lui donner vie! Histoire d'apprendre :)
 
Mon seul problème (j'ai abandonné l'idée de la fenêtre interactive utilisateur pour sélectionner une plage de cellule) se situe ici:
Range("E2:E100" ).Select
 
Ici ma plage de sélection ne va que jusqu'à 100 et pour éviter d'avoir des tas de "REGION NON DEFINIE" vide si je n'ai que 30 lignes dans mon fichier, je voudrais pouvoir, en sélectionnant les données sur le tableau, faire une récupération de cette plage.
 
Ex: un truc qui correspondrait à une fonction que je pourrais appeler (si elle existait :D) : "Range(CurrentUser.Select)"
 
Des idées pour moi?  :sarcastic:  
 

n°1797242
SuppotDeSa​Tante
Aka dje69r
Posté le 08-10-2008 à 15:24:47  profilanswer
 

Regardes tes Messages Privés. ;)
 
Bah pour recuperer la selection active, c'est 'Selection'
Donc tu degages ton 'Range("E2:E100" ).Select' et c'est tout


---------------
Soyez malin, louez entre voisins !
n°1797251
SuppotDeSa​Tante
Aka dje69r
Posté le 08-10-2008 à 15:34:51  profilanswer
 

C'est peut etre plus lisible comme ca :
 

Citation :

Sub RepRegion()
Dim Cell As Range
Dim F As Worksheet
Dim dept As String
Dim Reg As String
 
Dim a As Integer
Dim CelA As String
 
Set F = Worksheets("Feuil1" )
 
a = 2
Set Sel1 = Application.Selection
For Each Cell In Sel1
dept = Left(Cell.Text, 2)
a=Cell.Row
Select Case dept
    Case "60", "75", "77", "78", "80", "91", "92", "93", "94", "95"
        Reg = "IDF"
    Case "04", "06", "09", "11", "12", "13", "16", "17", "20", "24", "30", "31", "32", "33", "34", "36", "37", "40", "41", "45", "46", "47", "48", "64", "65", "66", "81", "82", "83", "84", "86", "87", "98"
        Reg = "SUD"
    Case "01", "02", "03", "05", "07", "08", "10", "15", "18", "19", "21", "23", "25", "26", "38", "39", "42", "43", "51", "52", "54", "55", "57", "58", "63", "67", "68", "69", "70", "71", "73", "74", "88", "89", "90"
        Reg = "CENTRE"
    Case "14", "22", "29", "35", "44", "49", "50", "53", "56", "59", "61", "62", "72", "76", "79", "85"
        Reg = "OUEST"
    Case Else
        Reg = ""
End Select
 
If Reg <> "" Then
Cells(a, 7).Value = Reg
Else
Cells(a, 7).Value = "REGION NON DEFINIE"
Cells(a, 7).Interior.ColorIndex = 50
End If
a = a + 1
Next Cell
 
End Sub
 


 
Voila, il te suffit de sélectionner ce que tu veux, genre de E2 à E20 et de lancer la macro, il ne te fera la maj que de G2 à G20 (redéfinition de ta variable a par la ligne de la premiere cellule de la selection active : a=Cell.Row). J'ai enlevé les range.select. Car forcement ta selection active, apres un range.select, change.
 
Attention toutefois je n'ai pas testé pour des cellules non adjacentes.


Message édité par SuppotDeSaTante le 08-10-2008 à 15:57:01

---------------
Soyez malin, louez entre voisins !
n°1797267
Sheeris
Posté le 08-10-2008 à 15:59:07  profilanswer
 

AAAhhh, c'était aussi facile que ça?! pffff je suis trop nulle :p
Merci beaucoup en tout cas! pour cette soluce et pour l'optimisation! :)
 
Afin de proposer les 2 solutions à la personne qui va se servir de ça, je tente du coup de faire marcher l'équivalent de ton fichier excel (recherchev) mais ça ne marche pas chez moi :'(
Mon compte FTP ne marche provisoirement plus alors je ne peux pas te montrer mon ti fichier
 
Mais en gros, j'ai mes codes postaux en colonne D et la liste des départements (Département, Région) sur la Feuille2 (nommée Répart)
J'applique la fonction: =RECHERCHEV(GAUCHE(D2;2);Répart!A:B;2;FAUX)
et rien ... j'ai un ti #N/A sans que je sache pourquoi :/
 
 

n°1797269
SuppotDeSa​Tante
Aka dje69r
Posté le 08-10-2008 à 16:07:37  profilanswer
 

J'ai edité ma macro pour ajouter la definition de la variable 'a', surement entre temps ou tu ecrivais. Reverifie que tu as bien la bonne version de la macro.
 
#N/A veut dire qu'il ne trouve pas de concordance.
 
Mais sans le fichier sous les yeux, j'ai un peu de mal a te dire pourquoi...  
 
Les code département de Répart et les codes postaux de ta feuille1 sont bien au format texte ? (tu as bien '01' aligné a gauche pour l'ain ou '01000' pour le CP ?)
Le Nom de la Région est en B de la feuille Répart et le code département en A ?

Message cité 1 fois
Message édité par SuppotDeSaTante le 08-10-2008 à 16:13:02

---------------
Soyez malin, louez entre voisins !
n°1797306
Sheeris
Posté le 08-10-2008 à 16:40:11  profilanswer
 

La macro fonctionne parfaitement bien, j'ai juste supprimer mon Range(E2:E100) et tout roule comme ça :)
 
Pour le fichier, le voici ICI
 
J'arrive pas à voir ce que j'ai mal fait... :/
 
en F2, c'est en récupérant le tableau de correspondance "Département - Région" sur la feuille Répart
et en F3, c'est avec celui sur la droite en H:I de la même feuille.
 
J'ai bien vérifié que tout soit bien en format texte et rien à faire, je vois pas pourquoi ça marche pas :(

Message cité 1 fois
Message édité par Sheeris le 08-10-2008 à 16:40:33
mood
Publicité
Posté le 08-10-2008 à 16:40:11  profilanswer
 

n°1797327
SuppotDeSa​Tante
Aka dje69r
Posté le 08-10-2008 à 17:08:05  profilanswer
 

Sheeris a écrit :

La macro fonctionne parfaitement bien, j'ai juste supprimer mon Range(E2:E100) et tout roule comme ça :)  

Il faut aussi réinitialiser ta variable 'a' sinon tu mettras a jour toujours a partir de la ligne 2. La avec ma macro, si tu selectionne que E20 il met a jour que G20, si tu selectionnes de E5 à E200 il met a jour que de G5 à G200
 

Sheeris a écrit :

J'arrive pas à voir ce que j'ai mal fait... :/
 
en F2, c'est en récupérant le tableau de correspondance "Département - Région" sur la feuille Répart
et en F3, c'est avec celui sur la droite en H:I de la même feuille.
 
J'ai bien vérifié que tout soit bien en format texte et rien à faire, je vois pas pourquoi ça marche pas :(  

Tu n'as pas lu mon message jusqu'au bout ;)

SuppotDeSaTante a écrit :

"Les code département de Répart et les codes postaux de ta feuille1 sont bien au format texte ? (tu as bien '01' aligné a gauche pour l'ain ou '01000' pour le CP ?) "

Toi tu n'as pas de '0' pour l'ain '01'
De plus, il faut que ta colonne de reference (celle des codes departements) soit triée.
Ensuite, apparament le format de ta colonne des codes départements est merdique (Surement a cause d'un copié collé). Je te l'ai reconstruite, celle de Répart
 
Fichier ici
 
[edit]il te manque des codes départements, le 27 et le 28 notamment.(Eure, Eure et loire) ;) [/edit]


Message édité par SuppotDeSaTante le 08-10-2008 à 17:21:57

---------------
Soyez malin, louez entre voisins !
n°1797349
Sheeris
Posté le 08-10-2008 à 17:30:12  profilanswer
 

En fait, j'ai appliqué le format Texte sur mes cellules, elles s'affichaient bien avec le 01 mais en rentrant dans la cellule, effectivement, la valeur était = à 1
j'ai vu qu'en rajoutant le une simple côte dans tout le tableau Dépt / Region, tout rentrait dans l'ordre!
 
Un gros gros merci pour ton aide et ta patience (et pour l'info des dpt 27 et 28 !! bravo le coup d'oeil :p )  
:)

n°1797384
SuppotDeSa​Tante
Aka dje69r
Posté le 08-10-2008 à 18:56:43  profilanswer
 

Le forum est fait pour ca
 
 :jap:


---------------
Soyez malin, louez entre voisins !

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  VB/VBA/VBS

  Interaction utilisateur et macro

 

Sujets relatifs
Faire tourner une macro en tache de fondMacro d'envoi d'emails fonctionnant mais pas dans perso.xls
Mettre un password sans utilisateur a un site ??[VBA] Macro exécutée pas à pas...
Référence DirectX pour l'utilisateur finalManipulation d'un nom de template dans une #define-macro
macro pour jeuxvideo aide!Import Access fichier 'txt' à modifier via macro ...
"intercepter" quand l'utilisateur presse "Ctrl"+"S" [RESOLU][VBS] copie d'un fichier avec une liste d'utilisateur
Plus de sujets relatifs à : Interaction utilisateur et macro


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR