VBA Création entetes de colonnes

Sylvie

XLDnaute Accro
Bonjour Cher Forum et Bonjour à vous tous

Je sollicite votre aide pour m’aider à construire le fichier suivant.
Le but : créer dans une feuille de calcul, des entêtes de lignes et entêtes de colonnes en fonction de choix opérer dans une autre feuille.
Apres des recherches sur le forum, et en adaptant tant bien que mal un code, je suis parvenue à créer les lignes de ma seconde feuille (macro Création Lignes Bordereau Urssaf).

Mais je souhaiterais également pouvoir créer les entêtes de colonne dans ma feuille URSSAF selon le critère de périodicité des déclarations
-soit la périodicité est trimestrielle et les entêtes de colonnes E à H de ma feuille « Urssaf » doivent être nommées 4T, 3T, 2T, 1T
-soit la périodicité est mensuelle et mon tableau devra alors comporter douze colonnes qui se nommeront de gauche à droite (Déc, Nov, Oct etc …) de E à P
(ps : si on peut rajouter le millésime également dans l’entête ce sera encore mieux : 2009, 2010…)
La colonne D ne doit pas être utilisée car elle sera de toute façon réservée à une totalisation.

Pouvez vous me créer une macro associée à un bouton quelconque présent dans la première feuille, qui me permettra d’effectuer ce choix et d’avoir le résultat attendu en feuille « Urssaf » ?

Par avance merci.


Bien Amicalement

Sylvie
 

Pièces jointes

  • Essai DUCS.xls
    176.5 KB · Affichages: 127

jp14

XLDnaute Barbatruc
Re : VBA Création entetes de colonnes

Bonjour (re)

Ci dessous le code modifié.
La procédure demande la périodicité.

A tester

Code:
Sub URSSAF()
Dim i As Long
Dim j As Long
Dim rep As Variant
Dim reponse As Variant

rep = MsgBox("Vous allez écraser les données de la feuille URSSAF", vbYesNo)
If rep = 7 Then Exit Sub
With Sheets("Urssaf")
.Range("A2:q35").ClearContents
.Range("D2") = "Année" & Year(Now)
Do
        reponse = Application.InputBox(Prompt:="Veuillez indiquer la périodicité", Type:=1, Default:="1 :  pour mensuel 2 : pour trimestriel")
        Select Case reponse
            Case ""
                MsgBox "vous n'avez pas  fait de saisies!" & Chr(13) & "recommencez!", vbCritical, "GRRrrrr!"
            Case False
                Exit Sub
            Case 1
                
                ' création de l'entête
                j = 5
                For i = 12 To 1 Step -1
                    .Cells(3, j) = MonthName(i)
                    j = j + 1
                Next i
                
                Exit Do
            Case 2
                ' création de l'entête
                j = 5
                For i = 4 To 1 Step -1
                    .Cells(3, j) = i & "T"
                    j = j + 1
                Next i
                Exit Do
            Case Else
                Call MsgBox("Réponse erronée", vbExclamation, "")
        End Select
 Loop
End With



With Sheets("CodeDucs")
For i = 2 To .Range("C65536").End(xlUp).Row
If .Cells(i, 1) = "X" Then
    j = WorksheetFunction.Max(Sheets("Urssaf").Range("B65536").End(xlUp).Row + 1, 4)
    Sheets("Urssaf").Cells(j, 1) = .Cells(i, 2)
    Sheets("Urssaf").Cells(j, 2) = .Cells(i, 3)
    Sheets("Urssaf").Cells(j, 3) = .Cells(i, 4)
End If
Next i
End With
End Sub


JP
 

Sylvie

XLDnaute Accro
Re : VBA Création entetes de colonnes

Re bonjour

Merci beaucoup Jp14. Tout fonctionne comme je le souhaitais.

Peux tu cependant me dire ce que je dois modifier dans le code pour que les libellés des cellules A3, B3, C3 et D3 ne soient pas effacés, lors de la création des entêtes de colonnes ?
 

Sylvie

XLDnaute Accro
Re : VBA Création entetes de colonnes

Re bonjour Jp14,

OK j'ai remplacé la plage par A4:Q35 mais que dois je rajouté pour qu'en plus le contenu de la cellule D2 et de la plage E3 à P3 soit effacé ?

Question Bis concernant le format des mois : que dois je rajouter pour que le mois de Décembre s'écrive Déc., Novembre Nov. etc ...

Re Merci
 

jp14

XLDnaute Barbatruc
Re : VBA Création entetes de colonnes

Bonjour (re)

Il faut écrire des lignes

With Sheets("Urssaf")
.Range("E3:p3").ClearContents
.Range("d2").ClearContents

Concernant le nom des mois il faut les écrire
.cells(3,4)="Dec"
...................
.cells(3,x)="Jan"

ou
= ucase(mid(MonthName(i),1,1)) & mid(MonthName(i),2,2)

a tester

JP
 

Sylvie

XLDnaute Accro
Re : VBA Création entetes de colonnes

Bonjour Cher Forum,


Je souhaite modifier quelques éléments de mon tableau et j'ai de nouveau grandement besoin de votre aide.
Comment dois-je modifier le code ci dessous pour que ma plage de cellules qui est copiée dans ma feuille nommée CodeDucs se copie à partir de la ligne 4 et non apres la derniere ligne utilisée en colonne B?
Code:
With Sheets("CodeDucs")
For i = 2 To .Range("C65536").End(xlUp).Row
If .Cells(i, 1) = "X" Then
    j = WorksheetFunction.Max(Sheets("Urssaf").Range("B65536").End(xlUp).Row + 1, 4)
    Sheets("Urssaf").Cells(j, 1) = .Cells(i, 2)
    Sheets("Urssaf").Cells(j, 2) = .Cells(i, 3)
