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 :

Copier/coller des formules quand une cellule est renseignée


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Points : 61
    Points
    61
    Par défaut Copier/coller des formules quand une cellule est renseignée
    Bonjour,

    Cf. le fichier ci-joint.

    Je souhaite faire en sorte que lorsqu'une date de début et de fin de contrat est renseignée dans une ligne auparavant vide, cela copie automatiquement les formules de la ligne ci-dessus qui se trouve entre les colonnes D et O.

    Merci par avance si vous avez une solution.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour lumpys,

    Tu as déjà une bâfrée de fonctions/macros probablement attachées à des boutons ou autres...
    Le debug est particulièrement difficile puisque le formalisme de ton fichier d'origine est complètement changé.
    Je ne pourrais pas te proposer quelque chose de fonctionnel.

    Ainsi, je te propose d'utiliser les événements "Worksheet_SelectionChange" et "Worksheet_Change" dans lequel tu vérifies si la "target" est vide.
    Le "Worksheet_SelectionChange" set ton ancienne variable, déclarée en public et le "Worksheet_Change" vérifie que tu te situes bien dans la bonne range.
    Il y a peut-être mieux.

    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
    Public oVal
     
    Private Sub Worksheet_Change(ByVal Target As Range)
    Dim oPlage As Range
    Set oPlage = Columns("B:C")
     
    If Not Application.Intersect(Target, oPlage) Is Nothing Then
        If oVal = "" Then
            'Faire ce qu'on veut
            MsgBox "Ancienne valeur vide"
        End If
    End If
     
    End Sub
     
    Private Sub Worksheet_SelectionChange(ByVal Target As Range)
        oVal = Target
    End Sub
    Dans le "'Faire ce qu'on veut", j'imagine que tu peux appeler ta fonction "MajFormule", mais je n'ai pas testé... et ne sais pas si c'est ce que tu souhaites.

    N'hésite pas à revenir vers moi !

    Cordialement,
    Kimy

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    147
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2010
    Messages : 147
    Points : 61
    Points
    61
    Par défaut
    Merci pour la proposition. Je suis parti sur quelque chose comme ça, peut être y at-il mieux :

    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)
     
    Dim Plage As Range
     
        'Si sélection de plus d'une cellule, sort de la procédure (pas d'actions)
        If Target.Cells.Count > 1 Then
           Exit Sub
        End If
     
        Set Plage = Range("B:C")
     
        If Application.Intersect(Target, Plage) Is Nothing Then
            'Pas d'action si sélection de cellules hors dates de début et de fin de contrat
            'MsgBox "Hors cible"
            Exit Sub
        Else
            Ligne = Target.Row
     
            'Si la date de début et de fin de contrat sont renseignés sur la ligne
            If Not IsEmpty(Range(Cells(Ligne, 2), Cells(Ligne, 2))) And Not IsEmpty(Range(Cells(Ligne, 3), Cells(Ligne, 3))) Then
               Range("D2:O2").Select
               Selection.AutoFill Destination:=Range(Cells(2, 4), Cells(Ligne, 15)), Type:=xlFillDefault
               Range(Cells(Ligne, 15), Cells(Ligne, 15)).Select
            End If
     
        End If
     
    End Sub
    L'idéal serait probablement d'écrire chaque formule dans le vba plutôt que de copier une ligne existante. Des suggestions ?

  4. #4
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Not IsEmpty(Range(Cells(Ligne, 2), Cells(Ligne, 2))) And Not IsEmpty(Range(Cells(Ligne, 3), Cells(Ligne, 3))) Then
    Ceci ne te permet pas de savoir si la cellule avant était vide ou non.
    Dans le cas d'une modification, tu passeras quand même dans la condition.

    Cordialement,
    Kimy

  5. #5
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 70
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,

    j'aurai vu cette partie comme ça
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    If Not Application.Intersect(Target, Plage) Is Nothing Then
      If Target.Column = 3 Then
        col = 0
      Else
        col = 2
      End If
      'Si la date de début et de fin de contrat sont renseignés sur la ligne
      If Not IsEmpty(Target) And Not IsEmpty(Target(1, col)) Then
    '........
    mais ça ne répond pas à la question
    L'idéal serait probablement d'écrire chaque formule dans le vba plutôt que de copier une ligne existante. Des suggestions ?
    que j'ai du mal à comprendre

Discussions similaires

  1. [XL-2003] Copier/coller la valeur d'une cellule
    Par mas17 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 06/03/2012, 09h08
  2. Copier/coller des colonnes dans une entité d’un MCD.
    Par matching_ds dans le forum PowerAMC
    Réponses: 1
    Dernier message: 23/11/2011, 09h28
  3. Copier/coller des données dans une appli GWT
    Par yann1610 dans le forum GWT et Vaadin
    Réponses: 1
    Dernier message: 01/12/2010, 19h00
  4. [XL-2007] Copier/Coller de formules d'une feuille à une autre
    Par Maady dans le forum Excel
    Réponses: 4
    Dernier message: 09/09/2010, 16h59
  5. [Formule]Macro pour masquer des formules dans une cellule
    Par Hellx dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 26/04/2007, 08h21

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