Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Concaténation à côté d'un champ formaté par une Macro

P

Philippe

Guest
Bonjour à tous,

Comment concaténer le mot "dossier" à côté de la valeur trouvée en fin de colonne A suite à la macro donnée par RONAN :

Sub compte()
Dim plage_nom, plage_montant, valeur As Range
Dim total_montant As Double
With Sheets("feuil1")
ligne = .Cells(65536, 1).End(xlUp).Row
Set plage_nom = .Range("a2:a" & ligne)
Set plage_montant = .Range("b2:b" & ligne)
.Cells(ligne + 1, 1).Value = plage_nom.Count
total_montant = 0
For Each valeur In plage_montant
total_montant = total_montant + valeur.Value
Next
.Cells(ligne + 1, 2).Value = total_montant
End With
End Sub

Remerciements pour la réponse.

Philippe
 
R

Ronan

Guest
Bonjour,

tu modifies la ligne suivante :

.Cells(ligne + 1, 1).Value = plage_nom.Count

pour obtenir ceci :

.Cells(ligne + 1, 1).Value = plage_nom.Count & " Dossier(s)"

@+

Ronan
 
J

Jacques

Guest
Bonsoir à tous
pour être perfectionniste:
If plage_nom.Count <= 1 then
.Cells(ligne + 1, 1).Value = plage_nom.Count & " Dossier"
Else
.Cells(ligne + 1, 1).Value = plage_nom.Count & " Dossiers"
End If

Bonne fin de soirée
 
@

@+Thierry

Guest
Bonsoir Jacques, Ronan et Philippe, et les Forumeurs (meuses) de la Nuit !


Et pour être encore plus perfectionniste !!


Option Explicit

Sub Compte()
Dim Plage_Nom As Range, Plage_Montant As Range, Valeur As Range
Dim Total_Montant As Double
Dim Ligne As Integer
Dim Doss As String

With Sheets("Feuil1")
Ligne = .Cells(65536, 1).End(xlUp).Row

If Ligne = 1 Then MsgBox "Compte Vide": Exit Sub

Set Plage_Nom = .Range("a2:a" & Ligne)
Set Plage_Montant = .Range("b2:b" & Ligne)

If Plage_Nom.Count = 1 Then Doss = " Dossier" Else Doss = " Dossiers"

.Cells(Ligne + 1, 1).Value = Plage_Nom.Count & Doss

For Each Valeur In Plage_Montant
Total_Montant = Total_Montant + Valeur
Next

.Cells(Ligne + 1, 2).Value = Total_Montant
End With
End Sub


On remarquera....

Faire un syntax comme suit :[/u]
"Dim plage_nom, plage_montant, valeur As Range"
équivaut à ne déclarer en tant que Range "valeur" et que "plage_nom" & "plage_montant" quand à elle sont Variant

Ensuite Option Explicit en tête de module aurait obligé de déclarer "Ligne" qui ne l'était pas...

"Compteur = 0" ne sert à rien

"+ valeur.Value" "Value" n'est pas nécessaire si on a bien déclaré valeur.

Mais ceci dit çà fonctionnait tout de même bien sans tout çà, c'est juste pour montrer, disons, une approche de "perfectionnisme", quoique faire une macro en boucle pour çà, n'est pas non plus très "perfect" !! une formule pourrait le faire aussi, tout en gardant un calcul actif !

Alors je propose ceci plutot :

'
Option Explicit
Sub Compte_Thierry()
Dim L As Integer
Dim Doss As String
Dim Msg As Byte

Start:
With Sheets("Feuil1")
L = .Cells(65536, 1).End(xlUp).Row
If L = 1 Then MsgBox "Compte Vide": Exit Sub
If L = 2 Then Doss = " Dossier" Else Doss = " Dossiers"

If Range("A" & L).HasFormula = True Then
Msg = MsgBox("Un total de " & Range("A" & L) & " semble avoir déjà été appliqué en cellule A" & L _
& vbCrLf & "Voulez vous continuer et le supprimer ? ", vbQuestion + vbYesNo)
If Msg = 6 Then
.Range("A" & L & ":B" & L).Clear: GoTo Start
Else: Exit Sub
End If
End If

.Range("A" & L + 1).Formula = "=CONCATENATE(SUBTOTAL(3,A2:A" & L & "),""" & Doss & """)"
.Range("B" & L + 1).Formula = "=SUM(B2:B" & L & ")"

End With
End Sub
'


C'est plus simple, et surtout la feuille garde des calculs actifs... En prime il y a un test si un total à déjà été fait en bas de colonne...

Bonne Nuit à tous et toutes
@+Thierry
 
P

Philippe

Guest
Merci à tous les noctambules : Thierry, Jacques et Ronan qui m'ont bien aidés pour ma question.

Ce forum est vraiment très actif et on y trouve de bonnes solutions, auprès de gens très perfectionnistes...c'est un compliment sincère.

A+
Philippe
 

Discussions similaires

Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…