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 :

Appliquer une formule NBsi en vba dans un textbox pour une valeur contenue dans un autre textbox [XL-2007]


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Homme Profil pro
    chef de service
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : chef de service

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Points : 45
    Points
    45
    Par défaut Appliquer une formule NBsi en vba dans un textbox pour une valeur contenue dans un autre textbox
    Bonsoir le forum

    Novice en programmation si quelqu'un peut m'aider je le remercie.

    j'ai créé un userform avec plusieurs controls ( textbox, listbox, et combo) qui sont alimentés par une fonction recherche depuis plusieurs bases de données.
    Ces controls vont incrémentés une feuille excel.

    Ci-joint une partie du code:
    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
    Dim i As Byte
    Dim Cel As Range[/SIZE][/COLOR][SIZE=1][COLOR=#0000ff]For i = 0 To ListBox2.ListCount - 1
    If ListBox2.Selected(i) = True Then MsgBox ListBox2.List(i)
    Range("a65536").End(xlUp).Offset(1, 0).Value = DateSaisie
        Range("b65536").End(xlUp).Offset(1, 0).Value = TextBox1
        Range("c65536").End(xlUp).Offset(1, 0).Value = TextBox1
        'Range("a65536").End(xlUp).Offset(1, 0).Value = DateSaisie
        Range("e65536").End(xlUp).Offset(1, 0).Value = ListBox2.List(i)
        Range("f65536").End(xlUp).Offset(1, 0).Value = Module
        Range("g65536").End(xlUp).Offset(1, 0).Value = Thème
        Range("h65536").End(xlUp).Offset(1, 0).Value = Thémes_Manœuvres
        Range("i65536").End(xlUp).Offset(1, 0).Value = Temps_prat.Value
    Next i
    For Each Cel In Range("b1:b" & Cells(Rows.Count, "b").End(xlUp).Row)
        If IsDate(Cel) Then Cel = Format(Cel, "mmmm")
    Next Cel
    For Each Cel In Range("c1:c" & Cells(Rows.Count, "c").End(xlUp).Row)
        If IsDate(Cel) Then Cel = Format(Cel, "yyyy")
        Next Cel
    'ai 2 questions:
    Q1: lorsque je valide les données de la listbox1 vers la listbox2 les lignes de la listbox1 restent sélectionnées?
    Nom : listbox.JPG
Affichages : 243
Taille : 26,5 Ko
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub CommandButton5_Click()
    For i = 0 To ListBox1.ListCount - 1
    If ListBox1.Selected(i) = True Then ListBox2.AddItem ListBox1.List(i)
    If ListBox1.Selected(i) = True Then MsgBox ListBox1.List(i)
    Next i 
    End Sub
    je voudrais une fois le transfert fait que la listbox1 redevienne normale ( sans noms sélectionnés).

    Q2: J'ai une textbox nommée Module qui reçoit des données de types "inc" ou "sap" ou "opd" etc et je voudrais appliquer dans ma textbox nommées actions de formation la formule =NB.SI(F3;"Sap")+NB.SI(F3;"Opd")+NB.SI(F3;"Inc")+NB.SI(F3;"Sr")+NB.SI(F3;"Fdf")+NB.SI(F3;"Cad") mais en VBA de sorte que la valeur de ma textbox qui sera transférée dans la feuille soit du 1 ou du 0.

    L'objectif étant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("h65536").End(xlUp).Offset(1, 0).Value = action_formation.Value
    la valeur étant du 1 ou du 0 .
    Sinon je suis obligé de copier la formule dans la feuille sur 20000 lignes.
    J'ai réussi à convertir mes dates en mois et en année, la méthode n'est pas très orthodoxe mais ça fonctionne (40000 formules de moins dans la feuilles) oufffff.....
    Par contre là, je sèche vraiment et une aide serait la bienvenue

    Merci d'avance

  2. #2
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Bonjour,

    Pour la ListBox, comme elle est en sélection multiple, tu peux utiliser ces deux lignes, le fait de remettre la sélection simple supprime la sélection des éléments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    Private Sub UserForm_Click()
     
        Me.ListBox1.MultiSelect = 0
        Me.ListBox1.MultiSelect = 1
     
    End Sub
    Pour la question 2, ou tu utilise ta formule :
    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
     
    Private Sub UserForm_Click()
     
        Dim Cel As Range
        Dim Retour As Integer
     
        Set Cel = Range("F3")
     
        With Application
     
            Retour = .CountIf(Cel, "Sap") + _
                     .CountIf(Cel, "Opd") + _
                     .CountIf(Cel, "Inc") + _
                     .CountIf(Cel, "Sr") + _
                     .CountIf(Cel, "Fdf") + _
                     .CountIf(Cel, "Cad")
     
        End With
     
        MsgBox Retour
     
    End Sub
    Ou tu te crée un code qui retourne le résultat escompté :
    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
     
    Private Sub UserForm_Click()
     
        Dim Tbl
        Dim I As Integer
        Dim Retour As Integer
     
        Tbl = Array("Sap", "Opd", "Inc", "Sr", "Fdf", "Cad")
     
        For I = 0 To UBound(Tbl)
     
            If Cells(3, 6).Value = Tbl(I) Then Retour = 1: Exit For
     
        Next I
     
        MsgBox Retour
     
    End Sub

  3. #3
    Membre du Club
    Homme Profil pro
    chef de service
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : chef de service

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Points : 45
    Points
    45
    Par défaut Réponse à thése
    Bonjour

    Merci Thèse pour la réponse, c'est vraiment gentil à vous de m'accorder un peu de votre temps

    Concernant la listbox c'est super ça fonctionne parfaitement.
    Pour la question 2 ça ne fonctionne pas.
    Nom : text box.JPG
Affichages : 332
Taille : 31,3 Ko
    En fait je me suis mal expliqué, je souhaiterais que lorsque des données de types "inc" ou "sap" ou "opd" etc figure dans la textbox module la textebox action renvoie 1 ou 0

    Exemple en traduction littérale: si [textbox module =("Sap", "Opd", "Inc", "Sr", "Fdf", "Cad")] alors [textebox action =1 si non =0]
    Un genre de condition vrai/faux entre deux combos en code VBA

    Encore merci pour votre aide

  4. #4
    Expert éminent
    Homme Profil pro
    Inscrit en
    Août 2010
    Messages
    3 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Août 2010
    Messages : 3 453
    Points : 6 871
    Points
    6 871
    Par défaut
    Re,

    Avec le code que je t'ai donné en second, il est facile de l'adapter. Dans l'hypotèse où ton TextBox s'appelle "TxtModule" et que ton bouton s'appelle "BtnValider" :
    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
     
    Private Sub BtnValider_Click()
     
        Dim Tbl
        Dim I As Integer
        Dim Retour As Integer
     
        Tbl = Array("Sap", "Opd", "Inc", "Sr", "Fdf", "Cad")
     
        For I = 0 To UBound(Tbl)
     
            If TxtModule.Text = Tbl(I) Then Retour = 1: Exit For
     
        Next I
     
        MsgBox Retour
     
    End Sub

  5. #5
    Membre du Club
    Homme Profil pro
    chef de service
    Inscrit en
    Mars 2015
    Messages
    50
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France, Corse (Corse)

    Informations professionnelles :
    Activité : chef de service

    Informations forums :
    Inscription : Mars 2015
    Messages : 50
    Points : 45
    Points
    45
    Par défaut re
    Super,
    vraiment merci beaucoup vous m'avez été d'une grande aide.

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

Discussions similaires

  1. Réponses: 13
    Dernier message: 29/03/2016, 21h39
  2. Problème dans une formule écrite en vba
    Par olivverte dans le forum Excel
    Réponses: 6
    Dernier message: 05/12/2013, 15h49
  3. [AC-2007] Problème de syntaxe pour une formule SQL en VBA
    Par franckimmo dans le forum IHM
    Réponses: 4
    Dernier message: 12/02/2010, 10h54
  4. problème dans l'écriture d'une formule
    Par jackall dans le forum Macros et VBA Excel
    Réponses: 29
    Dernier message: 19/06/2008, 14h50
  5. Réponses: 3
    Dernier message: 13/06/2006, 16h36

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