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 :

[VBA] rechercher le nombre de fois ou un mot apparait par rapport à un autre mot


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre habitué
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juin 2015
    Messages : 10
    Par défaut [VBA] rechercher le nombre de fois ou un mot apparait par rapport à un autre mot
    Bonjour, J'ai crée un Userform pour remplir une base de donnée Excel.
    Dans celui-ci j'entre un nom et un défaut.
    J'aimerais qu'une messagebox apparaisse lorsque que j'ai entré 2 fois le meme défaut sur le meme nom.

    exemple :
    1ere saisie j'entre :
    nom : toto
    défaut : rayé

    2 eme saisie j'entre :
    nom : toto
    défaut : coupé

    3 eme saisie j'entre :
    nom : toto
    défaut : rayé

    à ce moment là une messagebox apparait pour me signaler que j'entre pour la 2 eme fois cette valeur.

    Quelqu'un aurait une idée ?

    Merci.

  2. #2
    Membre habitué
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juin 2015
    Messages : 10
    Par défaut
    Personne pour un petit coup de main ?

  3. #3
    Inactif  

    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2012
    Messages
    4 903
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2012
    Messages : 4 903
    Billets dans le blog
    36
    Par défaut
    Citation Envoyé par robin74 Voir le message
    Personne pour un petit coup de main ?
    Pas moi, en tout cas. Je vire rouge écarlate dès que je vois base de données et Excel dans la même phrase. Excel n'a jamais été, n'est pas et ne sera jamais un logiciel approprié pour gérer des données.

  4. #4
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    1) Où entres-tu tes valeurs? Dans une cellule? Dans une TextBox?
    2) Tes données sont-elles sauvegardées à un moment donné? Si oui, dans une feuille? Dans un tableau? Dans une listBox?
    Sinon, tu ne peux pas faire la vérification, il te faut au moins une sauvegarde tampon des valeurs rentrées précédemment
    3) Tes données doivent-elles être sensibles à la casse (différence entre majuscule/minuscule, nombre d'espaces avant/après)?
    Cas pour des valeurs entrées dans une TextBox, enregistrées dans une feuille, et sensibles à la casse) :

    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
    Sub text()
           Dim i As Integer, DLig As Integer
           Dim nom As String, Defaut As String
           i = 0
           ThisWorkbook.Worksheets(X).Range("A1").End(xlDown).Row + 1 'Récupère la Première ligne non remplie de la feuille numéro X de ton classeur
           nom = Me.TextBox1.value 'Remplace TextBox1 par le nom de la textBox contenant le nom que tu rentres
           ThisWorkbook.Sheets(X).Select 'Sélectionne la feuille dans laquelle sont tes données (remplace X par la valeur de ta feuille)
           While i < DLig 'Boucle tant que tu n'es pas arrivé à la dernière ligne de tes valeurs enregistrées
               If TRIM(UCase(This Workbook.Sheets(X).Range("A" & i).Value)) = TRIM(UCase(nom)) And TRIM(Ucase(ThisWorkbook.Sheets(X).Range("B" & i).value)) Then
                    'Remplace A et B (garde les guillemets) par les colonnes souhaitées
                    Okay = MsgBox("Valeur en double", vbOKOnly + vbExclamation, "doublon")
                    i = DLig
                End If
            i = i + 1
        Wend
    End Sub

  5. #5
    Membre habitué
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juin 2015
    Messages : 10
    Par défaut
    Bonjour, merci pour votre réponse. J'entre les données dans une textbox. J'ai trouvé une méthode qui fonctionne parfaitement.
    Avant de valider mes données, je copie colle les lignes de ma base contenant le "nom" entré dans ma textbox puis je l'a colle dans un onglet nommé temporaire.
    Dans cette onglet je compte le nombre de fois ou nom apparait puis s'il est supérieur à 1 alors je compte le nombre de fois ou apparait le défaut. Si le nombre de défaut est aussi supérieur à 1 alors je lance une messagebox.

    Exemple :
    Onglet 1 nommé TEST
    j'entredans l'userform (textbox)
    nom : toto
    Defaut : rayure

    Quand je clique sur valider de mon USERFORM
    dans l'onglet "TEST" Recherche les lignes contenant le mot "toto" copié
    Dans l'onglet "Temp" Collé
    Dans l'onglet "Temps" Compter nombre fois ou "Toto" apparait si toto >1 alors compter le nombre de fois ou Rayure apparait
    Si rayure > 1 alors messagebox"Erreur double sa saisie"
    Sinon Messagebox" Validation Ok"

    J'ai testé et celà fonctionne parfaitement.
    Merci.

  6. #6
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Cela fonctionne probablement, sauf que ton code consomme beaucoup en mémoire et en temps (faire du copier-coller c'est très lourd pour une machine). Si tu as tes infos dans une feuille sous la forme :

    Colonne A : NOM                  Colonne B : DEFAUT
    toto                                     rayure
    tata                                     rayure
    tata                                     Souligne
    titi                                       Gras
    alors le code le plus efficace sera :
    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
    Private Sub test()
        Dim i As Integer, DLig As Integer, Okay As Integer
        Dim leNom As String, leDefaut As String
     
        leNom = Me.TextBox1.Value 'Récupère la valeur du nom dans ta textbox
        leNom = Trim(leNom) 'supprime les espaces inutiles avant et après
        leNom = UCase(leNom) 'Ligne à retirer si tu veux que tes noms soient sensibles à la casse
     
        leDefaut = Me.TextBox1.Value 'Récupère la valeur du defaut dans ton autre textbox
        leDefaut = Trim(leDefaut) 'supprime les espaces inutiles avant et après
        leDefaut = UCase(leDefaut) 'Ligne à retirer si tu veux que tes noms soient sensibles à la casse
     
        i = 1 'initialisation de ton compteur pour la boucle
        DLig = ThisWorkbook.Worksheets("TaFeuille").Range("A1").End(xlDown).Row + 1 'Récupère la première ligne vide à la fin de tes données dans la feuille
        While i < DLig
            If Trim(UCase(ThisWorkbook.Worksheets("TaFeuille").Range("A" & i).Value)) = leNom Then
                If Trim(UCase(ThisWorkbook.Worksheets("TaFeuille").Range("B" & i).Value)) = leDefaut Then
                    Okay = MsgBox("Valeur en double", vbOKOnly + vbExclamation, "doublon")
                    Exit Sub
                End If
            End If
            i = i + 1
        Wend
     
        If i = DLig Then
            Okay = MsgBox("Validation OK", vbOKOnly + vbExclamation, "Valide")
        End If
    End Sub

  7. #7
    Membre habitué
    Homme Profil pro
    Analyse système
    Inscrit en
    Juin 2015
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Analyse système

    Informations forums :
    Inscription : Juin 2015
    Messages : 10
    Par défaut
    En effet ce code fonctionne également très bien.
    Merci beacoup !

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

Discussions similaires

  1. Réponses: 9
    Dernier message: 19/09/2008, 11h41
  2. [Vba]recherche infos sur tables
    Par Emcy dans le forum Access
    Réponses: 8
    Dernier message: 09/11/2005, 08h44
  3. Réponses: 2
    Dernier message: 19/10/2005, 15h38
  4. afficher le nombre de fois qu'il y un nombre
    Par laoboy dans le forum Access
    Réponses: 2
    Dernier message: 23/06/2005, 15h39
  5. recherche du nombre d'occurences dans une table
    Par berry dans le forum Requêtes
    Réponses: 3
    Dernier message: 09/01/2004, 20h03

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