XL 2019 Formule VLOOK dans un Userform

sgangbadjo

XLDnaute Nouveau
Bonsoir a tous

Please aider moi a corriger le code ci-dessous. J'essaie depuis une journee d'introduire une recherche avec VLOOK dans une formulaire. Mais j'ai un message d'erreur.

Private Sub UserForm_Click()

If Me.TextBox1 <> 0 Then

Me.TextBox2 = Application.WorksheetFunction.VLookup(Me.TextBox1.Value, Sheets("Feuil1").Range("A2:C8"), 2, False)

End If

End Sub
 

sgangbadjo

XLDnaute Nouveau
Merci @Rouge,

J'ai essayé ce code, mais même quelque soit le critère de recherche (vrai ou faux), l'exécution s'arrête.
Jai ajouté une action après Else mais l'éxécution du code s'arrete avant cette étape.

S'il y a une possibilité d'interaction, ce serait genial

Private Sub CommandButton2_Click()


Derlig = Range("A" & Rows.Count).End(xlUp).Row
mois_saisie = InputBox("Qual é o mês da apreensão?", "Alteração de dados")
code_ecole = InputBox("O que é o código da escola", "Código da escola")
critere = mois_saisie & "-" & code_ecole
On Error Resume Next
Position = Application.WorksheetFunction.Match(critere, Sheets("Ledger").Range("A1:A" & Derlig), 0)
If Position = "" Then
Exit Sub
Else
ComboBox1_mois.Value = "SUCCES"

End If

End Sub
 

sgangbadjo

XLDnaute Nouveau
Pouvez-vous déposer un extrait de votre fichier (sans données confidentielles)?
Oui @Rouge,

J'ai finalement opté pour une base de données avec deux formulaires (UserForm 1 pour entrer les données et UserForm2 pour la modification des données (Sheets ("Ledger").

Le Userform 2 doit modifier "écraser" les données après modification tandis que "Userform1" crée une nouvelle ligne dans la base.

Le Bug actuel est:
UserForm2 : Lorsque la Condition du "IF" n'est pas vérifiée, la boite de dialoge prévue a cet effet ne s'affiche pas et le formulaire bug. Mais quand la condition est vérifié, le formulaire fonctionne.

Merci pour votre aide

Je n'arrive pas a joindre le fichier en raison de sa taille. Ci-dessous, le lien pour le telecharger


Merci pour les ameliorations que vous pouvez me suggerer
 

Rouge

XLDnaute Impliqué
Bonjour,

Vous avez utilisé un tableau structuré, très bien, mais pourquoi avoir désigné l'ensemble des lignes de la feuille dans ce tableau, seules les lignes occupés doivent faire partie du tableau. le tableau s'agrandira automatiquement lorsque vous ajouterez des lignes.
C'est aussi pour cela que votre fichier est énorme, alors qu'en réalité il ne pèse que 56ko.

Votre fichier avec le code corrigé.

Cdlt
 

Pièces jointes

  • sgangbadjo_Formule VLOOK dans un Userform.xlsm
    55.4 KB · Affichages: 10

sgangbadjo

XLDnaute Nouveau
Bonjour,

Vous avez utilisé un tableau structuré, très bien, mais pourquoi avoir désigné l'ensemble des lignes de la feuille dans ce tableau, seules les lignes occupés doivent faire partie du tableau. le tableau s'agrandira automatiquement lorsque vous ajouterez des lignes.
C'est aussi pour cela que votre fichier est énorme, alors qu'en réalité il ne pèse que 56ko.

Votre fichier avec le code corrigé.

Cdlt
Merci pour le resultat, c'est genial

J'ai encore du chemin à parcourir dans l'apprentissage :)
 

Rouge

XLDnaute Impliqué
Bonjour,

Vous avez dépassé la quantité de mémoire allouée, probablement dû à une boucle infinie, mais à la suite de quelle action?
Il doit manquer dans votre code une ligne qui limite ces actions.

