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 :

Mise à jour combobox mais pas tous [XL-2003]


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut Mise à jour combobox mais pas tous
    Bonjour,

    J'ai un petit problème à vous soumettre. Actuellement j'alimente 5 combobox par cette procédure :

    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
    Sub recupNumCmdTtt()
    Dim i As Integer
    Dim j As Byte
    Dim NomCol As String
     
    On Error GoTo errorValidation
    'On efface au préalable les combobox pour ne pas avoir de doublons
    With shAnalyse
        For j = 14 To 18
            NomCol = Left(.Cells(1, j).Address(0, 0), 1)
            .OLEObjects("cb" & NomCol & "40").Object.Clear
    'On parcourt la ligne 37 et quand une cellule contient un numéro de commande on l'ajoute dans la combobox...
            .OLEObjects("cb" & NomCol & "40").Object.AddItem ""
            For i = cNumColonneDebutTableau To cNumColonneFinTableau
                If Cells(37, i).Value <> "" Then .OLEObjects("cb" & NomCol & "40").Object.AddItem .Cells(cNumLigneCmdTraitement, i)
            Next i
        Next j
    End With
    Exit Sub
     
    errorValidation:
    'Appelle la procédure qui envoit un mail à JFM en cas d'erreur
    'Il faut récupérer : nom procédure, nom fichier, nom numéro lot, code erreur excel, description erreur
    Call EnvoiMailErreurValidation("recupNumCmdTtt", wbkAnalyse.Name, Err.Number, Err.Description, wbkAnalyse.Path)
    End Sub
    Cependant si il y a une modification en ligne 37 il faut que je mette à jour ces combobox en rappellant ma procédure...

    Ce que je fais de cette manière :

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Col As String
    
    Col = Left(Target.Address(0, 0), 1)
    
    With shAnalyse
    If InStr("N39_O39_P39_Q39_R39", Target.Address(0, 0)) > 0 Then
        .OLEObjects("cb" & Col & "40").Visible = Target.Value = "Sieving"
        If Target.Value = "" Then
            ActiveSheet.OLEObjects("cb" & Col & "40").Object.Value = ""
        End If
    End If
    
    
    If InStr("G37_J37_M37_N37_O37_P37_Q37_R37", Target.Address(0, 0)) > 0 Then
        Call recupNumCmdTtt
    End If
    End With
    
    End Sub
    Cependant si mon utilisateur a déjà tout sélectionné je ne veux pas que ça lui remette tout à zéro...

    J'ai testé ceci :

    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Col As String
     
    Col = Left(Target.Address(0, 0), 1)
     
    With shAnalyse
    If InStr("N39_O39_P39_Q39_R39", Target.Address(0, 0)) > 0 Then
        .OLEObjects("cb" & Col & "40").Visible = Target.Value = "Sieving"
        If Target.Value = "" Then
            ActiveSheet.OLEObjects("cb" & Col & "40").Object.Value = ""
        End If
    End If
     
    If InStr("G37_J37_M37_N37_O37_P37_Q37_R37", Target.Address(0, 0)) > 0 Then
        If Target.Address = "$G$37" Then
            .OLEObjects("cb" & Col & "40").Object.AddItem .Range("G37").Value
        ElseIf Target.Address = "$J$37" Then
            .OLEObjects("cb" & Col & "40").Object.AddItem .Range("J37").Value
        ElseIf Target.Address = "$M$37" Then
            .OLEObjects("cb" & Col & "40").Object.AddItem .Range("M37").Value
        ElseIf Target.Address = "$N$37" Then
            .OLEObjects("cb" & Col & "40").Object.AddItem .Range("N37").Value
        ElseIf Target.Address = "$O$37" Then
            .OLEObjects("cb" & Col & "40").Object.AddItem .Range("O37").Value
        ElseIf Target.Address = "$P$37" Then
            .OLEObjects("cb" & Col & "40").Object.AddItem .Range("P37").Value
        ElseIf Target.Address = "$Q$37" Then
            .OLEObjects("cb" & Col & "40").Object.AddItem .Range("Q37").Value
        ElseIf Target.Address = "$R$37" Then
            .OLEObjects("cb" & Col & "40").Object.AddItem .Range("R37").Value
        End If
    End If
    End With
     
    End Sub
    Cependant cela me fait une erreur de bloc with sur mon .OLEObject...
    Si vous avez des idées.. je suis preneuse

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Col As String
     
    Col = Left(Target.Address(0, 0), 1)
     
    With shAnalyse
    If InStr("N39_O39_P39_Q39_R39", Target.Address(0, 0)) > 0 Then
        .OLEObjects("cb" & Col & "40").Visible = Target.Value = "Sieving"
        If Target.Value = "" Then
            ActiveSheet.OLEObjects("cb" & Col & "40").Object.Value = ""
        End If
    End If
     
    If InStr("G37_J37_M37_N37_O37_P37_Q37_R37", Target.Address(0, 0)) > 0 Then
        If Target.Address = "$G$37" Then
            cbN40.AddItem Range("G37").Value
            cbO40.AddItem Range("G37").Value
            cbP40.AddItem Range("G37").Value
            cbQ40.AddItem Range("G37").Value
            cbR40.AddItem Range("G37").Value
        ElseIf Target.Address = "$J$37" Then
            cbN40.AddItem Range("J37").Value
            cbO40.AddItem Range("J37").Value
            cbP40.AddItem Range("J37").Value
            cbQ40.AddItem Range("J37").Value
            cbR40.AddItem Range("J37").Value
        ElseIf Target.Address = "$M$37" Then
            cbN40.AddItem Range("M37").Value
            cbO40.AddItem Range("M37").Value
            cbP40.AddItem Range("M37").Value
            cbQ40.AddItem Range("M37").Value
            cbR40.AddItem Range("M37").Value
        ElseIf Target.Address = "$N$37" Then
            cbN40.AddItem Range("N37").Value
            cbO40.AddItem Range("N37").Value
            cbP40.AddItem Range("N37").Value
            cbQ40.AddItem Range("N37").Value
            cbR40.AddItem Range("N37").Value
        ElseIf Target.Address = "$O$37" Then
            cbN40.AddItem Range("O37").Value
            cbO40.AddItem Range("O37").Value
            cbP40.AddItem Range("O37").Value
            cbQ40.AddItem Range("O37").Value
            cbR40.AddItem Range("O37").Value
        ElseIf Target.Address = "$P$37" Then
            cbN40.AddItem Range("P37").Value
            cbO40.AddItem Range("P37").Value
            cbP40.AddItem Range("P37").Value
            cbQ40.AddItem Range("P37").Value
            cbR40.AddItem Range("P37").Value
        ElseIf Target.Address = "$Q$37" Then
            cbN40.AddItem Range("Q37").Value
            cbO40.AddItem Range("Q37").Value
            cbP40.AddItem Range("Q37").Value
            cbQ40.AddItem Range("Q37").Value
            cbR40.AddItem Range("Q37").Value
        ElseIf Target.Address = "$R$37" Then
            cbN40.AddItem Range("R37").Value
            cbO40.AddItem Range("R37").Value
            cbP40.AddItem Range("R37").Value
            cbQ40.AddItem Range("R37").Value
            cbR40.AddItem Range("R37").Value
        End If
    End If
    End With
     
    End Sub
    J'ai testé de cette manière mais même erreur, je ne sais plus comment faire...

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Col As String
     
    Col = Left(Target.Address(0, 0), 1)
     
    If InStr("N39_O39_P39_Q39_R39", Target.Address(0, 0)) > 0 Then
        ActiveSheet.OLEObjects("cb" & Col & "40").Visible = Target.Value = "Sieving"
        If Target.Value = "" Then
            ActiveSheet.OLEObjects("cb" & Col & "40").Object.Value = ""
        End If
    End If
     
    If InStr("G37_J37_M37_N37_O37_P37_Q37_R37", Target.Address(0, 0)) > 0 Then
        If Target.Address = "$G$37" Then
            cbN40.AddItem Range("G37").Value
            cbO40.AddItem Range("G37").Value
            cbP40.AddItem Range("G37").Value
            cbQ40.AddItem Range("G37").Value
            cbR40.AddItem Range("G37").Value
        ElseIf Target.Address = "$J$37" Then
            cbN40.AddItem Range("J37").Value
            cbO40.AddItem Range("J37").Value
            cbP40.AddItem Range("J37").Value
            cbQ40.AddItem Range("J37").Value
            cbR40.AddItem Range("J37").Value
        ElseIf Target.Address = "$M$37" Then
            cbN40.AddItem Range("M37").Value
            cbO40.AddItem Range("M37").Value
            cbP40.AddItem Range("M37").Value
            cbQ40.AddItem Range("M37").Value
            cbR40.AddItem Range("M37").Value
        ElseIf Target.Address = "$N$37" Then
            cbN40.AddItem Range("N37").Value
            cbO40.AddItem Range("N37").Value
            cbP40.AddItem Range("N37").Value
            cbQ40.AddItem Range("N37").Value
            cbR40.AddItem Range("N37").Value
        ElseIf Target.Address = "$O$37" Then
            cbN40.AddItem Range("O37").Value
            cbO40.AddItem Range("O37").Value
            cbP40.AddItem Range("O37").Value
            cbQ40.AddItem Range("O37").Value
            cbR40.AddItem Range("O37").Value
        ElseIf Target.Address = "$P$37" Then
            cbN40.AddItem Range("P37").Value
            cbO40.AddItem Range("P37").Value
            cbP40.AddItem Range("P37").Value
            cbQ40.AddItem Range("P37").Value
            cbR40.AddItem Range("P37").Value
        ElseIf Target.Address = "$Q$37" Then
            cbN40.AddItem Range("Q37").Value
            cbO40.AddItem Range("Q37").Value
            cbP40.AddItem Range("Q37").Value
            cbQ40.AddItem Range("Q37").Value
            cbR40.AddItem Range("Q37").Value
        ElseIf Target.Address = "$R$37" Then
            cbN40.AddItem Range("R37").Value
            cbO40.AddItem Range("R37").Value
            cbP40.AddItem Range("R37").Value
            cbQ40.AddItem Range("R37").Value
            cbR40.AddItem Range("R37").Value
        End If
    End If
     
    'Call recupNumCmdTtt
    End Sub
    Voici la solution qui fonctionne...

  4. #4
    Expert éminent 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
    Par défaut
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Col As String
     
    Col = Left(Target.Address(0, 0), 1)
     
    If InStr("N39_O39_P39_Q39_R39", Target.Address(0, 0)) > 0 Then
        ActiveSheet.OLEObjects("cb" & Col & "40").Visible = Target.Value = "Sieving"
        If Target.Value = "" Then ActiveSheet.OLEObjects("cb" & Col & "40").Object.Value = ""
    End If
     
    If InStr("G37_J37_M37_N37_O37_P37_Q37_R37", Target.Address(0, 0)) > 0 Then
        If Target.Value <> "" Then
            cbN40.AddItem Target.Value
            cbO40.AddItem Target.Value
            cbP40.AddItem Target.Value
            cbQ40.AddItem Target.Value
            cbR40.AddItem Target.Value
        End If
    End If
    End Sub
    Suffit

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 533
    Par défaut
    Ok merci

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

Discussions similaires

  1. Macro de Mise à jour ne répercute pas les données
    Par jarault dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 05/05/2008, 16h50
  2. Réponses: 1
    Dernier message: 08/04/2008, 13h46
  3. Réponses: 2
    Dernier message: 22/01/2008, 02h55
  4. Mise à jour ComboBox
    Par ftcalvados dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 10/01/2008, 14h42
  5. [Mail] envois de mail en HTML mais pas tous compatible
    Par clad strife dans le forum Langage
    Réponses: 3
    Dernier message: 26/03/2007, 21h20

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