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 :

Rechercher et Remplacer


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Par défaut Rechercher et Remplacer
    Bonjour et meilleurs voeux à tout le forum,

    J'ai une macro (que j'ai recupéré)qui me permet de rechercher dans plusieurs feuilles d'un classeur une valeur pour pouvoir modifier la valeur de la cellule suivante.
    Dans la 1ere colonne j'ai le nom d'un fichier (RG1 par ex) qui a une version inscrit dans la colonne suivante ( 77 dans l'exemple) et ce dans plusieurs feuilles. Lorsque je modifie mon fichier RG1 j'ai donc une nouvelle version (78 par ex) et donc je dois mettre à jour l'ensemble de mes feuilles qui contiennent le nom du fichier RG1 avec la version.

    Mon problème est que la modification n'intervient que dans les autres feuilles et non sur la feuille active. J'ai modifié la macro pour intergrer la notion de feuille active mais sans succès. De plus j'ai une autre macro sur le même fichier et qui se nomme de la même manière d'où une erreur de compilation.

    Voici la 1ère Macro dans un module :

    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
    Public Sub ChangeValeur(Target As Range)
        Dim numRG As String
        Dim lgWS As Long
        Dim lgLig As Long
     
        ' N° RG
        numRG = Range("A" & Target.Row)
        ' Boucle sur toutes les feuilles du classeur
        For lgWS = 1 To ThisWorkbook.Worksheets.Count
            With Worksheets(lgWS)
                ' Ne pas traiter la feuille active
                If .Name <> ActiveSheet.Name Then
                    ' Boucle de la ligne 2 à la dernière
                    For lgLig = 2 To .Range("A" & Cells.Rows.Count).End(xlUp).Row
                        ' Si le n° RG correspond
                        If .Range("A" & lgLig).Value = numRG Then
                            .Cells(lgLig, Target.Column).Value = Target.Value
                            Exit For
                        End If
                    Next lgLig
                End If
            End With
        Next lgWS
    End Sub
    et dans chaque feuille

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub Worksheet_Change(ByVal Target As Range)
        If Target.Count > 1 Then Exit Sub
     
        Call ChangeValeur(Target)
    End Sub


    Voici la 2ème macro
    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
    Dim RgCible As Range
    Dim OldValue As Variant
     
    Private Sub Worksheet_Change(ByVal Target As Range)
     
    Dim WksRapport As Worksheet
    Dim Li As Long
     
    Set WksRapport = Worksheets(1)
     
    x = Target.Column
    y = Target.Row
    Z = Cells(y, x - 1)
    If Not Intersect(RgCible, Target) Is Nothing Then
    With WksRapport
    Li = .Range("d65536").End(xlUp).Row + 1
    .Cells(Li, 1) = Cells(y, x - 1).Value
    .Cells(Li, 2) = OldValue
    .Cells(Li, 3) = Target.Value
    .Cells(Li, 4) = Now
    .Cells(Li, 5) = Worksheets(2).Name
    End With
    End If
    End Sub
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
    Set RgCible = Range("info")
    If Not Intersect(RgCible, Target) Is Nothing Then OldValue = Target.Value
    End Sub
    Il y a une 20 de feuilles avec des noms differents.

    Est-il possible de creer un userform pour la 1ère macro presente dans le fichier precedent permettant de rechecher une cellule et donc de modifier la cellule suivante sur l'ensemble des feuilles.

    Merci pour votre aide

  2. #2
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Par défaut
    Je pense que ton code actuel (en plus divisé en plusieurs sub) est trop compliqué pour ce que tu veux faire... que je n'ai pas très bien compris.

    Peux-tu nous expliquer très concrètement ce que tu VEUX faire et je t'enverrai un petit code.
    Par exemple, je n'ai pas bien saisi :

    "Mon problème est que la modification n'intervient que dans les autres feuilles et non sur la feuille active"

    C'est ce que tu veux faire ou ce qui arrive sans que tu le veuilles ?

    Cdt.

  3. #3
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Par défaut
    Bonjour House MD,
    je cherche à créer une fonction qui me permette de changer des elements presents dans plusieurs feuilles et ce en une seule fois.
    Après avoir trouver le nom de cellule recherchée , je souhaite en fait modifier la celulle suivante.
    Ex dans le fichier joint , j'ai 2 Feuilles (Info et Tes), je cherche à modifier la version de RG1 qui apparait dans les 2 feuilles.

    Ce qui doit être remplacé, n'est pas la valeur recherchée mais la valeur de la cellule suivante.
    Dans la 1ere colonne j'ai le nom d'un fichier (RG1 par ex) qui a une version inscrit dans la colonne suivante ( 77 dans l'exemple) et ce dans plusieurs feuilles. Lorsque je modifie mon fichier RG1 j'ai donc une nouvelle version (78 par ex) et donc je dois mettre à jour l'ensemble de mes feuilles qui contiennent le nom du fichier RG1 avec la version.

    Pour info le fichier joint ne prend pas en compte la seconde macro et n'est pas representatif en terme de nombre de feuilles que j'utilise dans mon fichier de travail

    J'espère que mes explications sont un peu plus claires.
    Fichiers attachés Fichiers attachés

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    2 130
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 2 130
    Par défaut
    Salut à tous et bonne et heureuse année 2008
    Salut biloute91

    J'ai une macro (que j'ai recupéré)qui me permet de rechercher dans plusieurs feuilles d'un classeur une valeur pour pouvoir modifier la valeur de la cellule suivante.
    Dans la 1ere colonne j'ai le nom d'un fichier (RG1 par ex) qui a une version inscrit dans la colonne suivante ( 77 dans l'exemple) et ce dans plusieurs feuilles. Lorsque je modifie mon fichier RG1 j'ai donc une nouvelle version (78 par ex) et donc je dois mettre à jour l'ensemble de mes feuilles qui contiennent le nom du fichier RG1 avec la version.

    Mon problème est que la modification n'intervient que dans les autres feuilles et non sur la feuille active. J'ai modifié la macro pour intergrer la notion de feuille active mais sans succès. De plus j'ai une autre macro sur le même fichier et qui se nomme de la même manière d'où une erreur de compilation.
    On va pas commencer l'année ne gueulant, donc juste des conseils.
    - quand tu récupères une macro, essaies de la comprendre tout de suite. En le faisant à ce moment, tu as le topic où tu l'as récupérée, et c'est plus facile d'expliquer sa méthode que de décrypter celles des autres

    - n'utilise jamais les termes réservés par Excel : tu en a une infinité à ta disposition, pourquoi utiliser ceux d'Excel ? Éviter toutes confusion me semble préférable. De plus, quand tu reprends un travail après des mois sans y avoir touché, une variable explicite est toujours la bienvenue.

    - ne mélange pas tes macros : c'est difficile de savoir à quelle(s) feuille(s) les macros workSheet_Change font référence, surtout qu'il y a confli.


    Bon ceci étant dit, ton problème : Désolé, mais je ne suis pas assez intelligent pour comprendre ce que tu attends de tes macros :

    2 fonctionnements de macros automatiques :
    feuille(1) qui contient une plage nommée "info"
    - une sélection d'une cellule de "info" stoque cette valeur en OldValue
    - un changement crée une nouvelle ligne (suivante de la dernière non-vide en D) qui contient les renseignements :
    A : La valeur de la colonne précédente de la cellule modifiée
    B : ancienne valeur
    C : nouvelle valeur
    D : Date/heure de la modif
    E : nom de l'onglet de la 2me feuille
    n'ayant pas assez d'infos, je ne comprends pas tout, mais cette partie, me laisse perplexe :
    - la plage info ? elle commence à partir de F sous peine de bouclage infini
    - la feuille(2) change, mais est-ce bien celle qui nous interesse dont le nom est copié ?

    Sur les autres feuilles :
    - lance une macro qui modifie toutes les autres feuilles, avec un risque de bouclage infini : chaque modification d'une feuille va lancer la macro, et comme on modifie chaque feuille....

    Comme je ne comprends absolument pas ce qu'on doit faire, des éléments de réflexion :

    - Plutôt qu'utiliser les macros automatique du module associé à chaque feuille, utiliser celles du module ThisWorkBook :
    Private Sub Workbook_SheetChange(ByVal Sh As Object, ByVal Target As Range)
    Sh est la feuille concernée
    Target les cellules concernées.
    il existe la même chose pour les sélection.

    - utiliser la propriété EnableEvents pour boquer les évènements pendant un traitement => gérer les erreurs Excel pour empêcher un blocage sans remise ne route

    Un simple fichier d'essais de 3 feuilles avec 4 à 5 lignes me semble nécessaires pour t'apporter une aide correcte. J'en aurais bien fait un, mais j'ai un problème sur mon Excel et je ne veux pas le transmettre à travers un document joint.
    A+

  5. #5
    Membre éclairé
    Profil pro
    Inscrit en
    Novembre 2007
    Messages
    306
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2007
    Messages : 306
    Par défaut
    Je ne comprends tjs pas...

    je cherche à créer une fonction qui me permette de changer des elements presents dans plusieurs feuilles et ce en une seule fois.
    Quel doit être le déclencheur de cette fonction ?
    Un clic
    Un changement dasn une cellule ? Dans quelle cellule ?

    Par ailleurs tu parles d'une "cellule recherchée"... est-ce que la fonction doit aussi chercher ne cellule ?
    Par ailleurs tu me parles d'un "77" qui n'apparit nulle part...

    Essaies de vraiment bien synthétiser la tache que tu veux faire.

    Cdt.

  6. #6
    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,

    si j ai bien décripté .....

    tu veux faire evoluer la version des fichiers a chaque modification de ces derniers.

    QUESTION :
    comment savoir qu 'un fichier a evolué , l ' information est elle fournie manuellement?existe t il un lien entre le fichier concerné et le classeur xl?.

    donc avant tout il faut savoir comment va ce declencher la procedure.

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Formateur et développeur chez EXCELLEZ.net
    Inscrit en
    Novembre 2003
    Messages
    19 125
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 58
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur et développeur chez EXCELLEZ.net
    Secteur : Enseignement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 19 125
    Billets dans le blog
    131
    Par défaut
    Salut...

    En plus du fait que je suis comme mes petits copains, c'est-à-dire incapable de comprendre ce que tu souhaites... je me pose une question.

    Si la même info se trouve à plusieurs endroits d'un classeur, il me semblerait intéressant de la modifier à un seul endroit, les autres endroits y faisant référence via une "toute bête" formule d'Excel, du type "=feuil1!a2".

    Ainsi, la modification de la cellule source, par vba ou manuellement, affecte toutes les cellules qui y font référence... sans se farcir un code de recherche et de modification à travers tout le classeur.
    "Plus les hommes seront éclairés, plus ils seront libres" (Voltaire)
    ---------------
    Mes billets de blog sur DVP
    Mes remarques et critiques sont purement techniques. Ne les prenez jamais pour des attaques personnelles...
    Pensez à utiliser les tableaux structurés. Ils vous simplifieront la vie, tant en Excel qu'en VBA ==> mon tuto
    Le VBA ne palliera jamais une mauvaise conception de classeur ou un manque de connaissances des outils natifs d'Excel...
    Ce ne sont pas des bonnes pratiques parce que ce sont les miennes, ce sont les miennes parce que ce sont des bonnes pratiques
    VBA pour Excel? Pensez D'ABORD en EXCEL avant de penser en VBA...
    ---------------

  8. #8
    Membre averti
    Inscrit en
    Janvier 2008
    Messages
    13
    Détails du profil
    Informations forums :
    Inscription : Janvier 2008
    Messages : 13
    Par défaut
    Bonjour a tous ,

    pour repondre à patbou, oui c'est bien cela. Le changement de version des fichiers s'effectuent manuellement.En effet le tableau dont on parle n'est qu'un tableau de recensement des fichiers et de leurs versions.
    Les fichiers sont repertoriés dans un reseau partagé de mon boulot.Chaque fois qu'une modification est effectuée je mets à jour le tableau.Le seul lien qui existe est un lien hypertexte entre le n° de version et le fichier dans le repertoire.

    Pour repondre à Pierre Fauconnier, j'y ai pensé toutefois mon tableau est déjà construit et je voulais eviter de tout reprendre.

    Merci

Discussions similaires

  1. [VBA] Rechercher et remplacer dans un champs
    Par virginie2 dans le forum Access
    Réponses: 2
    Dernier message: 19/07/2006, 11h19
  2. Afficher, rechercher et remplacer dans un fichier
    Par lynal dans le forum Langage
    Réponses: 1
    Dernier message: 13/06/2006, 21h24
  3. Recherche et remplacement d'un caractère dans Word
    Par faiglon dans le forum Access
    Réponses: 3
    Dernier message: 13/02/2006, 14h17
  4. [RegEx] Rechercher et remplacer plusieurs occurences avec expression
    Par nabab dans le forum Langage
    Réponses: 2
    Dernier message: 12/12/2005, 17h12
  5. Réponses: 11
    Dernier message: 01/12/2004, 19h09

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