Interaction utilisateur et macro

Interaction utilisateur et macro - VB/VBA/VBS - Programmation

Marsh Posté le 07-10-2008 à 17:37:46    

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:  
 
 

Reply

Marsh Posté le 07-10-2008 à 17:37:46   

Reply

Marsh Posté le 07-10-2008 à 21:19:00    

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

Reply

Marsh Posté le 08-10-2008 à 14:27:44    

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

Reply

Marsh Posté le 08-10-2008 à 14:56:01    

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 !
Reply

Marsh Posté le 08-10-2008 à 15:18:13    

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:  
 

Reply

Marsh Posté le 08-10-2008 à 15:24:47    

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 !
Reply

Marsh Posté le 08-10-2008 à 15:34:51    

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 !
Reply

Marsh Posté le 08-10-2008 à 15:59:07    

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 :/
 
 

Reply

Marsh Posté le 08-10-2008 à 16:07:37    

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 !
Reply

Marsh Posté le 08-10-2008 à 16:40:11    

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
Reply

Marsh Posté le 08-10-2008 à 16:40:11   

Reply

Marsh Posté le 08-10-2008 à 17:08:05    

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 !
Reply

Marsh Posté le 08-10-2008 à 17:30:12    

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 )  
:)

Reply

Marsh Posté le 08-10-2008 à 18:56:43    

Le forum est fait pour ca
 
 :jap:


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

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed