Insertion des jours manquants

Bonjour,

Je vous explique mon problème:

J'importe depuis google analytics des données dans un fichier excel. Ces données sont les suivantes: dans une colonne il y a les jours du mois numérotés de 1 à 30 et dans une deuxième colonne il y a CA du jour correspondant. Cependant, s'il n'y a pas de CA, il n'y a pas de ligne pour cette journée, ce qui fait que lorsque je contruit un graphique avec ces données je me retrouve en absysse avec par expemple J1 J2 J3 J5 J8 etc etc.

Je souhaiterais pouvoir avoir tous les jours de pris dans mon graphique même ceux sans CA.

Auriez vous une idée?

Merci

Bonjour, vous construisez une boucle en vba qui vérifie que chaque cellule+1 (en coordonnée) est bien égale à la valeur de la cellule + 1.

Si ce n'est pas le cas, vous inseré une ligne et vous rajoutez ce que vous voudrez pour completer vos deux cases

Situation initale

  • Colonne A
    1blabla
    2 blabla
    3 blabla
    5 blabla

Situation intermédiaire

  • Colonne A
    1 blabla
    2 blabla
    3 blabla
    5 blabla

Situation final

  • Colonne A
    1 blabla
    2 blabla
    3 blabla
    4 Aucun CA fourni
    5 blabla

Bonsoir Edouard7522, Force rouge, le forum

Tes données à partir de A1 :

Sub jours_manquants()
Dim debut As Long, fin As Long, i As Long, a, e
    Application.ScreenUpdating = False
    debut = Range("a1").Value
    fin = Range("a" & Rows.Count).End(xlUp).Value
    With CreateObject("Scripting.Dictionary")
        For i = debut To fin
            .Item(i) = Empty
        Next
        a = Range("a1", Range("a" & Rows.Count).End(xlUp)).Value
        For Each e In a
            If .exists(e) Then .Remove e
        Next
        If .Count > 0 Then
            Range("a" & Rows.Count).End(xlUp)(2).Resize(.Count).Value = _
            Application.Transpose(.keys)
        End If
    End With
    With Range("a1").CurrentRegion
        .Sort key1:=Range("a1"), order1:=1, Header:=1
    End With
    Application.ScreenUpdating = True
End Sub

klin89

Salut KLIN89,

Merci de ta proposition de macro c'est sympa!

Je viens de l'essayer sur ces données:

01 24

02 2

03 2

04 2

05 2

06 5

07 1

08 5

10 3

11 2

12 1

13 1

14 4

15 1

18 1

19 3

23 2

24 17

25 10

26 5

27 9

28 3

29 9

30 11

Cependant j'obtiens ceci:

01 24

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

30

02 2

03 2

04 2

05 2

06 5

07 1

08 5

10 3

11 2

12 1

13 1

14 4

15 1

18 1

19 3

23 2

24 17

25 10

26 5

27 9

28 3

29 9

30 11

Sais tu pourquoi?

Je suis un peu perdu en macro et peut etre encore plus en boucle ^^

Merci pour ton aide en tout cas

Bonjour,

Sub test()
    Dim a, nv, i, j
    a = Feuil1.Range("a" & Rows.Count).End(xlUp).Row

    With Feuil1
        For i = a To 1 Step -1
            j = i
            nv = .Cells(i + 1, 1) - .Cells(i, 1)
            If nv > 1 Then Cells(i + 1, 1).Resize(nv - 1, 2).Insert shift:=xlDown
            While .Cells(j + 1, 1) = "" And j < 24
                .Cells(j + 1, 1) = .Cells(j, 1) + 1
                j = j + 1
            Wend
        Next
    End With
End Sub

Salut Force rouge

Edouard7522, tes données sont importées et les nombres ressortent sous forme de texte (alignés à gauche dans tes cellules)

Je contourne le problème comme ceci :

Sub jours_manquants()
Dim debut As Long, fin As Long, i As Long, a, e
    Application.ScreenUpdating = False
    debut = Range("a1").Value
    fin = Range("a" & Rows.Count).End(xlUp).Value
    With CreateObject("Scripting.Dictionary")
        For i = debut To fin
            .Item(i) = Empty
        Next
        a = Range("a1", Range("a" & Rows.Count).End(xlUp)).Value
        For Each e In a
            If .exists(CLng(e)) Then .Remove CLng(e)
        Next
        If .Count > 0 Then
            Range("a" & Rows.Count).End(xlUp)(2).Select
            Range("a" & Rows.Count).End(xlUp)(2).Resize(.Count).Value = _
            Application.Transpose(.keys)
        End If
    End With
    With Range("a1").CurrentRegion
        .Columns(1).TextToColumns FieldInfo:=Array(1, 1)
        .Columns(1).NumberFormat = "00"
        .Sort key1:=Range("a1"), order1:=1, Header:=1
    End With
    Application.ScreenUpdating = True
End Sub

Tes données commençant en A1 et B1 sans en-tête

Edit : si tu entres au clavier tes données (numériques) présentées plus haut, la première macro fonctionne.

klin89

Salutation KLin89, oups (pour le format texte) (mais de toute façon c'est pas bien grave puisque c'est ta solution qu'il a retenu)

Merci bcp à vous deux, j'ai réussi à résoudre mon problème

Bonne journée

Rechercher des sujets similaires à "insertion jours manquants"