Coller une selection si une cellue égale une

Résolu
Bonjour,

Je suis débutant dans la programmation et j'espère qu'il est possible de trouver une solution. J'ai parcouru le forum mais je n'ai pas trouver de réponse.

Je vous explique mon énigme :(tout se passe sur la même feuille) :

Sur la sélection C4:C24 j'ai une série de chiffre avec en C4 le mois.

En dessous j'ai un tableau de C29 à O49 avec sur la ligne C29/N29 tous les mois de l'année.

Je voudrais que lorsque la cellule C4 change (par exemple devient MARS), les éléments qui sont dessous (C5:C24) soient collés en valeur sous le mois qui correspond dans le tableau C29/O49.

Est-ce possible ?

Merci, guillaume.

6 réponses

  1. Contributeur
    Bonjour,
    Y a probablement moyen par formule mais moi c'est en VBA.
    En C4 mettre une liste de validation avec comme source la plage C29:N29
    Pour ne pas avoir d'erreur dans l'écriture du mois.
    Ensuite coller le code ci-dessous dans le module de la feuille.
    Clic droit sur l'onglet de la feuille >> Visualiser le code, dans cette fenêtre..
    Private Sub Worksheet_Change(ByVal Target As Range)  
    Dim Col As Integer  
        If Target.Count > 1 Then Exit Sub  
        If Target = "" Then Exit Sub  
        If Not Intersect(Target, [C4]) Is Nothing Then  
            For Col = 3 To 14  
                If Cells(29, Col) = [C4] Then  
                    Exit For  
                End If  
            Next Col  
             
            Range(Cells(30, Col), Cells(49, Col)).Copy  
            Range("C5").PasteSpecial xlPasteValues  
            Application.CutCopyMode = False  
            Range("C4").Select  
        End If  
    End Sub

    Comme tu parle de "Valeurs je suppose que dans le tableau ce sont des formules ? si non, y a moyen de faire plus cour.
    Et ton tableau, en principe y va de C à N et pas de C à O ?
    Tu dis.
    Toute la connaissance du monde ne peu tenir dans une seul tête (moi)
    Si tu te cognes à un pot et que ça sonne creux, c'est pas forcément le pot qui est vide. ;-)(Confucius)
    NOTE : Je ne répond pas aux MP pour les questions techniques.
    Ça doit se passer sur le forum pour que tous puisse y participer ou en profiter.
    0
    1. Bonjour lermite222, et merci de ta réponse rapide et claire !!!

      En fait mon tableau va de C à N (N29 étant Décembre) Je vais supprimer la colonne O.

      Oui en effet les cellules de C5 à C24 sont des formules.

      En revanche j'ai une question bête mais comment utiliser cette macro ? Car j'ai déjà une macro effectuant plusieurs actions et je pensait mettre ton code à la suite.

      En clair je sais utiliser une macro commençant par Sub... que je peux affecter à un bouton. Mais là j'avoue ne pas savoir comment m'y prendre.

      Cordialement
      Guillaume
      0
  2. Contributeur
    Clic droit sur l'onglet de la feuille >> Visualiser le code... Dans la feuille tu colle le code.
    C5 à C29 doivent être vides (pas de formule)

    A+
    0
    1. Merci pour ton aide lermite222, malheureusement ça ne fonctionne pas.

      Les cellules en dessous de C5 sont forcément des formules.

      Merci quand même !
      0
      1. Contributeur
        Là y a quelque chose qui m'échappe... comment veux-tu afficher l'équivalent d'une colonne de ton tableau dans C5:C20 si ce sont des formules ??
        Quel formule dans C5 ?
        0
        1. C'est les données de C5 à C24 que je veux coller sous une des cellules de C29 à N29 :
          "Je voudrais que lorsque la cellule C4 change (par exemple devient MARS), les éléments qui sont dessous (C5:C24) soient collés en valeur sous le mois qui correspond dans le tableau C29/O49."

          Il y a du avoir confusion, désolé si mon message n'était pas compréhensible.
          0
          1. Contributeur
            Non, c'est moi qui ai lu à l'envers.
            En C4 mettre une liste de validation avec comme source la plage C29:N29
            Pour ne pas avoir d'erreur dans l'écriture du mois.
            Private Sub Worksheet_Change(ByVal Target As Range)
            Dim Col As Integer
                If Target.Count > 1 Then Exit Sub
                If Target = "" Then Exit Sub
                If Not Intersect(Target, [C4]) Is Nothing Then
                    For Col = 3 To 14
                        If Cells(29, Col) = [C4] Then
                            Exit For
                        End If
                    Next Col
                    Range("C5:C24").Copy
                    Cells(30, Col).PasteSpecial xlPasteValues
                    Application.CutCopyMode = False
                    Range("C4").Select
                End If
            End Sub

            A+
            0