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 :

CTRL F - ne se limite pas à la feuille active


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 656
    Par défaut CTRL F - ne se limite pas à la feuille active
    Bonjour à tous,

    Ça fait déjà un moment que je rame sur un problème.

    J'ai trois feuilles visibles (par exemple : A - B - C).
    Je lance la macro suivante pour trouver et sélectionner plus rapidement des noms (situés dans la colonne C) en fonction de la totalité ou d'une portion de leurs caractères. En fait, j'ai "automatisé" un CTRL F.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        With ActiveSheet
            Range("C26:C500").Select
            Application.Dialogs(xlDialogFormulaFind).Show
     
            Rows(ActiveCell.Row).Select
            ActiveCell.Offset(0, 7).Select
        End With
    Ça marche plutôt bien. Chaque nom est bien identifié en fonction de son contenu. Problème : si je continue le recherche, elle se poursuit sur les feuilles suivantes (B et C, etc.) !

    Je ne comprends pas pourquoi ladite recherche ne s'exécute pas exclusivement sur la feuille active alors que j'ai bien commencé le code par "with ActiveSheet".
    J'ai regardé dans les options de CTRL F (avec l'enregistreur de macro) mais n'ai rien trouvé.
    Un grand merci d'avance pour votre aide.
    Cdt

    PS : J'ai essayé une autre méthode avec quelque chose du genre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    With ActiveSheet
     
        On Error Resume Next
        Var = InputBox("Mot à rechercher ?")
        If Var = "" Then Exit Sub
     
        Set MotTrouvé = Cells.Find(What:="Var", After:=ActiveCell, LookIn:=xlFormulas, LookAt:= _
            xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, MatchCase:=False _
            , SearchFormat:=False).Activate
     
        If Not MotTrouvé Is Nothing Then
    Ça me renvoie le premier nom qui correspond à la recherche et je ne vois absolument pas comment passer au second ! A vrai dire, ça me paraît plus compliqué que la première solution.

    J'aime bien la première méthode mais je voudrais simplement qu'elle se limite à la seule feuille active.

  2. #2
    Membre chevronné Avatar de Kiouane
    Homme Profil pro
    Étudiant
    Inscrit en
    Avril 2016
    Messages
    198
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 33
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2016
    Messages : 198
    Par défaut
    Avec le With il faut mettre des points avant Range => .Range()

  3. #3
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Bonsoir
    Pourquoi a-t-on "UserForm_Initialize" et "UserForm_Activate" et non ""UserForm1_Initialize" et "UserForm1_Activate" ? Imaginons que j'aie 3 UF : Userform1, Userform2, Userform3. Comment l'activation ou l'initialisation peut "reconnaître" son propre UF ??
    poses-toi la même question pour cet événement entre autres, "Private Sub Worksheet_Activate()", pourquoi il n'y a pas de nom de feuille, tu trouveras la réponse
    "
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  4. #4
    Membre éprouvé
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2015
    Messages
    72
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2015
    Messages : 72
    Par défaut
    A mon avis la raison est toute bête, tu met With ActiveSheet mais tu n'utilises pas le with, en effet, pour l'utiliser il faut mettre un . devant ses objets tel que Range() -> .Range() dans le premier cas c'est un range là où il est le second cas le Range de la dite feuille.

    Je pense pas être très clair mais dans tous les cas le with est un bon réflexe mais si tu mets pas de points il ne sert a rien.

    DeathZarakai.

    P.S. : ce qui donnerait sa :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        With ActiveSheet
            .Range("C26:C500").Select
            Application.Dialogs(xlDialogFormulaFind).Show
     
            .Rows(ActiveCell.Row).Select 'pas oublié ici non plus!
            ActiveCell.Offset(0, 7).Select
        End With

  5. #5
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    a
    à part que cette partie
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    ...
    .Rows(ActiveCell.Row).Select 'pas oublié ici non plus!
            ActiveCell.Offset(0, 7).Select
    ...
    me laisse dubitatif comme aurait dit Desproges, et si tu te contentais de
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            ActiveCell.Offset(0, 7).Select
    et encore voir pourquoi "Select"
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  6. #6
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Bonjour,

    Personnellement, j'utilise la 2e méthode avec Cells.FInd
    Pour rechercher d'autres valeurs, il y a FindNext (à voir dans ton aide F1)
    Par contre, tu déclares une variable Var et celle-ci de devrait pas contenir de guillemets ici
    Cells.Find(What:="Var"

  7. #7
    Membre Expert
    Inscrit en
    Octobre 2010
    Messages
    1 401
    Détails du profil
    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 401
    Par défaut
    Voici une autre technique :
    Fichiers attachés Fichiers attachés

  8. #8
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    J'y vais aussi de ma petite contribution avec ce 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
    20
    21
    Sub Macro1()
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim BE As Variant 'déclare la variable BE (Boîte d'Entrée)
    Dim I As Integer 'déclare la variable I (Incrément)
    Dim T As String 'déclare la variable T (Texte)
     
    TV = ActiveSheet.Range("C26:C500") 'définit le tableau des valeurs TV
    T = "Aucun " 'définit le Texte T
    deb: 'étiquette
        BE = Application.InputBox("Tapez le nom à rechercher !", "NOM", Type:=2) 'définit la boîte d'entrée BE
        If BE = False Then Exit Sub 'si bouton "Annuler", sot de la procédure
        If BE = "" Then GoTo deb 'si non renseignée, retourne à l'étiquette "deb"
        For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
            If UCase(TV(I, 1)) = UCase(BE) Then 'condition : si la données ligne I, colonne 1 de TV est égale à valeur de la boîte d'entrée BE
                ActiveSheet.Cells(25 + I, 8).Select 'sélectionne la cellule en colonne 8 (=H) de la ligne correspondante
                T = "Plus de " 'redéfinit le texte T
                If MsgBox("Atteindre l'occurrence suivante ?", vbYesNo, "SELECTION") = vbNo Then Exit Sub 'si "Non" au message, sort de la procédure
            End If 'fin de la condition
        Next I 'prochaine ligne de la boucle
        MsgBox T & Chr(34) & BE & Chr(34) & " dans la zone de recherche !" 'message
    End Sub

  9. #9
    Membre éclairé
    Homme Profil pro
    Inscrit en
    Janvier 2013
    Messages
    656
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Janvier 2013
    Messages : 656
    Par défaut
    Bonjour,

    J'ai ajouté le "." devant Range. Ça ne change rien, la recherche se poursuit sur les autres feuilles.
    (J'ai enlevé le "Row" ; inutile, en effet).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Sub essai_recherche()
     
        With ActiveSheet
            .ScrollArea = ""
            .Range("C26:C500").Select
            Application.Dialogs(xlDialogFormulaFind).Show
            ActiveCell.Offset(0, 5).Select
        End With
    End Sub
    Je teste vos autres propositions et vous fais un retour.
    Cdt

    Bonjour Thautheme,

    Sauf erreur de ma part, ta proposition ne semble fonctionner que sur le nom entier ; autrement dit, si je saisis le début du nom dans la zone de recherche ou une partie seulement, ça me renvoie qu'il y a rien. S'agissant de la prochaine occurrence, difficile néanmoins de voir si ça marche car, dans mon tableau il n'y a pas de nom en doublon.
    A bientôt ?
    Cdt

    Bonjour Docmarti,
    Ta solution paraît très intéressante. Sans doute vas-tu penser que j'abuse, mais puis-je espérer avoir quelques explications complémentaires concernant le code que tu (m') as envoyé ? Je n'ai pas tout compris.
    Par ailleurs, si le(s) caractère(s) inscrit(s) dans la fenêtre de recherche ne renvoie(nt) à aucun "nom" existant, la zone de recherche est sélectionnée, sans plus.
    Cdt

  10. #10
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2013
    Messages
    3 609
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Alimentation

    Informations forums :
    Inscription : Mai 2013
    Messages : 3 609
    Par défaut
    Si tu mets Activesheet.Cells.Find, la recherche se limitera à cette feuille active
    Tu peux aussi spécifier le nom de la feuille et la ou les colonnes ou la plage plutôt que toutes les cellules (Cells)

  11. #11
    Membre Expert Avatar de Thautheme
    Homme Profil pro
    salarié
    Inscrit en
    Août 2014
    Messages
    1 373
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : salarié

    Informations forums :
    Inscription : Août 2014
    Messages : 1 373
    Par défaut
    Bonjour le fil, bonjour le forum,

    Citation Envoyé par jpma75 Voir le message
    Sauf erreur de ma part, ta proposition ne semble fonctionner que sur le nom entier ; autrement dit, si je saisis le début du nom dans la zone de recherche ou une partie seulement, ça me renvoie qu'il y a rien. S'agissant de la prochaine occurrence, difficile néanmoins de voir si ça marche car, dans mon tableau il n'y a pas de nom en doublon.
    Le code modifié et adapté :
    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
    Sub Macro1()
    Dim TV As Variant 'déclare la variable TV (Tableau des Valeurs)
    Dim BE As Variant 'déclare la variable BE (Boîte d'Entrée)
    Dim I As Integer 'déclare la variable I (Incrément)
     
    TV = ActiveSheet.Range("C26:C500") 'définit le tableau des valeurs TV
    deb: 'étiquette
    BE = Application.InputBox("Tapez le nom à rechercher !", "NOM", Type:=2) 'définit la boîte d'entrée BE
    If BE = False Then Exit Sub 'si bouton "Annuler", sort de la procédure
    If BE = "" Then GoTo deb 'si non renseignée, retourne à l'étiquette "deb"
    For I = 1 To UBound(TV, 1) 'boucle sur toutes les lignes I du tableau des valeurs TV
        If InStr(1, TV(I, 1), BE, vbTextCompare) <> 0 Then 'condition : si la données ligne I, colonne 1 de TV contient le texte de BE
            'sélectionne la cellule en colonne 8 (=H) de la ligne correspondante, sort de la procédure
            ActiveSheet.Cells(25 + I, 8).Select: Exit For
        End If 'fin de la condition
    Next I 'prochaine ligne de la boucle
    End Sub

  12. #12
    Expert confirmé Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 71
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Par défaut
    Si c'est la bonne raison, alors il faut que j'arrête de poser des questions bêtes pour ce soir et que j'aille me coucher.
    eh oui ! on mettra ta réflexion sur le compte de la fatigue
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur :resolu: si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

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

Discussions similaires

  1. PB VBA : ecriture dans une feuille active => marche pas !
    Par MeHo_ dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 14/01/2008, 16h47
  2. [CKEditor] CTRL ALT m ( ne fonctionne pas dans FCKEditor )
    Par thierrySch dans le forum Bibliothèques & Frameworks
    Réponses: 1
    Dernier message: 03/07/2007, 16h31
  3. Éléments ne se conformants pas à ma feuille de style
    Par whorian dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 02/05/2007, 10h22
  4. limites d'une feuille excel
    Par tlsetlse dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/11/2006, 10h55

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