IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Probleme donnée Usf [XL-2007]


Sujet :

Macros et VBA Excel

  1. #21
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Je ne connais pas votre façon de procéder avec les codes postaux.
    Si je comprends bien, vous pouvez avoir plusieurs communes ayant le même code postal, c'est bien ça ?

    Je ne vois pas tout à fait où est la difficulté et je ne connais pas vraiment le programme...
    Pour remplir ton nouveau combobox, tu peux utiliser la même méthode que les autres.
    Par contre, le traitement que tu utilises, on ne le connaît pas.

    Si tu sélectionnes une commune, tu veux voir tous les codes postaux de cette commune et vice-versa, c'est bien ça ?
    Il te faudrait alors ajouter un item "Tous" pour réafficher la liste complète au besoin.
    Donc, dans l'événement Click ou Change du combobox de la commune, il te suffit d'effacer celui des codes postaux et de boucler tes données pour charger ce dernier tant que l'item de la colonne des communes égale la valeur choisie.

    Si je ne suis pas clair, explique mieux ce que tu veux arriver à faire.
    MPi²

  2. #22
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 42
    Points : 6
    Points
    6
    Par défaut re
    Bonjour Parmi

    Toute d'abord merci pou votre réponse . Je vous remontre le code de mon USF:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    Private Sub Choixcommune_Change()
     
    Dim I As Integer, Col As Long, Lig As Long
      ' Numéro de ligne = Entête tableau 1 + Choix dans la liste + 1 car commence à 0
      Lig = 1 + Me.Choixcommune.ListIndex + 2
      ' Avec la feuille commune Poste
      With Sheets("commune")
        ' Récupérer la valeurs code insee pour l'USF
         Me.insee2.Value = .Range("A" & Lig)
         ' Récupérer la valeurs détection de cable pour l'USF
         Me.cable.Value = .Range("N" & Lig)
         ' Récupérer la valeurs Marquage et piquetage pour l'USF
        Me.piquetage.Value = .Range("O" & Lig)
        ' Récupérer la valeurs Essai de compactage pour l'USF
        Me.compactage.Value = .Range("P" & Lig)
        ' Récupérer la valeurs code postal pour l'USF
        Me.postal.Value = .Range("B" & Lig)
        ' Récupérer la valeurs extension pour l'USF
        Me.extension.Value = .Range("H" & Lig)
        ' Récupérer la valeurs LA + LB pour l'USF
        Me.branchement.Value = .Range("I" & Lig)
        ' Récupérer la valeurs LB pour l'USF
        Me.liaisonb.Value = .Range("J" & Lig)
        ' Récupérer la valeurs Détection de cable en souterrain pour l'USF
        Me.cablesout.Value = .Range("Q" & Lig)
        ' Récupérer la valeurs piquetage et marquage en souterrain pour l'USF
        Me.piquetagesout.Value = .Range("R" & Lig)
        ' Récupérer la valeurs compactage en souterrain pour l'USF
        Me.compactagesout.Value = .Range("S" & Lig)
        ' Récupérer la centre pour l'USF
        Me.centre.Value = .Range("C" & Lig)
        ' Récupérer le mail pour l'USF
        Me.mail.Value = .Range("U" & Lig)
        ' Récupérer le mail pour l'USF
        Me.moad.Value = .Range("V" & Lig)
         ' Récupérer la valeurs code postal pour l'USF
        Me.comm.Value = .Range("D" & Lig)
        End With
    End Sub
     
    Private Sub insee1_Change()
    Dim I As Integer, Col As Long, Lig As Long
      ' Numéro de ligne = Entête tableau 1 + Choix dans la liste + 1 car commence à 0
      Lig = 1 + Me.insee1.ListIndex + 2
      ' Avec la feuille commune Poste
      With Sheets("commune")
      ' Récupérer la valeurs code postal pour l'USF
        Me.postal.Value = .Range("B" & Lig)
      ' Récupérer la valeurs détection de cable pour l'USF
         Me.cable.Value = .Range("N" & Lig)
         ' Récupérer la valeurs Marquage et piquetage pour l'USF
        Me.piquetage.Value = .Range("O" & Lig)
        ' Récupérer la valeurs Essai de compactage pour l'USF
        Me.compactage.Value = .Range("P" & Lig)
        ' Récupérer la valeurs extension pour l'USF
        Me.extension.Value = .Range("H" & Lig)
        ' Récupérer la valeurs LA + LB pour l'USF
        Me.branchement.Value = .Range("I" & Lig)
        ' Récupérer la valeurs LB pour l'USF
        Me.liaisonb.Value = .Range("J" & Lig)
        ' Récupérer la valeurs Détection de cable en souterrain pour l'USF
        Me.cablesout.Value = .Range("Q" & Lig)
        ' Récupérer la valeurs piquetage et marquage en souterrain pour l'USF
        Me.piquetagesout.Value = .Range("R" & Lig)
        ' Récupérer la valeurs compactage en souterrain pour l'USF
        Me.compactagesout.Value = .Range("S" & Lig)
        ' Récupérer la centre pour l'USF
        Me.centre.Value = .Range("C" & Lig)
        ' Récupérer le mail pour l'USF
        Me.mail.Value = .Range("U" & Lig)
        ' Récupérer le mail pour l'USF
        Me.moad.Value = .Range("V" & Lig)
        ' Récupérer la valeurs code postal pour l'USF
        Me.comm.Value = .Range("D" & Lig)
        End With
     
    End Sub
    Donc ce que je veux faire c'est rajouter ces recherche en Faisant une recherche par code postal
    Mais le soucis c'est que un code postal peut contenir plusieusr commune .
    Exemple :

    09100 j'ai à peu près une dizaine de commune.


    Ce que je veux c'est que si je tape 09100 la liste des commune appartenant a ce code postal s'affiche et que je puisse selectionner la commune de mon choix.

    A ce jour apres plusieur tentative je n'y arrive pas . Je vous explique ce que ca fait je créer un combobox code postale dans le code de mon usf je copie les code précédent en modifiant ce qu'il faut .

    Lorsque je tappe mon code postal une commune est affecter automatiquement je n'ai pas la possibilitée de choisir celle que je veux
    et donc je n'ai pas les bonnes informations que je cherchais .

    Je sais pas si je m'exprime bien dite moi si vous voulais plus d'info.

    Merci d'avance

  3. #23
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Bonjour,

    Il te faut boucler ta liste pour insérer seulement les communes de ce code postal.
    Ce qui donnerait quelque chose comme ceci dans l'événement _Change() ou _Click() du combobox des codes postaux


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim I as Long, nbLignes as long
     
    Me.choixcommune.Clear  'Vider le combobox avant de le remplir
    nbLignes = sheets("Communes").cells(Rows.count, "A").end(xlup).row
    For I = 2 to nbLignes
       If sheets("Communes").Range("XYZ" & I) = Me.ComboCodes.Text Then  'Change XYZ pour la colonne des codes postaux
          Me.choixcommune.AddItem sheets("Communes").Range("XYZ" & I)
       end if
    Next
    MPi²

  4. #24
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 42
    Points : 6
    Points
    6
    Par défaut Probème
    Rebonjour

    Encor une fois je viens . Alors je ne sais pas je doit être bette
    mais le code me crée un bug je n'arrive pas à l'integrer a mon code je ne comprend pas où il faut le mettre .
    Et faut-il que je rentre le meme code de mes autres combobox et faut'il que je remplisse le rowsource du combo box
    je suis désoler vraiment mais je n'ai jamais fait de boucle au par avant et je me forme au fur et a mesure je suis désole .

    Très cordialement

  5. #25
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 617
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 617
    Points : 5 912
    Points
    5 912
    Par défaut
    Non, aucune nécessité d'utiliser le RowSource.
    Une seule boucle suffit.

    Par contre, il faut expliquer clairement les besoins.
    Peut-être que si tu pouvais joindre un fichier avec des données bidons, ça aiderait à cerner le problème.

    Explique clairement les besoins.
    Si tu dois remplir les combobox à chaque sélection d'un ou l'autre des combobox, c'est différent de simplement sélectionner une valeur d'un seul combobox.
    MPi²

  6. #26
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 42
    Points : 6
    Points
    6
    Par défaut Explication
    Je vous join le fichie modifie concerné.

    Pour vous expliquer :

    Actuellement j'ai deux sortes de recherche soit par code insee soit par commune les deux sont réalisé par combobox, je voudrais rajouté un combobox pour faire une recherche par code postal .

    Lorsque je fais une recherche par exemple par commune :

    - Je tape la commune
    résultat => dans les zones de texte s'incrémente les information concernant cette commune

    et pareil donc pour le code insee.

    Ce que je voudrais :
    -je tape le code postal dans le combobox
    résultat => la liste des communes concerné par ce code postal s'incrémente dans le combobox des commune et je voudrais selectioné la commune dont j''ai besoin afin d'afficher les informations de cette commune dans les zone de texte .

    Je vous explique le problème que je rencontre
    A ce jour je taper les code postal mais ca ne filtrer pas les communes . dans le combobox apparaissait toujours toutes les communes .

    Merci de votre aide .
    Fichiers attachés Fichiers attachés

  7. #27
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Userform

    Supprime les propriétés ROWSOURCE de tes 3 Combobox.

    Vba: Active la référence Micosoft Scripting Runtime et remplace tous les code par ceux-ci.

    PS. J'ai éliminés les lignes concernant l'affichage de ton userform que tu peux ajouter comme tu veux

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    Option Explicit
     
    '/!\ ACTIVER LA REFERENCE  MICROSOFT SCRIPTING RUNTIME
     
    Private Sub UserForm_Initialize()
     
    Remplir Me.cdi, 1
    Remplir Me.codepostal1, 2
    Remplir Me.Choixcommune, 4
    End Sub
     
    Private Sub Remplir(ByVal LST As Object, ByVal Col As Integer, Optional ByVal Crit As String, Optional ByVal ColCrit As Integer)
    Dim MonDico As New Scripting.Dictionary
    Dim LastLig As Long, i As Long
    Dim Ajout As Boolean
    Dim Tmp As String
     
    LST.Clear
    With Worksheets("commune")
        LastLig = .Cells(.Rows.Count, 1).End(xlUp).Row
        For i = 2 To LastLig
            Ajout = Crit = "" Or .Cells(i, Application.Max(1, ColCrit)) = Crit
            If Ajout Then
                Tmp = .Cells(i, Col).Value
                If Not MonDico.Exists(Tmp) Then MonDico.add Tmp, Tmp
            End If
        Next i
    End With
     
    If MonDico.Count >= 0 Then LST.List = MonDico.Keys
    Set MonDico = Nothing
    End Sub
     
    Private Sub Choixcommune_Change()
    Dim Lig As Long
     
    If Me.Choixcommune.ListIndex > -1 Then
        Me.cdi.ListIndex = -1
        Lig = LaLigne(Me.Choixcommune, 4)
        Importer Lig
    End If
    End Sub
     
    Private Sub cdi_Change()
    Dim Lig As Long
     
    If Me.cdi.ListIndex > -1 Then
        Me.Choixcommune.ListIndex = -1
        Lig = LaLigne(Me.cdi, 1)
        Importer Lig
    End If
    End Sub
     
    Private Sub codepostal1_Change()
     
    Vider
    If Me.codepostal1.ListIndex > -1 Then
        Remplir Me.Choixcommune, 4, Me.codepostal1, 2
        Remplir Me.cdi, 1, Me.codepostal1, 2
    End If
    End Sub
     
    Private Sub Importer(ByVal Lig As Integer)
     
    Vider
    If Lig > 0 Then
        With Worksheets("commune")
            Me.insee.Value = .Range("A" & Lig)
            Me.cdp.Value = .Range("B" & Lig)
            Me.cable.Value = .Range("N" & Lig)
            Me.piquetage.Value = .Range("O" & Lig)
            Me.compactage.Value = .Range("P" & Lig)
            Me.extension.Value = .Range("H" & Lig)
            Me.branchement.Value = .Range("I" & Lig)
            Me.liaisonb.Value = .Range("J" & Lig)
            Me.identificationcable.Value = .Range("Q" & Lig)
            Me.piquetagesout.Value = .Range("R" & Lig)
            Me.compactagesout.Value = .Range("S" & Lig)
            Me.centre.Value = .Range("C" & Lig)
            Me.mail.Value = .Range("U" & Lig)
            Me.moad.Value = .Range("V" & Lig)
            Me.comm.Value = .Range("D" & Lig)
            Me.moar.Value = .Range("E" & Lig)
            Me.cpc.Value = .Range("X" & Lig)
            Me.ccs.Value = .Range("Y" & Lig)
        End With
    End If
    End Sub
     
    Private Sub Vider()
     
    Me.insee.Value = ""
    Me.cdp.Value = ""
    Me.cable.Value = ""
    Me.piquetage.Value = ""
    Me.compactage.Value = ""
    Me.extension.Value = ""
    Me.branchement.Value = ""
    Me.liaisonb.Value = ""
    Me.identificationcable.Value = ""
    Me.piquetagesout.Value = ""
    Me.compactagesout.Value = ""
    Me.centre.Value = ""
    Me.mail.Value = ""
    Me.moad.Value = ""
    Me.comm.Value = ""
    Me.moar.Value = ""
    Me.cpc.Value = ""
    Me.ccs.Value = ""
    End Sub
     
    Private Function LaLigne(ByVal Tmp As String, ByVal Col As Integer) As Long
    Dim c As Range
     
    Set c = Worksheets("commune").Columns(Col).Find(Tmp, LookIn:=xlValues, LookAt:=xlWhole)
    If Not c Is Nothing Then
        LaLigne = c.Row
        Set c = Nothing
    End If
    End Function
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  8. #28
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 42
    Points : 6
    Points
    6
    Par défaut Merci
    Merci je vais essayer
    Juste une question ce que tu me demande d'activer je ne l'ai jamais fait au par avant .
    Cela te dérange de m'explique ? Je suis désoler vraiment je débute
    Et que je comprenne tu as fait une grande boucle ? C'est ça

  9. #29
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    Dans l'éditeur vba
    Outils> Références
    Tu cherches la référence Micosoft Scripting Runtime que tu coches
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  10. #30
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 42
    Points : 6
    Points
    6
    Par défaut bugg
    Il y a un bugg dans le code il marche tres tres bien sauf que le combobox des commune ne se réinitialise pas

    cordialement

  11. #31
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    C'est à dire?

    Edit:

    Pour pouvoir avoir toutes les communes après une recherche par code postal, il suffit de choisir la ligne vide de la combobox code postal

    Ton fichier
    Cordialement.
    J'utilise toujours le point comme séparateur décimal dans mes tests.

  12. #32
    Futur Membre du Club
    Homme Profil pro
    Inscrit en
    Janvier 2014
    Messages
    42
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2014
    Messages : 42
    Points : 6
    Points
    6
    Par défaut Merci
    Je vous remercie vraiment .

    J'ai juste rajouter une bouton commande qui fait un reset et sélectionne la ligne vide ( question de simplicité d'utilisation ).

    Je vous remercie un code tres compréhensible sauf peut etre une partie sur laquel je travail a comprendre .

    Merci car j'ai beaucoup appris.

+ Répondre à la discussion
Cette discussion est résolue.
Page 2 sur 2 PremièrePremière 12

Discussions similaires

  1. Probleme donnée Excel vers datagridview
    Par Brialex dans le forum VB.NET
    Réponses: 3
    Dernier message: 09/05/2011, 22h49
  2. Probleme donnes datagrid, s'affiche seulement si clique
    Par azerto00 dans le forum Silverlight
    Réponses: 4
    Dernier message: 07/10/2010, 19h34
  3. [XL-2003] Copie données usf dans une certaine ligne tableau excel
    Par mikam1660 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/06/2010, 17h49
  4. Probleme saisie usf
    Par zine pef dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 21/04/2009, 22h40

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo