VBA valeurs à remplacer

Bonjour à tous,

Je débute en VBA et je Je souhaiterais savoir comment réimputer des valeurs Input pour remplacer deux valeurs... Bon je ne sais pas si c'est compréhensible ce que je dis mais je post une partie de ma macro ci-dessous et je vais essayer de vous expliquer.

Voilà une partie de ma macro :

   Sheets("Février").Select
    Sheets("Février").Select
    Cells.Replace What:="PREMIERE VALEURE À REMPLACER", Replacement:="DEUXIEME VALEURE À REMPLACER", LookAt:=xlPart, _
        SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
        ReplaceFormat:=False
    ActiveWindow.SmallScroll Down:=27
    Range("F63").Select
    Selection.ClearContents
    Range("A5:D61").Select
    Selection.ClearContents

J'aimerais que les deux valeurs en majuscule "VALEURS À REMPLACER" puissent être saisie dans une fenêtre au début de ma macro en InputBox ou MsgBox. Avec un texte dans ce style : . ANNÉE N-1 = InputBox("Qu'elle est l'année précédente", ") et après un autre dans le style ANNÉE N+1 = InputBox("Qu'elle est l'année actuelle", ").

Enfin ça se trouve c'est même pas un InputBox qu'il faut utiliser mais bon j'espère que vous avez compris l'idée parce qu'en ce moment je suis obligé de faire les modifications des éléments à remplacer directement la macro c'est bien fastidieux.

Merci d'avance pour votre aide.

Bonjour,

Inspire-toi de ce code suivant :

Sub test()
    Worksheets("Feuil1").Columns("A").Replace _
    What:=InputBox("Année N-1"), Replacement:=InputBox("Année N+1"), _
    SearchOrder:=xlByColumns, MatchCase:=True
End Sub
13remplace-annee.xlsm (16.15 Ko)

Oui ok mais bon... J'ai encore un problème en faite j'ai plusieurs feuilles à selectionner avant d’exécuter cette macro. quand j'ajoute le code

Sub remplacementannée()

 Sheets.Select.Replace _
    What:=InputBox("Année N-1"), Replacement:=InputBox("Année N+1"), _
    SearchOrder:=xlByColumns, MatchCase:=True

End Sub

J'ai un bug "erreur de compilation..." je suppose que mon code sheets.select est incompatible avec ton code?

Re,

C'est pour ces raisons qu'on demande toujours un fichier en pièce jointe afin de comprendre le besoin réel.

Alors en faite la macro se trouve dans mes macros personnelles et elle s'appelle Sub remplacementannée()

. Et elle veut faire des modifications sur le fichier frais KM

20frais-km.zip (19.69 Ko)

pour modifier toutes les dates d'une année à l'autre sur toutes les feuilles.

Merci bcp pour votre aide

Re,

Y a t il une raison particulière que la macro se trouve dans un autre classeur que le classeur concerné par la modification ?

En faite je travaille dans une petite association les gens ne sont pas alaise avec les macros (encore moins que moi). Du coup je laisse des fichiers à disposition pour eux sans macros et moi j’exécute à partir de mon fichier de macro personnelle

Re,

Essaye le code suivant :

Sub remplacementannée()
    On Error Resume Next
    annee1 = InputBox("Année à Changer ? ")
    annee2 = InputBox("Nouvelle Année ?")
    For Each sh In Workbooks("Frais KM.xls").Worksheets
        If sh.Name <> "Recap" Then
         sh.Columns("A:A").Replace What:=annee1, Replacement:=annee2, SearchOrder:=xlByColumns, MatchCase:=True
        End If
    Next sh
End Sub

Bonjour,

Si on admet que ta macro est dans ton classeur de macros personnelles (Personal.xlsb), essaie un truc du genre :

Sub remplacementannée()
Dim ws As Worksheet
Dim str As String, str2 As String

    Application.ScreenUpdating = False

    str = InputBox("Année N-1")
    If str = vbNullString Or Not IsNumeric(str) Then Exit Sub
    str2 = InputBox("Année N+1")
    If str2 = vbNullString Or Not IsNumeric(str2) Then Exit Sub

    For Each ws In ActiveWorkbook
        ws.Columns(1).Replace _
                What:=str, _
                Replacement:=str2, _
                SearchOrder:=xlByColumns, _
                MatchCase:=True
    Next ws

End Sub

Je suis vraiment désolé mais vos deux macros ne fonctionnent pas .

