Formule ,macro??

Résolu
Bonjour,

J'aurais besoin de votre aide afin de gagner du tps sur un fichier. En effet,je voudrais automatiser une donnée afin que celle ci s'ajoute directement.
Je vous fais suivre le fichier afin que cela soit plus explicite (il s'agit juste d'une partie )

https://www.cjoint.com/?DACrQW9f0pK

Merci de votre aide

2 réponses

  1. Contributeur
    Bonjour,

    une possibilité :
    Sub completeCol()
        Dim c As Range
        For Each c In Selection
            If c = "" Then c = c.Offset(-1)
        Next c
    End Sub 

    Sélectionner la plage à compléter et lancer la macro.

    eric
    0
    1. Merci beaucoup cela fonctionne tres bien
      Par contre il n'est pas possible d'ajouter la colonne (avec ligne début tableau jusqu'à dernière linge) dans la macro sans avoir à la sélectionner?
      Je sais j'en demande bcp!!!

      Mais merci qd même
      0
    2. Contributeur
      Oui c'est possible, en supposant que ton tableau démarre en ligne 7 :
      Sub completeCol()
      Dim c As Range
      Application.ScreenUpdating = False
      For Each c In [A7].Resize(Cells(Rows.Count, 2).End(xlUp).Row - 6)
      If c = "" Then c = c.Offset(-1)
      Next c
      End Sub
      Je me base sur la colonne Date pour détecter la dernière ligne. Elle est sensée être remplie jusqu'au bout.
      Si tu as beaucoup de lignes (plusieurs milliers) et que c'est à faire régulièrement on peut faire plus rapide.

      eric
      0
    3. Merci beaucoup Eric
      Par contre tu dis que l'on peut faire plus rapide cela m'intéresse!
      0
    4. Contributeur
      Bonjour,

      combien de lignes as-tu ?
      Sur mon micro, qui n'est pas récent, ça prend 1.2s pour 6500 lignes, pas le temps de prendre un café...
      Mais bon, on va dire que c'est pour l'exercice :
      Sub completeCol()
      Dim t As Single
      Dim derlig As Long, lig As Long, data As Variant
      't = Timer
      Application.ScreenUpdating = False
      derlig = Cells(Rows.Count, 2).End(xlUp).Row
      data = [A7].Resize(derlig - 6, 1)
      For lig = 1 To UBound(data)
      If data(lig, 1) = "" Then data(lig, 1) = data(lig - 1, 1)
      Next lig
      [A7].Resize(UBound(data), UBound(data, 2)) = data
      Application.ScreenUpdating = True
      'MsgBox Timer - t
      End Sub
      Toujours pour 6500 lignes on passe à 0.055s (x22)

      eric
      0
    5. Merci eric c'est super tout a fait ce que je voulais
      0
  2. Contributeur
    Bonjour

    Avec une formule en E7 mettre ceci et la tirer vers le bas avec la poignée de recopie

    =SI(A7>0;A7;A6)
    0
    1. La formule fonctionne très bien s'il y a 2 tableaux or la, il n" y en a qu'un en fait le deuxième correspond au résultat que je voudrais obtenir
      0

Discussions similaires

exo pix

2 réponses