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 :

macro excel : modifier valeur sous condition


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2017
    Messages : 22
    Points : 12
    Points
    12
    Par défaut macro excel : modifier valeur sous condition
    Bonjour,
    Grace à une macro ci dessous,
    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
    Sub TRONCON()
     
    Dim dlgR As Integer, dlgi As Integer
     
    Set sh = Worksheets("Ligne")
     
    dlgi = Sheets("Ligne").Range("A" & Rows.Count).End(xlUp).Row
    dlgR = Sheets("troncon").Range("A" & Rows.Count).End(xlUp).Row
     
        For i = 1 To dlgi
         With Sheets("Ligne")
     
          sh.Range("A3:A" & i).Copy Destination:=Sheets("troncon").Range("A" & dlgR + 1)
          sh.Range("B3:B" & i).Copy Destination:=Sheets("troncon").Range("B" & dlgR + 1)
          sh.Range("B3:B" & i).Copy Destination:=Sheets("troncon").Range("C" & dlgR + 1)
          sh.Range("C3:C" & i).Copy Destination:=Sheets("troncon").Range("D" & dlgR + 1)
          sh.Range("F3:F" & i).Copy Destination:=Sheets("troncon").Range("E" & dlgR + 1)
          sh.Range("G3:G" & i).Copy Destination:=Sheets("troncon").Range("G" & dlgR + 1)
          sh.Range("G3:G" & i).Copy Destination:=Sheets("troncon").Range("H" & dlgR + 1)
          sh.Range("E3:E" & i).Copy Destination:=Sheets("troncon").Range("I" & dlgR + 1)
     
     
         End With
        Next i
     
    End Sub
    J'ai copié les valeurs d'une colonne d'une feuille , dans une colonne d'un autre onglet. J'aimerais dans la même macro, pouvoir lancer la modification des valeurs copiées dans chaque cellules de la colonne en fonction de sa propre valeurs. comme ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For j = 2 To dlgR
            With Sheets("troncon")
            If .Range("H" & j) = "FT" Then
            .Range("H" & j) = "TELECOM"
            Else
            .Range("H" & j) = "ELECTRICITE"
            End If
            End With
            Next j
    Mais lorsque j'ajoute ce bout de code à ma macro, ça ne fonction pas. mes valeurs copiées ne sont pas modifiées.
    Besoins d'idées
    Cordialement

  2. #2
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Bonjour,
    Plutôt que de faire une boucle (long), as-tu pensé à utiliser la méthode Range.Replace ? C'est l'équivalent de Ctrl+H en Excel "manuel".

  3. #3
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2017
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    bonjour,
    merci pour ta réponse, comment insérer range.replace dans mon code.
    cdt

  4. #4
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    J'ai peut-être éré un peu trop vite ...
    On est bien d'accord qu'ici :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For j = 2 To dlgR
            With Sheets("troncon")
                If .Range("H" & j) = "FT" Then
                    .Range("H" & j) = "TELECOM"
                Else
                     .Range("H" & j) = "ELECTRICITE"
                End If
            End With
    Next j
    tu essaie de remplacer "FT" par "TELECOM" et le reste par "ELECTRICITE" ? Est-ce qu'il y a une liste de mots qui ne sont pas FT ?

    Supposons que tu veux seulement remplacer "FT" par "TELECOM", alors tu appliques la syntaxe de Range.Replace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("tronçon").Range("H2:H" & dlgR).Replace("FT", "TELECOM", xlWhole)
    Maintenant, pour les autres mots : si tu as une liste de mots à remplacer, tu fais la même chose, mais en adaptant la valeur de recherche et la valeur de remplacement.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2017
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    re
    j'ai copié ta ligne de code selon mes besoins , mais j'ai un message d'erreur de compilation.

  6. #6
    Membre à l'essai
    Homme Profil pro
    Chargé d'affaire
    Inscrit en
    Juin 2017
    Messages
    22
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Chargé d'affaire
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Juin 2017
    Messages : 22
    Points : 12
    Points
    12
    Par défaut
    voici le code que j'ai fait:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For j = 2 To dlgR
     
            If wh.Range("H" & j) = "FT" Then
            wh.Range("H" & j) = wh.Range("H2:H" & dlgR).Replace("FT", "TELECOM", xlWhole)
            Else
            wh.Range("H" & j) = wh.Range("H2:H" & dlgR).Replace("FT", "ELECTRICITE", xlWhole)
            End If
     
          Next j
    En claire je ne sais pas du tout comment l’intégrer dans mon code. pourtant lorsque je fais le code ci dessous avec deux boutons (2 sub et 2 end sub), j'obtiens ce que je veux: mais moi je veux une seule macro avec un bouton.
    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
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    Sub TRONCON()
     
    Dim dlgR As Integer, dlgi As Integer
     
    Set sh = Worksheets("Ligne")
    Set wh = ThisWorkbook.Worksheets("troncon")
     
    dlgi = Sheets("Ligne").Range("A" & Rows.Count).End(xlUp).Row
    dlgR = Sheets("troncon").Range("A" & Rows.Count).End(xlUp).Row
     
        For i = 1 To dlgi
         With Sheets("Ligne")
     
          sh.Range("A3:A" & i).Copy Destination:=Sheets("troncon").Range("A" & dlgR + 1)
          sh.Range("B3:B" & i).Copy Destination:=Sheets("troncon").Range("B" & dlgR + 1)
          sh.Range("B3:B" & i).Copy Destination:=Sheets("troncon").Range("C" & dlgR + 1)
          sh.Range("C3:C" & i).Copy Destination:=Sheets("troncon").Range("D" & dlgR + 1)
          sh.Range("F3:F" & i).Copy Destination:=Sheets("troncon").Range("E" & dlgR + 1)
          sh.Range("G3:G" & i).Copy Destination:=Sheets("troncon").Range("G" & dlgR + 1)
          sh.Range("G3:G" & i).Copy Destination:=Sheets("troncon").Range("H" & dlgR + 1)
     
          sh.Range("E3:E" & i).Copy Destination:=Sheets("troncon").Range("I" & dlgR + 1)
     
         End With
        Next i
     
     
     
    End Sub
     
     
    Sub cm_nature()
     
     
    Dim dlgR As Integer
     
    Set wh = ThisWorkbook.Worksheets("troncon")
     
    dlgR = Sheets("troncon").Range("A" & Rows.Count).End(xlUp).Row
     
    For j = 2 To dlgR
     
            If wh.Range("H" & j) = "FT" Then
            wh.Range("H" & j) = "TELECOM"
            Else
            wh.Range("H" & j) = "ELECTRICITE"
            End If
     
            If wh.Range("G" & j) = "FT" Then
            wh.Range("G" & j) = "AERIEN TELECOM"
            Else
            wh.Range("G" & j) = "AERIEN ENERGIE"
            End If
     
            Next j

  7. #7
    Membre émérite

    Homme Profil pro
    Technicien Métrologie R&D
    Inscrit en
    Janvier 2007
    Messages
    1 610
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien Métrologie R&D
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 610
    Points : 2 523
    Points
    2 523
    Billets dans le blog
    1
    Par défaut
    tu met
    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
    For i = 1 To dlgi
         With Sheets("Ligne")
     
          sh.Range("A3:A" & i).Copy Destination:=Sheets("troncon").Range("A" & dlgR + 1)
          sh.Range("B3:B" & i).Copy Destination:=Sheets("troncon").Range("B" & dlgR + 1)
          sh.Range("B3:B" & i).Copy Destination:=Sheets("troncon").Range("C" & dlgR + 1)
          sh.Range("C3:C" & i).Copy Destination:=Sheets("troncon").Range("D" & dlgR + 1)
          sh.Range("F3:F" & i).Copy Destination:=Sheets("troncon").Range("E" & dlgR + 1)
          sh.Range("G3:G" & i).Copy Destination:=Sheets("troncon").Range("G" & dlgR + 1)
          sh.Range("G3:G" & i).Copy Destination:=Sheets("troncon").Range("H" & dlgR + 1)
     
          sh.Range("E3:E" & i).Copy Destination:=Sheets("troncon").Range("I" & dlgR + 1)
     
         End With
        Next i
    pourquoi répètes tu le sh ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    with sheets("ligne")
       .range("a3:f" & i).copy destination:=Sheets("troncon").Range("A" & dlgR + 1 &":E" & dlgR +1)
       .range("g3" & i).copy destination:=Sheets("troncon").Range("g" & dlgR + 1)
       .range("g3" & i).copy destination:=Sheets("troncon").Range("h" & dlgR + 1) 
    end with
    'même si je ne comprends pas trop le saut de colonne et la répétition peut etre une coquille auquel cas un

  8. #8
    Membre émérite
    Femme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2016
    Messages
    1 703
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 29
    Localisation : France, Indre et Loire (Centre)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Octobre 2016
    Messages : 1 703
    Points : 2 813
    Points
    2 813
    Par défaut
    Compare :
    Ce que j'ai écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wh.Range("H2:H" & dlgR).Replace("FT", "TELECOM", xlWhole)
    Ce que tu as écrit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    wh.Range("H" & j) = wh.Range("H2:H" & dlgR).Replace("FT", "TELECOM", xlWhole)
    La logique de Replace, c'est "j'agis sur la plage H2:HdlgR où je remplace FT par TELECOM". C'est pas une logique d'attribution de valeur comme tu laisses sous-entendre par ta façon d'écrire.

    Si je regarde ce code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    For j = 2 To dlgR
            If wh.Range("H" & j) = "FT" Then
                wh.Range("H" & j) = "TELECOM"
            Else
                wh.Range("H" & j) = "ELECTRICITE"
            End If
            If wh.Range("G" & j) = "FT" Then
                wh.Range("G" & j) = "AERIEN TELECOM"
            Else
                wh.Range("G" & j) = "AERIEN ENERGIE"
            End If
    Next j
    Je vois qu'en colonne H, tu veux remplacer FT par TELECOM et en colonne G, tu veux remplacer FT par AERIEN TELECOM. Donc, c'est :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    wh.Range("H2:H" & dlgR).Replace("FT", "TELECOM", xlWhole)
    wh.Range("G2:G" & dlgR).Replace("FT", "AERIEN TELECOM", xlWhole)
    Quand ce n'est pas FT, c'est quoi?

    En claire je ne sais pas du tout comment l’intégrer dans mon code. pourtant lorsque je fais le code ci dessous avec deux boutons (2 sub et 2 end sub), j'obtiens ce que je veux: mais moi je veux une seule macro avec un bouton.
    Il faut créer une macro appelant les deux codes. Ex. :
    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
    Sub premiereMacro()
        'Cette macro écrit toto en A1
        Range("A1").Value = "toto"
    End Sub
     
    Sub deuxiemeMacro()
        'Cette macro écrit titi en A2
        Range("A2").Value = "titi"
    End Sub
     
    Sub macroPrincipale()
        'cette macro écrit toto en A1 et titi en A2
        Call premierMacro
        Call deuxiemeMacro
    End Sub
    Ensuite, tu créés un bouton qui appelle macroPrincipale.

Discussions similaires

  1. Numpy - Modifier valeurs sous condition
    Par mydomdom dans le forum Calcul scientifique
    Réponses: 4
    Dernier message: 24/04/2014, 16h14
  2. VB Excel copié/collé sous conditions entre 2 classeurs
    Par Popogrigri dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 20/01/2010, 10h27
  3. lancer macro si changement valeur cellule + condition
    Par tikam75007 dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 07/11/2009, 12h25
  4. macro vba identifier cellule sous condition
    Par yanacrux dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 03/03/2009, 14h00
  5. creation d'une macro excel modifiant des caracteres
    Par babyshaq dans le forum Macros et VBA Excel
    Réponses: 14
    Dernier message: 04/06/2008, 11h10

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