macro pour insérer espaces

mayu

XLDnaute Nouveau
Bonsoir le forum,

Je voudrais construire une macro pour me permettre d'insérer des espaces entre des dates placées en colonnes, lorsque celles-ci ne se suivent pas.
Je veux faire cela car sinon, les courbes que je construits avec ne présentent pas de lacunes dans la série, alors qu'il y en a.

Après avoir épuisé les types de graphiques, je me suis aperçu que si je mettais une cellule vide entre les deux dates, alors la lacune apparaissait clairement dans le graphe.

J'ai une trentaine de fichiers de ce type à traiter et autant de graphes à faire.
Je me disais donc qu'une macro qui recherche une rupture de continuité dans mes colonnes date, me permettrait d'insérer une cellule automatiquement.

Je sais coder l'insertion mais pas la recherche d'une lacune entre deux dates, alors si un(e) génie de la macro connait des astuces, je lui en serai très reconnaissant!!

Je joins un fichier en exemple pour que ce soit plus explicite.

En attendant, je continue la recherche sur le forum....:)

Mayu
 

Pièces jointes

  • 10906X0039.zip
    17 KB · Affichages: 50

SergiO

XLDnaute Accro
Re : macro pour insérer espaces

Bonjour,

Un code à tester:

Code:
Sub Espace()
DerLig = Range("A65536").End(xlUp).Row
For L = DerLig To 3 Step -1
DateL = CDate(Cells(L, 1).Value) 'Date Ligne en cours
DateP = CDate(Cells(L - 1, 1).Value) 'Date Ligne précédente
Diff = DateL - DateP
If Diff <> 1 Then Range("A" & L & ":B" & L).Insert Shift:=xlDown
Next L
End Sub

@+
 

job75

XLDnaute Barbatruc
Re : macro pour insérer espaces

Bonjour mayo, salut Sergio,

Il y avait plein de cellules avec un espace dedans...

Je les ai toutes supprimées, elles mettaient le pataquès :)

Voyez donc le fichier joint.

La macro insère des cellules vides entre les mois non consécutifs.

A+
 

Pièces jointes

  • 10906X0039(1).zip
    23.1 KB · Affichages: 53
Dernière édition:

mayu

XLDnaute Nouveau
Re : macro pour insérer espaces

Salut Job75, Sergio, le Forum.

Job75, ta macro est royale, elle tourne nickel, je l'ai juste modifiée pour qu'elle cherche un écart de plus d'un jour entre deux dates :D

merci beaucoup donc.

Sergio, j'ai pas testé la tienne, mais je le ferai plus tard.

Par contre, question pour comprendre le VBA:

dans le bout de code:

For i = [A65536].End(xlUp).Row To 3 Step -1
If DateDiff("y", Cells(i - 1, 1), Cells(i, 1)) > 1 Then
Cells(i, 1).Resize(, 2).Insert xlDown
i = i - 1
End If

n'est-ce-pas redondant de "décrementer le i avant le end if vu que tu as défini un step -1?

Aussi, tu fais comment pour créer le bouton et mettre un texte dedans?

Aussi, si je veux utiliser cette macro avec d'autres fichiers, j'ai enlevé le Private devant le Sub, comme ça elle visible en cliquant sur outils/macro/.. y-a-t-il une alternative plus smart (comme par exemple que le bouton apparaisse sur tous les fichiers que j'ouvre à partir du moment ou celui ou tu as mis la macro est ouvert?

Enfin, y'a-t-il une raison pour que tu aies écrit ta macro dans ce qui correspond à la feuille dans l'éditeur VBA et pas dans un module (moi je crée souvent des macros à partir de Outils/macro et ça ouvre automatiquement un module...). Un peu de théorie sur le bon usage du module serait le très bienvenu...

En tout cas merci encore et vive ce forum! :)
 
Dernière édition:

job75

XLDnaute Barbatruc
Re : macro pour insérer espaces

Bonjour mayu,

dans le bout de code:

For i = [A65536].End(xlUp).Row To 3 Step -1
If DateDiff("y", Cells(i - 1, 1), Cells(i, 1)) > 1 Then
Cells(i, 1).Resize(, 2).Insert xlDown
i = i - 1
End If

n'est-ce-pas redondant de "décrementer le i avant le end if vu que tu as défini un step -1?

Ce n'est pas redondant, c'est une erreur de ma part :eek:

Il faut supprimer le code i = i - 1 autrement on manque une ligne !

Si l'on veut traiter les écarts de plus d'un jour, le code de Sergio est plus simple.

Pour créer le bouton, menu Affichage- Barres d'outils => Boîte à outils contrôles.

En mode création, clic droit sur le bouton et Visualiser le code => le code est dans la feuille et ne peut être exécuté qu'en cliquant sur le bouton.

Mais bien sûr on peut toujours mettre le corps de la macro dans un Module si on veut l'exécuter de plusieurs façons (boutons, touches de raccourci, etc...)

A+
 

mayu

XLDnaute Nouveau
Re : macro pour insérer espaces

Job75, Sergio

Bien compris Job 75 merci.

Une dernière question: j'ai copié les deux codes dans un module pour y accéder depuis un autre fichier et la macro ne peut être executée...:(
Que ce soit avec ton code ou bien avec celui de Sergio (testé avec succés), il apparaît une erreur 13 (incompatibilité de type),

pour ton code Job75 au niveau de la ligne:
If DateDiff("y", Cells(i - 1, 4), Cells(i, 4)) > 1 Then

pour celui de Sergio, au niveau de la ligne:
DateL = CDate(Cells(L, 1).Value)

on dirait que cela est dû au fait que j'appelle ces macros depuis un classeur différent de celui dans lequel elles sont...

Une idée du problème?

merci
 

job75

XLDnaute Barbatruc
Re : macro pour insérer espaces

Re,

Quelle que soit la macro, il faut alors préciser et le classeur et la feuille où l'on veut travailler.

Avec le code de Sergio :

Code:
Sub Espace()
[COLOR="Red"]With Workbooks("TOTO.xls").Sheets("Feuil1") 'noms du classeur et de la feuille à adapter[/COLOR]
  DerLig = .Range("A65536").End(xlUp).Row
  For L = DerLig To 3 Step -1
    DateL = CDate(.Cells(L, 1).Value) 'Date Ligne en cours
    DateP = CDate(.Cells(L - 1, 1).Value) 'Date Ligne précédente
    Diff = DateL - DateP
    If Diff <> 1 Then .Range("A" & L & ":B" & L).Insert Shift:=xlDown
  Next L
[COLOR="red"]End With[/COLOR]
End Sub

Attention aux points . devant les Range et les Cells...

A+
 

Discussions similaires

Statistiques des forums

Discussions
312 400
Messages
2 088 093
Membres
103 721
dernier inscrit
m.fritih