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 Excel}programme pour remplacer valeurs


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut {VBA Excel}programme pour remplacer valeurs
    bonjour

    j'ai un probleme de programation que je n'arrive pas a faire tous seul

    je voudrais en cliquant sur un bouton remplacer dans la colonne E a partir d'un numero de ligne que j'obtient de la celule active en k par exemple

    remplacer les 6 chiffres a la suite


    Exemple

    dans la colonne E j'ai 6 fois 1 a partir de la ligne 32
    quand ma cellule active est sur la colone k et ligne 32 et que je clique sur le bouton
    je remplace les six 1 par des 2



    si vous pouviez me donner un coup de main je vous en remercie d'avance

  2. #2
    Expert éminent Avatar de jfontaine
    Homme Profil pro
    Contrôleur de Gestion
    Inscrit en
    Juin 2006
    Messages
    4 754
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Contrôleur de Gestion

    Informations forums :
    Inscription : Juin 2006
    Messages : 4 754
    Points : 9 396
    Points
    9 396
    Par défaut
    Essaic ce code

    A mettre dans le click de ton bouton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    If ActiveCell.Column = 11 Then
     
        Range("E" & ActiveCell.Row & ":E" & Range("E1").End(xlDown).Row).Select
        Selection.Replace What:="1", Replacement:="2", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
     
    End If

  3. #3
    Membre émérite
    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
    Points : 2 443
    Points
    2 443
    Par défaut
    Citation Envoyé par Thomas69
    bonjour

    j'ai un probleme de programation que je n'arrive pas a faire tous seul

    je voudrais en cliquant sur un bouton remplacer dans la colonne E a partir d'un numero de ligne que j'obtient de la celule active en k par exemple

    remplacer les 6 chiffres a la suite


    Exemple

    dans la colonne E j'ai 6 fois 1 a partir de la ligne 32
    quand ma cellule active est sur la colone k et ligne 32 et que je clique sur le bouton
    je remplace les six 1 par des 2



    si vous pouviez me donner un coup de main je vous en remercie d'avance
    Salut
    Pas tout compris
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Sub test()
    Dim Lig As Long
    Dim X As Integer
    If Selection.Column = Columns("K").Column Then
        Lig = Selection.Row
        For X = 0 To 5
            If Range("E" & Lig).Offset(X, 0) <> 1 Then Exit Sub
        Next X
        For X = 0 To 5
            Range("E" & Lig).Offset(X, 0) = 2
        Next X
    End If
    End Sub
    Si la cellule en haut à gauche de la sélection est sur la colonne K, si les 6 cellules de la colonne E à partir de la première ligne de la sélection contiennent des 1, les remplacer par des 2

    En espèrant que ça réponde à la question
    A+

  4. #4
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut
    c'est le genre de programme mais le bemol

    c'est que si je suis a la ligne 32 tous les chiffres 1 avant la ligne 32 sont remplacé alors que je voudrait bien l'inverse


    mais surtout c'est de controler la copie c'est a dire que de remplacer 5 fois 1 et non tous les 1



    j'ai essayer ca


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub bijour()
    If ActiveCell.Column = 11 Then
     
     i = 2
        Range("E" & ActiveCell.Row & ":E" & Range("E1").End(xlDown).Row + i).Select
        Selection.Replace What:="1", Replacement:="2", LookAt:=xlPart, _
            SearchOrder:=xlByRows, MatchCase:=False, SearchFormat:=False, _
            ReplaceFormat:=False
     
    End If
     
    End Sub

    mais avec ce code je remplace tous les 1 sauf les 2 er

    si tu pouvais me donner un coup de pouce supplémentaire
    merci

  5. #5
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut
    ben je te remercie Gorfael c'est justement ce que je cherchais a faire

    merci pour tous a vous deux

  6. #6
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut
    j'ai voulus amiliorer le code pour effacer les 5 cases suivantes mais ca ne m'efface qu'une case si on pouvait m'expliquer

    Merci

    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 test()
    Dim Lig As Long
    Dim X As Integer
    If Selection.Column = Columns("L").Column Then
        Lig = Selection.Row
        For X = 0 To 4
            If Range("E" & Lig).Offset(X, 0) <> 1 Then Exit Sub
        Next X
        For X = 0 To 4
            Range("E" & Lig).Offset(X, 0) = 2 And Range("E" & Lig + 5).ClearContents
        Next X
     
     
    End If
     
     
    End Sub
    j'ai trouver la solution en recopiant plusieurs fois And Range("E" & Lig + 5).ClearContents


    si vous avez plus simple je suis prenneur au pire je me contente de ca

  7. #7
    Membre émérite
    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
    Points : 2 443
    Points
    2 443
    Par défaut
    Salut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    For X = 0 To 4
    ' Pour x=0 à 4
    Range("E" & Lig).Offset(X, 0) = 2 And Range("E" & Lig + 5).ClearContents
    ' Je sais même pas comment Excel l'interprête le seul code que je comprennes est :
    Range("E" & Lig + 5).ClearContents
    ' effacer le contenu de la cellule colonne E, ligne Lig+5 (qui est fait 5 fois)
    ' je vois pas à quoi doit servir le "=2"
    Next X
    Je crois avoir compris mais....
    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
     
    If Selection.Column = Columns("L").Column Then
    Lig = Selection.Row
    For X = 0 To 4
    If Range("E" & Lig).Offset(X, 0) <> 1 Then Exit Sub
    Next X
    'on vérifie la présence des 1, sinon on sort
    For X = 0 To 4
    Range("E" & Lig).Offset(X, 0) = 2 
    'On affecte 2 à la colonne E
    Range("E" & Lig + 5).offset(x,0).ClearContents
    'ou
    'Range("E" & Lig).Offset(X+5, 0).ClearContents
    'On efface les 5 lignes suivantes
    Next X
    End If
    J'espère que c'est bien ça ?
    Dans VBA, il vaut mieux éviter d'effectuer plusieurs actions ensemble. ça rend le code moins lisible, et c'est rarement admis par le compilateur

    AND, OR, etc. sont des opérateur logiques : ce ne sont pas des fonctions du code. Tu ne peux par ecrire
    Faire code1 AND code2
    Faire code1 Or code2
    Ils ne servent qu'à donner une réponse logique (0 ou -1 en VBA)
    Pour le ET, il suffit de faire 2 lignes
    Code1
    Code2

    Pour le OU, il faut un test qui détermniera quelle opération sera exécuter : Excel ne décide jamais rien, il suit les instructions qu'on lui donne. Il ne fait pas ce qu'on veut, seulement ce qu'on lui dit de faire
    A+

  8. #8
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    208
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 208
    Points : 86
    Points
    86
    Par défaut
    Range("E" & Lig + 5).offset(x,0).ClearContents


    merci grace a toi je viens de comprendre mon erreur
    et tu as raison plus le programme est jolie plus c'est lisible

  9. #9
    Membre émérite
    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
    Points : 2 443
    Points
    2 443
    Par défaut
    Citation Envoyé par Thomas69
    Range("E" & Lig + 5).offset(x,0).ClearContents


    merci grace a toi je viens de comprendre mon erreur
    et tu as raison plus le programme est jolie plus c'est lisible
    Salut
    C'est pas une question d'esthétisme. Mais si dans 6 mois tu dois t'y replonger pour faire des modifs, avec une urgence par-dessus, plus le code est clair, moins tu fais d'erreurs.
    Et sur une macro de 20 lignes, c'est facile, mais quand ça implique une dizaine de macros, sur plus de 500 lignes de codes....
    A+

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

Discussions similaires

  1. [VBA-EXcel] Timer pour mise jour automatique
    Par Dos dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 12/09/2006, 20h36
  2. [VBA-EXCEL]-condition pour ouvrir une msgbox
    Par captaine93 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 29/08/2006, 20h51
  3. [VBA Excel] Userform pour supprimer une ligne précise
    Par Viper7 dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/06/2006, 14h32
  4. [VBA-Excel] aide pour maccro (selection)
    Par Fealendril dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 08/02/2006, 08h53
  5. [VBA-Excel]Problème pour remplir une listview
    Par Le Djé dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 29/01/2006, 16h27

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