En plus je n'arrive pas à identifier dans vos macros à quel moment la macro sélectionne toutes les feuilles de fichier actif "Frais KM"

Re,

Ouvre ton fichier avant de lancer la macro. Faute de précisions, nous avons supposé que le fichier à modifier était déjà ouvert.

Raja a écrit :

Re,

Ouvre ton fichier avant de lancer la macro.

Oui mais en faite j'ai renommé le fichier pour l'envoyer sur le forum mais en réalité il s'appelle pas comme ça... C'était juste pour comprendre le raisonnement il n'y a vraiment pas possibilité pour que la macro s’exécute uniquement sur un fichier actif.

Re,

La 1ère. macro fonctionne.

La seconde doit fonctionner.

Et tu ne dis pas si ta macro est dans ton classeur de macros personnelles (Personal.xlsb).

Dans les 2 propositions, l'exécution de la procédure commence par l'affichage d'une boîte de dialogue. Qu'en est-il?

Et si elles ne fonctionnent pas, quel est le message d'erreur?

Jean-Eric a écrit :

Re,

La 1ère. macro fonctionne.

La seconde doit fonctionner.

Et tu ne dis pas si ta macro est dans ton classeur de macros personnelles (Personal.xlsb).

Dans les 2 propositions, l'exécution de la procédure commence par l'affichage d'une boîte de dialogue. Qu'en est-il?

Et si elles ne fonctionnent pas, quel est le message d'erreur?

Oui m'a macro se trouve bien dans mon fichier (Personal.xlsb). Les deux boîtes de dialogue s'affichent bien et ont l'air de fonctionner en revanche j'ai un code d'erreur qui s'affiche : "Erreur d'exécution '438' : Propriété ou méthode non gérée par cet objet " je ne comprends pas

Re,

J'ai omis une chose.

Ajoute à ma procédure la partie surlignée. Cela fonctionnera.

Cdlt.

For Each ws In ActiveWorkbook.Worksheets
        ws.Columns(1).Replace _
                What:=str, _
                Replacement:=str2, _
                SearchOrder:=xlByColumns, _
                MatchCase:=True
    Next ws

Re, Salut Jean-Eric,

Essaye comme ça car il te laisse la main pour ouvrir le fichier concerné :

Sub remplacementannée()
    On Error Resume Next
    FichierAOuvrir = Application.Dialogs(xlDialogOpen).Show
    If FichierAOuvrir = False Then Exit Sub
    NomFichier = ActiveWorkbook.Name
    annee1 = InputBox("Année à Changer ? ")
    annee2 = InputBox("Nouvelle Année ?")
    For Each sh In Workbooks(NomFichier).Worksheets
        If sh.Name <> "Recap" Then
         sh.Columns("A:A").Replace What:=annee1, Replacement:=annee2, SearchOrder:=xlByColumns, MatchCase:=True
        End If
    Next sh
End Sub

Maintenant y'a plus de message d'erreur mais ça modifie pas l'année dans chaque feuille. Je suis vraiment désolé

Re,

La procédure fonctionne parfaitement chez moi (avec des dates dans différentes feuilles...).

Tu ne dis pas tout.

Cdlt.

Sub remplacementannée()
Dim ws As Worksheet
Dim str As String, str2 As String

    Application.ScreenUpdating = False

    str = InputBox("Année N-1")
    If str = vbNullString Or Not IsNumeric(str) Then Exit Sub
    str2 = InputBox("Année N+1")
    If str2 = vbNullString Or Not IsNumeric(str2) Then Exit Sub

    For Each ws In ActiveWorkbook.Worksheets
        ws.Columns(1).Replace _
                What:=str, _
                Replacement:=str2, _
                SearchOrder:=xlByColumns, _
                MatchCase:=True
    Next ws

End Sub

En faite moi ça modifie pas les dates à l'endroit où je veux c'est à dire dans l'entête qui se trouve à la ligne 2 par contre dans les autres colonne ça fonctionne. C'est bizarre parce que quand je le fais manuellement sans macro remplacer 2015 par 2016 ça marche même dans cette ligne je ne comprends vraiment pas


Je crois que c'est le columns(1) peutetre que la macro execute que dans la première colonne. Moi je veux vraiment qu'elle fasse le remplacement dans toute la feuille

Re,

Tu remplaces Columns(1) par Cells, soit :

ws.Cells.Replace 

A tester.

Rechercher des sujets similaires à "vba valeurs remplacer"