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 :

[E-03] Renvoyer des chiffres correspondant à une plage de cellules


Sujet :

Macros et VBA Excel

  1. #1
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 71
    Par défaut [E-03] Renvoyer des chiffres correspondant à une plage de cellules
    Bonsoir,
    j'utilise le code suivant :
    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
    Sub cherche_mot_dans_cellule()
     
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim p As Integer
    Dim mot As String
    Dim test As String
     
     
    p = 1
     
    Do While p > 0
     
        'cherche pour la colonne i, de la ligne 4 à 328, si le mot "disponible" est inclu dans la chaîne de caractères
        'si c'est le cas renvoie 1 dans la colonne j, sinon 0.
        i = InputBox("Entre le numéro de colonne dans lequel tu veux faire la recherche")
        j = InputBox("Entre le numéro de colonne dans lequel figurera le résultat de la recherche")
        mot = InputBox("Entre le mot ou l'expression exacte que tu veux chercher dans la colonne " & i)
     
        k = 4
        For k = 4 To 328
     
            If Cells(k, i).Value Like "*" & mot & "*" Then
     
            Cells(k, j).Value = 1
            Else: Cells(k, j).Value = 0
     
            End If
        Next k
     
        test = InputBox("Veux-tu tester une autre expression? (oui/non)")
        If test = "oui" Then
        p = 1
        Else: p = 0
        End If
    Loop
     
    End Sub
    comme vous le voyez il me permet de tester la recherche d'un mot dans une colonne.
    Je voudrais l'améliorer sur un point particulier :
    dans cet exemple il va chercher les lignes 4 à 428 que je dois remplir manuellement dans la macro. Je voudrais par exemple mettre un 4ème inputbox du style "Sélectionnez la plage de cellules dans lesquelles faire la recherche" de façon à ce que la macro récupère les lignes et les mette dans k.
    Je ne sais pas si j'ai été suffisamment clair...j'espère que oui!

  2. #2
    Membre émérite
    Homme Profil pro
    retraité
    Inscrit en
    Mai 2006
    Messages
    542
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : retraité

    Informations forums :
    Inscription : Mai 2006
    Messages : 542
    Par défaut
    Bonsoir à tous
    Bonsoir kokoVBA

    Si j'ai bien compris, essaie :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
    On Error Resume Next
    reponse = InputBox("entrez une plage sous la forme A4:E428")
    Range(reponse).Select
    End Sub
    et tu adaptes

    Eric

  3. #3
    Membre chevronné
    Profil pro
    Inscrit en
    Février 2007
    Messages
    491
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2007
    Messages : 491
    Par défaut
    bonjour,

    S' il n y a pas de saut de ligne ds la colonne de recherche

    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
     
    Sub cherche_mot_dans_cellule()
     
    Dim i As Integer
    Dim j As Integer
    Dim k As Integer
    Dim p As Integer
    Dim mot As String
    Dim test As String
    Dim l As Integer
     
    p = 1
     
    Do While p > 0
     
        'cherche pour la colonne i, de la ligne 4 à 328, si le mot "disponible" est inclu dans la chaîne de caractères
        'si c'est le cas renvoie 1 dans la colonne j, sinon 0.
        i = InputBox("Entre le numéro de colonne dans lequel tu veux faire la recherche")
        j = InputBox("Entre le numéro de colonne dans lequel figurera le résultat de la recherche")
        mot = InputBox("Entre le mot ou l'expression exacte que tu veux chercher dans la colonne " & i)
        k = InputBox("entrer le début de la ligne de recherche")
        k = CInt(k)
     
        For l = k To Cells(k, i).End(xlDown).Row
     
            If Cells(l, i).Value Like "*" & mot & "*" Then
     
            Cells(l, j).Value = 1
            Else: Cells(l, j).Value = 0
     
            End If
        Next l
     
        test = InputBox("Veux-tu tester une autre expression? (oui/non)")
        If test = "oui" Then
        p = 1
        Else: p = 0
        End If
    Loop
     
    End Sub

  4. #4
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 71
    Par défaut
    Bonsoir edelweisseric,

    merci pour ta réponse mais en fait ce que je voudrais (si c'est possible) c'est que l'utilisateur n'ait pas à saisir manuellement la plage sous la forme "A4:E428" mais plutôt qu'il sélectionne cette plage et que ça renvoie quelque chose du type "4,428" à exploiter par la suite dans des variables préalablement déclarées. Ex : n1=4 et n2=428,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    dim n1 as integer
    dim n2 as integer
    puis

    Je précise que la plage comprend (n2-n1+1) lignes dans une seule colonne.

  5. #5
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Bonjour,
    Pourquoi pas ? Tu le défini en variable ensuite un for each devrait te convenir.

  6. #6
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 71
    Par défaut
    Bonjour à tous,

    merci patbou pour ta réponse, effectivement ça marche bien à condition qu'on ait retraité la base pour qu'il n'y ait pas de saut de ligne. Je vais donc pouvoir cliquer sur résolu, même si la solution est un peu différente de ce que j'avais envisagé.
    Fvandermeulen, je n'ai pas encore testé ta proposition, mais peux-tu préciser comment tu penses exploiter le résultat de
    à tous pour votre aide

  7. #7
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Voici un exemple, j'ai scindé l'action en deux temps (pour mon test deux boutons)
    -Sélection de la plage
    -Recherche du mot
    L'utilisateur doit donc cliquer deux fois, il y a surement moyen d'éviter ça mais je te laisse le soin de chercher si nécessaire.

    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
    Sub Def_Plage()
    MsgBox ("Selectionner la plage dans laquelle tu veux faire la recherche, ensuite clicker sur Chercher") 'Chercher = bouton sur la feuille
    End Sub
     
    Sub ChercheMot()
     
    MaPlage = Selection.Address
    mot = InputBox("Entre le mot ou l'expression exacte que tu veux chercher dans la plage " & MaPlage)
     
    For Each cell In Range(MaPlage)
     
            If cell.Value Like "*" & mot & "*" Then
     
            cell.Value = 1
            Else: cell.Value = 0
     
            End If
    Next
     
    End Sub
    Bonne continuation

    PS j'ai enlevé la partie 'test' d'une autre expression inutile pour mon exemple.

  8. #8
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 71
    Par défaut
    Ok, merci pour l'idée!
    Je vais tester et voir comment on peut faire ça en une fois.
    In fine, le code pourrait ressembler à ça :
    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
    Sub cherche_mot_dans_cellule_v3()
     
    Dim j As Integer
    Dim p As Integer
    Dim mot As String
    Dim test As String
    Dim l As Integer
    Dim cel As Range
    Dim maplage As Range
     
    p = 1
     
    Do While p > 0
     
    MsgBox ("Selectionner la plage dans laquelle tu veux faire la recherche")
    maplage = Selection.adress
     
        j = InputBox("Entre le numéro de colonne dans lequel figurera le résultat de la recherche")
        mot = InputBox("Entre le mot ou l'expression exacte que tu veux chercher")
     
     
        For Each cell In Range(maplage)
     
            If cell.Value Like "*" & mot & "*" Then
     
            cell.Value = 1
            Else: cell.Value = 0
     
            End If
        Next
     
     
        test = InputBox("Veux-tu tester une autre expression? (oui/non)")
        If test = "oui" Then
        p = 1
        Else: p = 0
        End If
    Loop
     
    End Sub
    sauf que là il va y avoir un problème après mon premier msgbox : il faudrait que je puisse sortir de la macro pour faire la sélection des cellules...

  9. #9
    Membre Expert Avatar de Fvandermeulen
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    1 869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Juillet 2007
    Messages : 1 869
    Par défaut
    Exactement, je sais qu'il y a moyen, peut-être avec 'Wait' mais désolé pas trop le temps de chercher...
    Attention j'ai vu dans ton dernier code qu'il manque un D à address quand tu défini 'MaPlage'.
    C'est ma faute d'ailleurs dans ma première intervention !
    Je dis ça c'est pour pas que tu cherches après pourquoi ça marche pas

  10. #10
    Membre confirmé
    Inscrit en
    Février 2009
    Messages
    71
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 71
    Par défaut
    Merci!
    J'ai pas trop de temps non plus cet aprèm mais je regarderai asap!

Discussions similaires

  1. Sélectionner des caractères d'une plage de cellules
    Par AsmaaSmile25 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 20/01/2015, 19h35
  2. faire la somme des valeurs d'une plage de cellule
    Par Iichham dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 29/06/2011, 15h35
  3. [XL-2003] Insérer des commentaires dans une plage de cellules
    Par C Blaise dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 15/04/2011, 10h59
  4. Affichage des données d'une plage de cellules
    Par sat478 dans le forum Excel
    Réponses: 3
    Dernier message: 02/05/2008, 18h49
  5. Affichage des chiffres dans une phrases arabe
    Par omda dans le forum Oracle
    Réponses: 4
    Dernier message: 30/09/2005, 14h36

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