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 :

appliquer une macro a plusieurs cellules


Sujet :

Macros et VBA Excel

  1. #1
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 93
    Points
    93
    Par défaut appliquer une macro a plusieurs cellules
    Bonjour à tous,

    Actuellement j'ai une macro qui permet de copier en C35 la valeur de B36 (ma valeur "source") si C36 = X SINON la valeur de C35 est figé.


    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    On Error GoTo Err_Worksheet_Change
    Dim Cell_Cde, Cell_Source, Cell_Destination As Range
    Dim Str_Msg As String
     
    Set Cell_Cde = Range("C36")
    Set Cell_Source = Range("B36")
    Set Cell_Destination = Range("C35")
    Str_Msg = "=indirect(" & Cell_Source.Address & ")"
     
    If Intersect(Target, Cell_Cde) Is Nothing Then GoTo Sort_Worksheet_Change
     
    If UCase(Target) = "X" Then
    Cell_Destination.FormulaR1C1 = "=indirect(""" & Cell_Source.Address & """)"
    Else
    Cell_Destination.Select
    Selection.Copy
    Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
    :=False, Transpose:=False
    ActiveSheet.Paste
    Target.Select
    End If
     
    Sort_Worksheet_Change:
    Exit Sub
    Err_Worksheet_Change:
    MsgBox (Err.Number & " - " & Err.Description)
    Resume Sort_Worksheet_Change
    End Sub
    J'aimerais pouvoir appliquer cette macro a la colonne D, E, F ect... tout en gardant comme source de valeur B36.

    C'est a dire simplement que pour la colonne suivante :
    Set Cell_Cde = Range("D36")
    Set Cell_Destination = Range("D35")

    Coment faire cela ?

    Merci beaucoup, bonne journée !

  2. #2
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Plage As Range, c As Range
     
    Set Plage = Intersect(Target, Range("C36:X36"))
    If Not Plage Is Nothing Then
        Application.EnableEvents = False
        For Each c In Plage
            With c.Offset(-1, 0)
                If UCase(c.Value) = "X" Then
                    .Formula = "=indirect(B36)"
                Else
                    .Value = .Value
                End If
            End With
        Next c
        Application.EnableEvents = True
    End If
    Set Plage = Nothing
    End Sub

  3. #3
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 93
    Points
    93
    Par défaut
    Tout d'abord merci d'avoir répondu.

    Avec ta macro que j'ai essayé, lorsque l'on met un X dans la case correspondante (C36 par exemple) et bien C35 ne va pas prendre la valeur B36 comme prévu met va se retrouver avec un #ref

    une idée du probleme ?

  4. #4
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    oui, parce que en C35 tu as voulu faire la formule =INDIRECT(B36)
    et en B36, tu n'as pas une adresse d'une cellule
    Tu as quoi en B36?
    tu veux récupérer en C35 quoi au juste (si en C36 "X" ou autre chose)

  5. #5
    Membre régulier

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 51
    Points : 93
    Points
    93
    Par défaut
    Effectivement en B36 je n'ai pas une valeur, mais c'est la copie d'une cellule d'une autre feuille.

    Pour expliquer simplement ce que je veux :

    Si C36 = X alors C35 = B36
    SINON C36 se fige (garde la derniere valeur ajoutée)

    meme chose en D35
    SI D36 = X ALors D35 = B36
    SINON D36 se fige

    meme chose en E35, jusqu'a Y

  6. #6
    Expert éminent sénior Avatar de mercatog
    Homme Profil pro
    Inscrit en
    Juillet 2008
    Messages
    9 435
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Autre

    Informations forums :
    Inscription : Juillet 2008
    Messages : 9 435
    Points : 31 877
    Points
    31 877
    Par défaut
    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
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim Plage As Range, c As Range
     
    Set Plage = Intersect(Target, Range("C36:X36"))
    If Not Plage Is Nothing Then
        Application.EnableEvents = False
        For Each c In Plage
            With c.Offset(-1, 0)
                If UCase(c.Value) = "X" Then
                    .Formula = "=B36"
                Else
                    .Value = .Value
                End If
            End With
        Next c
        Application.EnableEvents = True
    End If
    Set Plage = Nothing
    End Sub

Discussions similaires

  1. Réponses: 6
    Dernier message: 02/08/2017, 16h55
  2. [OpenOffice][Tableur] Macro bouton, appliquer une valeur sur plusieurs cellules selectionées
    Par myz-rix dans le forum OpenOffice & LibreOffice
    Réponses: 1
    Dernier message: 23/07/2011, 06h37
  3. Réponses: 1
    Dernier message: 11/02/2011, 14h14
  4. Répéter une macro sur plusieurs cellules
    Par arkorrigan dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 08/03/2010, 17h28
  5. [VBA-E] Comment appliquer une macro sur plusieurs cellules
    Par jeanpierreco dans le forum Macros et VBA Excel
    Réponses: 16
    Dernier message: 25/01/2007, 10h54

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