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 :

Modifier données Combo selon saisie [XL-2010]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut Modifier données Combo selon saisie
    Bonjour à tous,

    J'ai une Combo qui est alimentée par des données se trouvant dans la feuille "Base_Produits", des cellules A8:A1007. Les données sont sous la forme P0001, P0002? etc... jusqu'à P01000.
    J'aimerai savoir comment faire pour les codes produits déjà utilisés n'apparaissent plus dans ma Combo. Par exemple, si j'utilise P0001, alors la prochaine fois que j'ouvrirai mon UF où se trouve la Combo, alors la Combo devra proposer les codes à partir de P0002, le code P0001 n'apparaissant plus puisque déjà utilisé.

    J'espère avoir été clair dans mes explications. Merci par avance pour l'aide que vous pourrez m'apporter.

    Bien amicalement

  2. #2
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    Bonjour,

    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
    Dim f
    Private Sub UserForm_Initialize()
      Set f = Sheets("feuil1")
      a = f.Range("A2:A" & f.[A65000].End(xlUp).Row)
      b = f.Range("c2:c" & f.[c65000].End(xlUp).Row)
      Me.ComboBox1.List = Diff(a, b)
    End Sub
     
    Function Diff(a, b)
      Set MonDico1 = CreateObject("Scripting.Dictionary")
      For Each c In b: MonDico1(c) = c:  Next c
      Set mondico2 = CreateObject("Scripting.Dictionary")
      For Each c In a
        If Not MonDico1.Exists(c) Then mondico2(c) = c
      Next c
      Diff = mondico2.keys
    End Function
    Boisgontier
    Fichiers attachés Fichiers attachés

  3. #3
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Bonjour Jacques,

    Merci beaucoup, je n'aurai jamais trouvé seul. Tu m'enlèves une grosse épine du pied.
    Salutations amicales

  4. #4
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Je me suis réjouit un peu vide. Lorsque j'appelle mon UF un message d'erreur apparait : "Erreur 70 Permission refusée". Je ne vois pas ce qui cloche.
    L'erreur est située ici dans ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Private Sub Button_Bas_Prod_Click()
    Application.ScreenUpdating = False
    
        Sheets("Base_Produits").Visible = True
        Sheets("Base_Produits").Activate
        
    Application.ScreenUpdating = True
        Load UFProduits 'Erreur sur cette ligne
        UFProduits.Show
    End Sub
    Voici le code donné par Jacques modifié selon mes besoins :
    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
     
    Dim f
    Private Sub UserForm_Initialize()
      Set f = Sheets("Base_Produits")
      a = f.Range("A2:A" & f.[A65000].End(xlUp).Row)
      b = f.Range("B2:B" & f.[B65000].End(xlUp).Row)
      Me.CmbCodeProd.List = Diff(a, b)
    End Sub
     
    Function Diff(a, b)
      Set MonDico1 = CreateObject("Scripting.Dictionary")
      For Each c In b: MonDico1(c) = c:  Next c
      Set mondico2 = CreateObject("Scripting.Dictionary")
      For Each c In a
        If Not MonDico1.Exists(c) Then mondico2(c) = c
      Next c
      Diff = mondico2.keys
    End Function
    Dans un module :
    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
     
    Function Diff(champ1 As Range, champ2 As Range)
      Set MonDico1 = CreateObject("Scripting.Dictionary")
      a = champ1.Value
      b = champ2.Value
      For Each c In b: MonDico1(c) = c:  Next c
      Set mondico2 = CreateObject("Scripting.Dictionary")
      For Each c In a
        If Not MonDico1.Exists(c) Then mondico2(c) = c
      Next c
      Dim d()
      ReDim d(1 To Application.Caller.Rows.Count)
      i = 1
      For Each c In mondico2.items
         d(i) = c
         i = i + 1
      Next c
      Diff = Application.Transpose(d)
    End Function

  5. #5
    Membre extrêmement actif
    Homme Profil pro
    Inscrit en
    Septembre 2013
    Messages
    1 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Septembre 2013
    Messages : 1 369
    Par défaut
    La fonction du module ne sert à rien.

    Les éléments choisis sont-ils bien sur la feuille Base_produits

    Si ce n'est pas le cas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
      set f2=sheets("xxxxxx")
      b = f2.Range("B2:B" & f2.[B65000].End(xlUp).Row)
    Boisgontier

  6. #6
    Membre éprouvé
    Homme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Septembre 2007
    Messages
    1 896
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Assistant aux utilisateurs
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 896
    Par défaut
    Jacques,

    Oui les éléments choisis sont bien dans la feuille "Base_Produits". Je vais supprimer le module et retenter le coup.
    Merci pour ton aide

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [WD20] filtre table via 2 combo + envoi données champs de saisie
    Par samsam007 dans le forum WinDev
    Réponses: 1
    Dernier message: 23/03/2017, 09h23
  2. [XL-2010] Test du contenu saisi sur un liste de données, couleur selon resultat
    Par moh2ss dans le forum Macros et VBA Excel
    Réponses: 10
    Dernier message: 01/08/2014, 20h46
  3. [VBA-E]Modifier un graphique selon un nom de plage
    Par osito57 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 17/03/2006, 16h14
  4. Comment modifier l'icone selon la version du programme ?
    Par Ben_Le_Cool dans le forum Langage
    Réponses: 3
    Dernier message: 07/12/2005, 16h25

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