Insertion ligne excel VBA

freedix Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -  
freedix Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour,

J'ai besoin d'aide pour créer une macro sous excel...

Mon problème est le suivant, j'ai un tableau avec une groupe de colonnes qui désigne la date (colonne A: le jour, colonne B: no de la semaine, colonne C: no du mois)... les colonnes de D à U contiennet diverses données...

J'aimerai créer une macro qui insère une ligne automatiquement dès que le no de la semaine et du mois change. Le but étant d'inscrire les moyennes hebdomadaires et mensuels des valeurs entrées en colonne T et U.

Est-il possible de créer une macro pour faire ça? (sachant que le nombre de lignes remplie par jour peut varier...)

5 réponses

Bidouilleu_R Messages postés 1181 Date d'inscription   Statut Membre Dernière intervention   295
 
Voilà un petit code tout simple
le principe est le suivant je regarde la différence de n° de semaine et la différence
de numéro de mois
si la fin de semaine tombe une fin de mois il y aura deux insertions.

A+
Bidouilleu_R


Sub ajoutligne_sem_mois() 
Dim DerLig As Long 
Dim InsereSemaine As Boolean 
Dim InsereMois As Boolean 

Sheets("feuil1").Select ' on se place sur la feuille 
' où l'on veut inérer les ligness... 
DerLig = Range("A65535").End(xlUp).Row 
InsereSemaine = False 
InsereMois = False 

For i = 2 To DerLig 
    DerLig = Range("A65535").End(xlUp).Row 
    If Cells(i, 2).Value <> Cells(i + 1, 2).Value Then 
        'on teste si la semaine change 
        InsereSemaine = True 
    End If 
    If Cells(i, 3).Value <> Cells(i + 1, 3).Value Then 
        InsereMois = True 
         
    End If 
    If InsereSemaine Or InsereMois Then 
        If InsereSemaine And InsereMois Then 
            Rows(i + 1).Select 
            Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 
            Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 
            i = i + 2 
        Else 
            ' une seule insertion 
            Rows(i + 1).Select 
            Selection.Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove 
            i = i + 1 
        End If 
        ' pas d'insertion 
    End If 
     
    InsereSemaine = False 
    InsereMois = False 
Next 
     
   cells(1,1).select


End Sub
1
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
bonjour,
un peu à la bourre mais c'est lundi

insère ligne au changement de semaine OU de mois

Const lig As Byte = 2 'ligne de départ

Sub separer_semaines_et_mois()
Application.ScreenUpdating = False
separer 2
separer 3
End Sub

Sub separer(col As Byte)

derlig = Cells(65536, col).End(xlUp).Row
'liste les changements
niveau = Cells(lig, col)
For cptr = 1 To derlig
    test = lig + cptr
    If Cells(lig + cptr, col) > niveau And Cells(lig + cptr - 1, col) <> "" Then
        liste = liste & lig + cptr & ":" & lig + cptr & ","
        niveau = Cells(lig + cptr, col)
    End If
Next

'------insère les lignes
Range(Left(liste, Len(liste) - 1)).Insert

End Sub
1
Bidouilleu_R Messages postés 1181 Date d'inscription   Statut Membre Dernière intervention   295
 
Tu as raison michel, c'est lundi je ferai mieux la prochaine fois.
Ton code est qund même joli le mien est plutôt visual et basic :-)
0
freedix Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   2
 
Merci beaucoup pour vos propositions...
J'ai essayé les deux, mais il semble y avoir une erreur, Vb m'affiche ce message "la méthode Insert de la classe range à échoué". Et quand je clique sur "débogage", VB me surligne en jaune la ligne 25 du programme de Bidouilleu_R et la ligne 24 sur celui de michel_m.

Vous voyer d'où ça peut venir? La même erreur dans les 2 programmes, c'est surement moi qui ai mal fait la manip...??

Merci pour votre aide.
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
re,

pourtant j'avais testé.

je ne sais pas compter jusqu'à 24 ! :-)

qu'il y a t il marqué sur cette ligne ? je suppose quand m^me que c'est
Range(Left(liste, Len(liste) - 1)).Insert ?

quelle est ta version d'XL ?

dans l'attente
0
freedix Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   2
 
Oui c'est bien cette ligne.... J'ai excel 2007!
C'est quand je clique sur exécuter la macro que j'ai le message
0
freedix Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   2
 
oups, je viens de m'apercevoir que j'ai mis le mois en colonne B et le no de semaine en colonne C contrairement à ce que j'avais dis au départ... je sais pas si ça change quelque chose...!
0
freedix Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   2
 
Je viens de trouver l'erreur... ce cou ci ça fonctionne, j'avais protéger certaine colonnes du document par un mot de passe... je viens d'enlever la protection et ça merche!

J'en profite pour te poser une autre question... est-ce qu'il est possible de faire en sorte que la ligne insérée ait une mise en page différente des autres (en gros il faudrait que les cellules de A a S soient fusionnée et grisées et qu'on affiche total semaine, ou total mois dedans...). Tu vois ce que je veux dire?

En tout cas merci beaucoup pour ton aide, j'aurais jamais pu faire un tel programme tout seul!
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
je ne crois pas mais essaies et tu nous dis
0
freedix Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   2
 
Bon, c'est plus compliqué que ce que j'imaginais... grâce au programme de michel les lignes s'insèrent lorsqu'on éxecute la macro à chaque changement de mois ou de semaines, mais à l'origine, j'aurais préférer que la macro s'éxécute au fur et à mesure du remplissage du tableau sans qu'on ait à l'éxécuter manuellement... j'ai essayé une seconde macro:

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Call separer_semaines_et_mois
End Sub

mais ça marche pas... et il n'est, apparemment, pas possible d'insérer une ligne avec un format particulier... tant pis! C'est déjà pas mal
0
michel_m Messages postés 16602 Date d'inscription   Statut Contributeur Dernière intervention   3 313
 
Tu pourrais faire ceci mais cela colorie toute la ligne

with Range(Left(liste, Len(liste) - 1))
.Insert
.Interior.ColorIndex = 15
end with

sinon la macro de mon ami bidoullieu pourrait être plus adaptée à ta demande
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
freedix Messages postés 19 Date d'inscription   Statut Membre Dernière intervention   2
 
Bonjour,

Finalement j'ai opter pour une autre solution qui je pense sera plus simple! J'ai inséré 2 colonnes à la fin de mon tableau (à droite). Une colonne "Moyenne Semaine" et une colonne "Moyenne mois"...
Il me rete à trouver un programme qui puisse me calculer ces moyennes... Mais ça devrait être plus simple!

En tout cas, merci pour votre aide!
0