Remplacer la valeur d'une cellule par l'entête de sa colonne

KBA3103 Messages postés 7 Statut Membre -  
KBA3103 Messages postés 7 Statut Membre -
Bonjour à tous,

je me retrouve face à un problème que je n'arrive pas à résoudre!
J'ai un tableau qui peut se résumer brièvement comme ceci :

A = identifiant B=nb jours de charge C=01/10/2016 D=02/10/2016
AMER 1,5 1,5
PDUR 2 2

Je souhaiterais réaliser une macro qui, pour chaque ligne, quand elle trouve une valeur >0 à partir de la colonne C, elle remplace cette valeur par son entête de colonne.
Dans l'exemple la macro remplacerait donc dans les colonnes C et D les valeurs 1,5 par 01/10/2016 et 2 par 02/10/2016.

Si vous aviez un début de piste ce serait formidable car je tourne en rond depuis 2 jours !

Merci beaucoup

4 réponses

  1. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Bonjour

    Ce n'est pas très clair
    Peux tu envoyer un bout de ton fichier, sur cjoint.com et joindre le lien obtenu à ton prochain message. N'oublies pas d'y ajouter des explications et des exemples de résultat attendu

    1) Tu vas dans https://www.cjoint.com/
    2) Tu cliques sur [Parcourir] pour sélectionner ton fichier
    3) Tu descends en bas de la page pour cliquer sur [Créer le lien Cjoint]
    4) Au bout de quelques secondes la deuxième page s'affiche, avec le lien
    en bleu souligné ; tu le sélectionnes et tu fais "Copier"
    5) Tu reviens dans ta discussion sur CCM, et dans ton message de réponse tu fais "Coller".

    Cdlmnt
    0
    1. KBA3103 Messages postés 7 Statut Membre
       
      Bonjour Ccm81,

      Merci pour la procédure :)
      Voila le lien de mon fichier du coup :

      https://www.cjoint.com/c/FKkiEjr8S0R

      J'ai mis quelques explications dans le document j'espère que ca sera compréhensible.
      Car ce qui me semble limpide ne l'est pas forcément pour quelqu'un d'autre.

      Merci :)
      0
  2. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Si j'ai compris
    Feuille Feuil1 en J11 tu veux récupérer la liste des 3 dates
    10/10/2016 11/10/2016 14/10/2016
    Si c'est çà, il faudra certainement passer par une fonction personnalisée (macro)
    tu dis
    0
    1. KBA3103 Messages postés 7 Statut Membre
       
      Je veux effectivement récupérer les dates mais je voudrais que :
      -10/10/2016 s'affiche en T11 à la place de 0,13
      -11/10/2016 s'affiche en U11 à la place de 0,38
      -14/10/2016 s'affiche en X11 à la place de 0,25.

      Je suis partie sur ce code, mais je n'arrive pas à l'adapter à mon tableau :

      Sub Test2()

      Dim iNbreDeColonnes As Integer
      Dim iNombreDeLignes As Integer
      Dim iColonne As Integer
      Dim iHauteurColonne As Integer
      Dim strTitreColonne As String

      Worksheets("Feuil1").Activate 'On se positionne sur le jeu de donnees
      iNbreDeColonnes = Range("A10").End(xlToRight).Column 'On compte le nombre de colonnes du jeu de données
      iNombreDeLignes = Range("A10").End(xlDown).Row 'On le nombre de lignes du jeu de données

      iHauteurColonne = iNombreDeLignes - 1 'Hauteur d'une colonne sans le titre

      For iColonne = 11 To 41 'De la colonne 11 à 41

      strTitreColonne = Cells(1, iColonne).Value 'Je récupère le titre de la colonne active


      Worksheets("Feuil1").Cells(iNombreDeLignes, iNbreDeColonnes).Value = strTitreColonne 'Je donne comme nom à la plage de valeurs le titre de la colonne active


      Next iColonne

      End Sub


      Et donc je galère au niveau de la ligne :
      Worksheets("Feuil1").Cells(iNombreDeLignes, iNbreDeColonnes).Value = strTitreColonne

      Car en fait cette ligne doit dire "pour toute les cellules non vides remplacer la valeur par le titre de la colonne.

      Tu arrives à cerner un peu plus ma demande ?
      0
  3. ccm81 Messages postés 11033 Statut Membre 2 434
     
    En bref, tu veux écraser les cellules non vides de la plage K10:AO69 (pour octobre) par l'entête de colonne (date ligne 10)
    0
    1. KBA3103 Messages postés 7 Statut Membre
       
      yes c'est tout à fait ça !
      0
  4. ccm81 Messages postés 11033 Statut Membre 2 434
     
    Essaies ceci
    Const lideb = 10
    Const codeb = 11

    Public Sub OK()
    Dim co As Long, cofin As Long, li As Long, lifin As Long, d As Date
    With ActiveSheet
    d = .Cells(lideb, codeb)
    If Month(d) = 12 Then
    df = CDate(Day(d) & "/" & 1 & "/" & Year(d) + 1)
    Else
    df = CDate(Day(d) & "/" & Month(d) + 1 & "/" & Year(d))
    End If
    lifin = .Cells.Find("*", , , , xlByRows, xlPrevious).Row
    cofin = codeb + df - d - 1
    For li = lideb + 1 To lifin
    For co = codeb To cofin
    If .Cells(li, co).Value <> "" Then
    .Cells(li, co).Value = .Cells(lideb, co).Value
    .Cells(li, co).NumberFormat = "dd/mm/yyyy"
    End If
    Next co
    Next li
    End With
    End Sub

    Une remarque en passant. Tu devrais mettre la directive
    Option Explicit
    en début de module, ça t'obligerait à déclarer toutes les variables utilisées,

    Cdlmnt
    0
    1. KBA3103 Messages postés 7 Statut Membre
       
      dacc, je ne savais pas pour Option Explicit (je débute en VBA). Merci du conseil.

      Je vais regarder ta macro dans le weekend, et je te dis ce que ça donne lundi.

      Merci pour ton aide !
      0
    2. KBA3103 Messages postés 7 Statut Membre
       
      Bonjour CCM81,

      J'ai regardé ton code ce weekend mais il ne fonctionne pas, je n'ai pas réussi à l'adapter.
      Par contre j'ai trouvé la solution à mon problème!
      Voici un nouveau fichier dans lequel j'ai fait le test :
      https://www.cjoint.com/c/FKoj2UGJ0RR

      C'est au niveau du bouton 4 que j'arrive à récupérer mes dates à la place de mes charges.

      Merci pour ton aide en tout cas !
      0