Dans le code de la macro en question, mettez un point d'arrêt sur une ligne (avec la touche F9)
Lancez la macro, le programme va s'arrêter au niveau du point d'arrêt, continuez avec la touche F8 (lecture du code en pas à pas), et observez ce qui se passe( promenez la souris sans cliquer au-dessus des termes qui constituent la ligne de code) vous verrez apparaître leur valeur à ce moment là et essayez d'analyser la situation.

Quelques informations utiles.
-Pour mettre ou retirer un point d'arrêt, se positionner sur une ligne et faire F9.
-Pour lire le code en pas à pas, cliquer autant de fois sur la touche F8 pour faire avancer dans la lecture du code.
-la touche F5 exécute le code en entier.

Cdlt
 

sgangbadjo

XLDnaute Nouveau
Bonjour,

Vous avez dépassé la quantité de mémoire allouée, probablement dû à une boucle infinie, mais à la suite de quelle action?
Il doit manquer dans votre code une ligne qui limite ces actions.

Dans le code de la macro en question, mettez un point d'arrêt sur une ligne (avec la touche F9)
Lancez la macro, le programme va s'arrêter au niveau du point d'arrêt, continuez avec la touche F8 (lecture du code en pas à pas), et observez ce qui se passe( promenez la souris sans cliquer au-dessus des termes qui constituent la ligne de code) vous verrez apparaître leur valeur à ce moment là et essayez d'analyser la situation.

Quelques informations utiles.
-Pour mettre ou retirer un point d'arrêt, se positionner sur une ligne et faire F9.
-Pour lire le code en pas à pas, cliquer autant de fois sur la touche F8 pour faire avancer dans la lecture du code.
-la touche F5 exécute le code en entier.

Cdlt
Merci beaucoup pour l'orientation
 

sgangbadjo

XLDnaute Nouveau
Bonsoir @Rouge,

J'essaie d'améliorer le code ci-dessous du formulaire 1 en ajoutant deux contraintes :
1- Avant le transfert des données, faire une vérification avec le critère (ComboBox1_mois.Value &"-"&textbox1) dans la colonne A du tableau afin de confirmer que les données n'avaient pas été précédemment saisies. Si c'est le cas, un msgbox pour informer l'utilisateur

2- Je souhaiterais dans la mesure du possible contraindre l'utilisateur a remplir toutes les cellules du formulaire 1. Idem pour le formulaire 2.

3- Savoir comment contrainte l'utilisateur a respecter un format donné pour chaque cellule du formulaire (numérique ou Texte)

Merci par avance pour l'appui


Private Sub CommandButton1_Click()

'code de transfer de donnees du forrmulaire vers le journal avec un total de 30 Textbox

Dim derligne&, i&, c&

If MsgBox("Confirma a adição de dados?", vbYesNo, "confirmation") = vbYes Then
With Sheets("Ledger")
derligne = .Cells(.Rows.Count, "B").End(xlUp).Row + 1
.Cells(derligne, 2) = ComboBox1_mois.Value
For i = 1 To 30
.Cells(derligne, i + 2) = Controls("textbox" & i)
Next
End With
End If

With Sheets("Ledger")
For c = 31 To 35
.Cells(derligne, c + 2) = Controls("ComboBox" & c)
Next
End With

Unload Me
End Sub
 

Pièces jointes

  • sgangbadjo_Formule VLOOK dans un Userform.xlsm
    53.9 KB · Affichages: 3

Rouge

XLDnaute Impliqué
Bonjour,

