Insertion ligne excel VBA
freedix
Messages postés
20
Statut
Membre
-
freedix Messages postés 20 Statut Membre -
freedix Messages postés 20 Statut Membre -
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...)
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
-
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_RSub 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 -
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 -
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.-
-
-
-
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! -
-
-
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 -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
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!