End If
Next i
End With
Pouvez vous étoffer le code de sorte qu'ensuite sur ma feuille Urssaf :
- les lignes vides de ma feuille Urssaf soient supprimées jusqu'à la ligne 28 incluse (si la colonne A est vide alors la ligne est considérée vide)
- un total soit effectué colonne C (total des colonnes adjacentes D à O maximim) jusqu'à la ligne "Cotisations payées"
- je souhaite enfin recopier la plage débutant ligne 4 colonne A à C jusqu'à la dernière ligne servie au dessus de "cotisations payées" --> copie valeur en A34

A la fin de l'exécution, je souhaite être positionnée dans ma feuille Urssaf

Par avance merci.

Bonne journée à tous
 

Pièces jointes

  • URSSAF Ducs.xls
    62.5 KB · Affichages: 2 136

jp14

XLDnaute Barbatruc
Re : VBA Création entetes de colonnes

Bonjour

En réponse aux questions

Code:
...............
Dim cellule As Range
Dim nomfeuille1 As String
nomfeuille1 = "Urssaf" ' si on doit modifier le nom de la feuille il suffit simplement de modifier ici

rep = MsgBox("Vous allez écraser les données de la feuille URSSAF", vbYesNo)
...............................

With Sheets(nomfeuille1)
j = 4
For i = 2 To Sheets("CodeDucs").Range("C65536").End(xlUp).Row
If UCase(Sheets("CodeDucs").Cells(i, 1)) = "X" Then
    With .Cells(j, 1)
    .Value = Sheets("CodeDucs").Cells(i, 2)
    .Font.Name = "Arial"
    .Font.Size = 8
    .Font.ColorIndex = 0
    .Font.Bold = False
    End With
    With .Cells(j, 2)
    .Value = Sheets("CodeDucs").Cells(i, 3)
    .Font.Name = "Arial"
    .Font.Size = 8
    .Font.ColorIndex = 0
    .Font.Bold = False
    End With
    j = j + 1
End If
Next i
End With

' pour boucler sur la colonne 1
With Sheets(nomfeuille1)
.Range("B30") = "COTISATIONS PAYEES"
.Range("B30").Font.ColorIndex = 3
.Range("c30").FormulaR1C1 = "=SUM(RC[1]:RC[12])"

       
.Range("B32") = "Tableau Récapitulatif"
.Range("c33") = "Base"
.Range("d33") = "Taux"
.Range("e33") = "Total"
For i = 28 To j Step -1
If .Range("a" & i) = "" Then
.Rows(i).Delete Shift:=xlUp
End If
Next i



.Select
End With


End Sub

Ucase pour autoriser les x minuscules

JP
 
Dernière édition:

Sylvie

XLDnaute Accro
Re : VBA Création entetes de colonnes

Bonjour

Je te remercie une nouvelle fois Jp14.

Pour mes autres questions, je vais créer un nouveau post puisque tu as déjà largement répondu à ma demande initiale.

Une chose m'échappe quand j'essaie de comprendre l'écriture du code ; lorsque tu écris
With Sheets("CodeDucs")
j = 4
For i = 2 To .Range("C65536").End(xlUp).Row

je crois comprendre que tu te positionne dans la feuille CodeDucs et non dans la feuille Urssaf. Comment se fait il alors que l'écriture des cellules copiées dans ma feuille Urssaf démarre bien à la ligne 4 :confused: ??

NB : J'ai bien conscience qu'il s'agit de basiques en VBA , mais hélas même les basiques me posent problème.

Bonne journée
 

jp14

XLDnaute Barbatruc
Re : VBA Création entetes de colonnes

Bonjour (re)

Bonjour

Je te remercie une nouvelle fois Jp14.

Une chose m'échappe quand j'essaie de comprendre l'écriture du code ; lorsque tu écris
With Sheets("CodeDucs")
j = 4
For i = 2 To .Range("C65536").End(xlUp).Row

La variable i correspond à la feuille CodeDucs
la variable j à la feuille Urssaf.
Voir mon précédant message.

JP
 

Sylvie

XLDnaute Accro
Re : VBA Création entetes de colonnes

Bonjour (re aussi)

Merci une nouvelle fois Jp14. La suppression des lignes marche nickel.

Je vais désormais m'atteler à copier les valeurs de la plage sous le Tableau récapitulatif et à faire le total de mes colonnes. Peux tu m'indiquer si je dois coller le code supplémentaire après le End With ou avant ?

Sylvie
 

Sylvie

XLDnaute Accro
Re : VBA Création entetes de colonnes

Re bonsoir Jp14,

tu m'excuseras mais je n'avais pas vu que tu avais intégré dans le code la somme des colonnes 1 à 12 pour la ligne "Cotisations payées".
.Range("c30").FormulaR1C1 = "=SUM(RC[1]:RC[12])"

Que dois je rajouter et où dans le code pour que la boucle intègre aussi la colonne C des lignes au dessus. En fait de la cellule C4 à la ligne (-2)
(en face de chaque ligne possédant un code Urssaf (colonne A) je" dois effectuer dans la colonne C ceci :
.range("??:??).FormulaR1C1 = "=SUM(RC[1]:RC[12])")

J'ai bien essayé de bidouiller mais pas de chance je n'arrive à faire les additions que pour quelques lignes en dessous (lol)



Sylvie
 

Discussions similaires

Réponses
3
Affichages
292

Statistiques des forums

Discussions
312 193
Messages
2 086 058
Membres
103 110
dernier inscrit
Privé