Excel : format cellule

Merci pour vos réponses, je regarde ça la semaine prochaine, pas le temps ce we. Je vous tiens au courant.:zen:
 
Bon ça marche, mais deux petites questions :

- Au lieu de 400 (dim t(400,2) ) pour le nb de cellules, serait-il possible de mettre une plage de cellules de type A1:A400 à tester sans avoir à sélectionner les cellules ?

- Ajouter une clef de tri croissante sur ces 3 derniers chiffres, et en une seule action (clique sur le bouton que j'ai créé) : chercher et marquer les doublons (ou les triplons ou les xblons), et trier les références
:siffle:
 
bon, on continue...j'ai cru lire merci, mais je dois avoir la vue qui baisse :siffle:

L'instruction dim t(400,2) doit rester, car c'est cette variable t qui permet de calculer les doublons;

si tu ne veux pas sélectionner la plage au préalable, il faut mettre comme première instruction
Range(Cells(1,1),Cells(1,400)).Select
mais c'est moins souplePour la seconde question, il faudrait me donner l'adresse d'une plage libre de la feuille dans laquelle je peux mettre des calculs intermédiaires si nécessaire.
 
Salut,
J'ai terminé ! (et cà marche....)
je n'attends plus que l'adresse d'une plage libre (minimum 2 colonnes de 400 lignes) dans la feuille pour y écrire des données intermédiaires, puis je te donne la solution finale.

@+;)
 
  • J’aime
Réactions: kabeha
:zen::zen::zen: :rose::rose::rose:

A quel endroit doit s'insérer "Range(Cells(1,1),Cells(1,400)).Select" ?

Comme plage de cellules, à partir de M1 à ce que tu veux.

Un petit truc : après avoir lancer la macro, j'ai les trois derniers chiffres qui s'affichent dans la colonne G et m'effacent les données que j'ai dans cette colonne.

Et d'avance merci. ;)
 
Voilà la bête....
Pour le problème des cellules effacées, c'est une procédure de tests que j'avais oublié d'effacer :siffle:; c'est chose faite.
Je te rappelle que cette macro traite inexorablement la plage A1:A400
L'exécution dure un certain temps, selon la vélocité de ton processeur.
Je suis content d'avoir pu résoudre le problème, c'est un excellent énoncé d'exercice...là c'est le prof qui parle.
Salut, et à plus

Sub jmd()
'met en rouge les 3 derniers caractères d'un nombre de 9 chiffres'
'pour autant que ces 3 caractères ont au moins 1 doublon dans la liste sélectionnée
'maximum 400 cellules, sinon modifier instruction dim t(400,2)

Dim cellule As Object, x As String
Dim i, k, nb_cell As Integer
Dim t(400, 2)

'tri croissant sur les 3 derniers caractères
For k = 1 To 400
Cells(k, 14) = Cells(k, 1)
Cells(k, 13) = Right(Cells(k, 1), 3)
Next