Pour le formulaire 1, appliquer le même principe pour le formulaire 2:
1)- le code de CommandButton1 pour contrôler si les données sont déjà existantes et 2-) vérifier si toutes les données ont été saisies.
VB:
Private Sub CommandButton1_Click()
    'code de transfer de donnees du formulaire vers le journal avec un total de 30 Textbox
    Dim DerLigne&, i&, c&
    DerLigne = Sheets("Ledger").Range("A" & Rows.Count).End(xlUp).Row + 1
    If Application.WorksheetFunction.CountIf(Sheets("Ledger").Range("A1:A" & DerLigne), ComboBox1_mois.Value & "-" & TextBox1.Value) = 0 Then
        If MsgBox("Confirma a adição de dados?", vbYesNo, "confirmation") = vbYes Then
            With Sheets("Ledger")
                'vérifie si toutes les textbox sont remplies
                For i = 1 To 30
                    If Controls("Textbox" & i) = "" Then
                        MsgBox "Por favor preencha todos os campos antes de validar"
                        Exit Sub
                    End If
                Next i
                'vérifie si toutes les combbox sont remplies
                For i = 31 To 32
                    If Controls("Combobox" & i) = "" Then
                        MsgBox "Por favor preencha todos os campos antes de validar"
                        Exit Sub
                    End If
                Next i
                'Remplissage
                .Cells(DerLigne, 2) = ComboBox1_mois.Value
                For i = 1 To 30
                    .Cells(DerLigne, i + 2) = Controls("textbox" & i)
                Next
                For c = 31 To 35
                    .Cells(DerLigne, c + 2) = Controls("ComboBox" & c)
                Next
            End With
         End If
    Else
        MsgBox "A referência ""mês - código escolar"" já existe"
    End If
    
    Unload Me
    End Sub

3)- Savoir comment contraindre l'utilisateur à respecter un format donné pour chaque cellule du formulaire (numérique ou Texte)
A reproduire pour chaque TextBox et chaque ComboBox, exemple avec la Textbox2 et Textbox26:
Code:
Private Sub TextBox2_Change() 'Vérifie si la textbox est bien au format texte
    If IsNumeric(TextBox2.Value) Then
        MsgBox "Por favor introduza um valor em formato de texto"
        Exit Sub
    End If
End Sub

Private Sub TextBox26_Change() 'Vérifie si la textbox est bien au format numérique
    If Not IsNumeric(TextBox26.Value) Then
        MsgBox "Por favor introduza um valor numérico"
        Exit Sub
    End If
End Sub

Je n'ai pas eu le temps de tout vérifier.

Cdlt
 

sgangbadjo

XLDnaute Nouveau
Bonsoir @Rouge et Tous,

J'ai débuté l'exploitation de ma base de données et je rencontre quelques difficultés qui nécessite votre appui
1) J'ai inséré un feuille Dashboard dans le fichier de la base de données a travers Power Pivot. Mais chaque fois que j'actualise les données à travers le Bouton "refresh" ou "Refresh All", le format des données sources se réinitialise et prend le format texte. Je perds donc toutes les indicateurs définis de même que les graphiques. Je dois reprendre alors le format des colonne dans le cube après chaque actualisation des données.

2) Est il possible de faire disparaitre tous les menues de la feuille d'accueil du fichier afin de n'afficher à l'utilisateur que les boutons créés.

3) J'ai partagé le fichier à travers un dossier dans mon Cloud professionnel à une équipe de 5personnes qui sont dans différentes régions oula connexion n'est pas toujours disponible. A la phase des tests, nous avons perdu plusieurs fois des données lors des synchronisation. Est ce que vous avez une recommandation pour ce type d'usage afin de ne pas perdre des données lors de synchronisation (Quand la connexion est disponible)

Merci pour votre appui

Le fichier est disponible sur ce lien

 

ChTi160

XLDnaute Barbatruc
Bonjour sganbadjo
Bonjour le Fil ,le Forum
Bon pas tout compris Lol
mais je me suis dit si on doit faire une recherche (Userform2)
On pourrait passer par ce que j'ai fait ( Non finalisé ) juste pour voir ce que l'on peut avoir pour trier)
Bonne journée
jean marie
 

Pièces jointes

  • School Feeding data base May 2021 Cthi160.xlsm
    923.6 KB · Affichages: 3

sgangbadjo

XLDnaute Nouveau
Bonjour @ChTi160,

Merci beaucoup pour ton retour. La solution me semble assez intéressante. Je vais l'explorer et vous revenir en cas de difficulté.
Si vous avez des recommandations pour l'utilisation du fichier en Cloud sachant que les utilisateurs ne sont pas toujours connectés, elles seront très appréciées.
Pour l'instant, il nous arrive de perdre des données lors des synchronisations.
 

Discussions similaires

Réponses
5
Affichages
605
Réponses
17
Affichages
824

Statistiques des forums

Discussions
315 138
Messages
2 116 684
Membres
112 835
dernier inscrit
collallapsus