Range("M1:N400").Select
Selection.Sort Key1:=Range("M1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
For k = 1 To 400
Cells(k, 1) = Cells(k, 14)
Next

'effacer zone de travail
Range("M1:n400").Select
Selection.Clear
Range("a1").Select

' mise au format texte, comptage des cellules
' et création du tableau pour tester les doublons
'------------------------
Range(Cells(1, 1), Cells(400, 1)).Select
k = 0
For Each cellule In Selection
cellule.NumberFormat = "@"
k = k + 1
t(k, 1) = Right(cellule, 3)
t(k, 2) = 0
nb_cell = nb_cell + 1
Next

'comptage des doublons
'----------------
For k = 1 To nb_cell
x = t(k, 1)
For i = 1 To nb_cell
If t(i, 1) = x Then
t(k, 2) = t(k, 2) + 1
End If
Next i
Next k

'traitement couleur des cellules
'---------------------
k = 0
For Each cellule In Selection
k = k + 1
If t(k, 2) > 1 Then
x = cellule
cellule = x
cellule.Characters(Start:=1, Length:=0).Font.ColorIndex = xlAutomatic
cellule.Characters(Start:=7, Length:=0).Font.ColorIndex = 3
cellule.Characters(Start:=7, Length:=0).Font.FontStyle = "Italique"
End If
Next

End Sub

Merci aussi !
 
Chapeau bas :up::zen:

J'ai changé juste le nb de cellules par 800 partout. Comme mes réf. comportent 10 chiffres et non 9, j'ai modifié certaines lignes en ajoutant+1; par déduction cells(k, 13) et cells(k,14) (d'ailleurs pourquoi 13 et 14 ? ) et start=7

Pour que ce soit tip top, pourrait-on faire formater ces cellules selon le modèle 0000 000 000 ?
 
Si tu vas dans Excel>Préférences>Général et que tu coches l'option "style de référence L1C1" tu remarqueras que les colonnes sont numérotées 1,2,3... en lieu et place de A,B,C

Cells(1,13) et l'instruction qui réfère Ligne 1 colonne 13, soit la cellule M1
cells(800,14) réfère la cellule N800 (ce que tu m'as donné comme plage libre);
il n'est donc pas nécessaire d'ajouter 1 à ces n° de colonne.
ce type de référence est nettement plus logique que celui par défaut.

Start:=7 signifie "à partir du septième caractère"; pour les 3 derniers d'une série de 10, il faut remplacer par Start:=8

Pour les 10 chiffres et la séparation en 3 zones, je regarde demain; ce n'est pas grand chose comparé au reste. ;)
 
Dernière édition par un modérateur:
voilà tip top :

Sub jmd()
'met en rouge les 3 derniers caractères d'un nombre de 10 chiffres'
'pour autant que ces 3 caractères ont au moins 1 doublon dans la liste sélectionnée
'le nombre est ensuite scindé en groupes de 4+3+3 chiffres

Dim cellule As Object, x As String
Dim i, k, nb_cell As Integer
Dim t(800, 2)

Range("A1:A800").Select
Selection.NumberFormat = "@"

'tri croissant sur les 3 derniers caractères
For k = 1 To 800
Cells(k, 14) = Left(Cells(k, 1), 4) & " " & Right(Left(Cells(k, 1), 7), 3) & " " & Right(Cells(k, 1), 3)
Cells(k, 13) = Right(Cells(k, 1), 3)
Next

Range("M1:N800").Select
Selection.Sort Key1:=Range("M1"), Order1:=xlAscending, Header:=xlGuess, _
OrderCustom:=1, MatchCase:=False, Orientation:=xlTopToBottom
For k = 1 To 800
Cells(k, 1) = Cells(k, 14)
Next

'effacer zone de travail
Range("M1:N800").Select
Selection.Clear
Range("a1").Select

' mise au format texte, comptage des cellules
' et création du tableau pour tester les doublons
'------------------------
Range("A1:A800").Select
k = 0
For Each cellule In Selection
k = k + 1
t(k, 1) = Right(cellule, 3)
t(k, 2) = 0
nb_cell = nb_cell + 1
Next

'comptage des doublons
'----------------
For k = 1 To nb_cell
x = t(k, 1)
For i = 1 To nb_cell
If t(i, 1) = x Then
t(k, 2) = t(k, 2) + 1
End If
Next i
Next k

'traitement couleur des cellules
'---------------------
k = 0
For Each cellule In Selection
k = k + 1
If t(k, 2) > 1 Then
x = cellule
cellule = x
cellule.Characters(Start:=1, Length:=0).Font.ColorIndex = xlAutomatic
cellule.Characters(Start:=10, Length:=0).Font.ColorIndex = 3
cellule.Characters(Start:=10, Length:=0).Font.FontStyle = "Italique"
End If
Next

Range("a1").Select

End Sub
 
RE-remerci :up:

Deux soucis néanmoins :

- Si je relance la macro, elle me reformate les cellules et les références ne sont plus cohérentes. Il faudra que je traite tout en une seule fois et donc pas d'ajouts ?

- La macro me formate la cellule A1 qui contient le titre de colonne. Dois-je changer seulement A1 et M1 dans les plages par A2 et M2 ? Dans 'Range("a1").Select', "a1" = "A1" ?

Voilà de quoi corser l'énoncé du problème :D;)
 
*)
pour traiter les ajouts, c'est une autre paire de manches : il faut repenser tout le problème.... tu aurais dû donner plus tôt toutes ces précisions....mais j'y réfléchirai, sans promesse de résultat immédiat.

*)
"A1" est équivalent à "a1" (pas de casse dans les adresses de cellules)

*)
pour le problème du titre en A1 : faire les modifs suivantes :
Range("A2:A800").Select
For k=2 to 800
range("M2:N800")
range("A2").select
k=0 ---> k=1
for k=2 to nb_cell
for i=2 to nb_cell
 
Merci bien, je vais me débrouiller comme ça. :up:

Par contre, j'ai 2 colonnes (réf + adresse) et pas mal de données, ce qui fait beaucoup de feuilles à imprimer. Je voudrais condenser ça en affichant sur 6 colonnes (3x2), je ne vois pas d'options me le permettant. Je pensais copier les données (une fois triées et formatées) dans une nouvelle feuille dans laquelle je répète les colonnes, mais s'il y a mieux.
 
Salut,

à ma connaissance, je ne vois rien d'autre de de copier/coller en plusieurs morceaux; personnellement (via la mise en page), je choisirait le mode 'Paysage', marges minimum, et on peut aussi imposer le nombre de pages (ajuster à .....), auquel cas Excel adapte la taille de la police (mais cela doit rester lisible, je suppose); fait un Aperçu avant impression avant de lancer l'impression
Mais lorsque tu dit "beaucoup de données", on ne sait pas si cela veut dire 100, 1000, 10000, 65536, ...:rolleyes: c'est un peu vague... comme d'hab :siffle:

à +, sans aucun doute...
 
je ne vois rien d'autre de de copier/coller en plusieurs morceaux
C'est ce que j'ai fait, c'est bon comme ça. Pour le moment environ 300 réf., mais cela pourrait changer à moyen terme.

Merci bcp pour le temps que tu as consacré à mon pb. :zen::zen::zen: