[Catégorie modifiée VB6 -> VBA] automatiser mise en forme d'un tableau en vba [Résolu]

Messages postés
21
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
24 août 2011
- - Dernière réponse : thibaut1313
Messages postés
21
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
24 août 2011
- 24 août 2011 à 11:50
Bonjour,

Je travail beaucoup avec excel et j'aimerai pour gagner du temps automatiser certaine mise en forme.
Ce que je souhaite automatiser :

- Je travail avec des tableaux mas je ne sais jamais le nombre de ligne qu'ils contiennent. Pourtant j'aimerai que quand je clic sur un bouton "mettre en forme" que j'ai créé, que toutes les colonnes soit séparer par une bordure mis uniquement les côtés pas le dessus ni le dessous et surtout je ne veux pas les lignes soit aussi séparé.

Merci d'avance.
Afficher la suite 

12 réponses

Meilleure réponse
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
3
Merci
le seul nom de ton bouton me signale déjà que tu n'as pas inséré sur ta feuille de calcul un bouton de commande (ces boutons sont pris dans la boite de contrôles Activex) mais un simple bouton d'Excel.
Il est alors clair que, dans un tel cas, la macro que tu y as associée n'est pas inscrite dans le module de la feuille en cours, mais dans un module bas (module1 chez toi, probablement).
Il est alors également clair que, depuis ce module, UsedRange seul ne veut plus rien dire.
Il suffit de lui indiquer de quel usedrange il s'agit !
tu as le choix, pour ce faire, entre :
Set toto = ActiveSheet.UsedRange
(pour dire à ta macro qu'il s'agit de la feuille active)
ou encore (exemple):
Set toto = Worksheets("Feuil1").UsedRange
pour dire par exemple, qu'il s'agit du usedrange de la feuille de calcul nommée Feuil1

Prends l'habitude de bien distinguer Macros associées à un contrôle (ici un simple bouton) d'Excel et procédures évènementielles d'un contrôle activex (un bouton de commande dans l'exemple que je t'avais montré auparavant).
Essaye enfin d'utiliser les contrôles activex plutôt que les boutons d'Excel, beaucoup moins agiles.
C'est très simple : le nom par défaut donné à un contrôle bouton de commande pris dans la boîte de contrôles activex sera CommandButton1 et non Bouton1
Entraîne-toi.


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 128 internautes nous ont dit merci ce mois-ci

Commenter la réponse de ucfoutu
Messages postés
1863
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
24
0
Merci
[Déplacé sur VBFrance]

Bonjour

Pour les questions concernant VB, VB.net, VBA et VBS, merci de poster sur le forum VB (vbfrance.com)

Krimog : while (!(succeed = try())) ;
- Nous ne sommes pas des décodeurs ambulants. Le style SMS est prohibé. -
Commenter la réponse de krimog
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
Bonjour,

Je te promets que la meilleure manière de rendre un trait transparent est de lui donner exactement la même couleur que le fond sur lequel on le met

Regarde par exemple ce que ferait ceci :

Private Sub CommandButton1_Click()
  With Range("A1:C10")
    .Interior.Color = RGB(255, 255, 255)
    .Borders(xlInsideVertical).Color = RGB(255, 255, 255)
  End With
End Sub

Là, je rends tous les traits transparents.
Inspire-toi de cela pour faire ce que tu souhaites, en utilisant (au lieu de xlInsideVertical) les bordures de ton choix parmi celles-ci (de l'aide VBA) :
xlDiagonalDown 5 Bordure de l'angle supérieur gauche à l'angle inférieur droit de chaque cellule de la plage.
xlDiagonalUp 6 Bordure de l'angle inférieur gauche à l'angle supérieur droit de chaque cellule de la plage.
xlEdgeBottom 9 Bordure au bas de la plage.
xlEdgeLeft 7 Bordure sur le bord gauche de la plage.
xlEdgeRight 10 Bordure sur le bord droit de la plage.
xlEdgeTop 8 Bordure en haut de la plage.
xlInsideHorizontal 12 Bordures horizontales de toutes les cellules de la plage, sauf celles situées en dehors de la plage.
xlInsideVertical 11 Bordures verticales de toutes les cellules de la plage, sauf celles situées en dehors de la plage.




____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
21
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
24 août 2011
0
Merci
Ok merci pour la réponse mais comme je l dit avant je ne connais pas à l'avance les dim de mon tableau donc pouvez vous m'expliquer comment faire pour qu’il détecte automatiquement le nombre de ligne après le nombre de colonne ça je connais donc pas besoin de trouver il y en a 5.
Merci d'avance
Commenter la réponse de thibaut1313
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
60
0
Merci
Salut

Catégorie modifiée

Au clavier, pour aller à la première ligne vide d'une colonne (donc la dernière + 1), il suffit de taper Ctrl-Fin : Enregistre une macro pendant que tu fais cette manip et tu pourra connaitre le n° de la ligne en question.

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Commenter la réponse de cs_Jack
Messages postés
14010
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
60
0
Merci
Info que tu aurais trouvé toi même en faisant la recherche de "dernière ligne tableau" parmi les codes ou les précédentes questions du forum.
Commenter la réponse de cs_Jack
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
Plus simplement encore :

Je suppose que tu veux appliquer ta mise en forme aux seules lignes et colonne utilisées, non ? (le contraire serait surprenant)
Regarde alors ce que ferait ceci (avec un bouton de commande CommandButton1) sur ta feuille :
Private Sub CommandButton1_Click()
  Dim toto As Range
  Set toto = UsedRange
  toto.Select
End Sub

=>> tu verras bien ce qu'est ainsi toto.
Te reste alors simplement à mettre tes instructions de mise en forme de la plage toto (en lieu et place de l'instruction select)
Et je t'ai montré plus haut comment !

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
21
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
24 août 2011
0
Merci
J'ai essayé de rentrer le petit bout de code
Dim toto As Range
Set toto = UsedRange
toto.Select

Mais une erreur intervient sur la ligne set toto = usedrange
IL me dit objet requis et lorsque que je vérifie la valeur de usedrange il me marque qu'elle est vide je ne comprend pas
Commenter la réponse de thibaut1313
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
Cela ne pouvant en aucun cas arriver, même si aucune cellule n'est remplie (feuille totalement vierge), nous te serions reconnaissants de bien vouloir nous confirmer que tu as bien placé un bouton de commande Commanbutton1 sur ta feuille de calcul et que tu y as bien mis ce code (en entier et par copier-coller et sans rien ajouter d'autre :
Private Sub CommandButton1_Click()
  Dim toto As Range
  Set toto = UsedRange
  toto.Select
End Sub




____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
21
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
24 août 2011
0
Merci
je confirme dans le dote j'ai recommencé avec un casseur nouveau
même résultat voici le code tapé


Sub Bouton1_Cliquer()

Dim toto As Range
Set toto = UsedRange
toto.Select

End Sub

je n comprend vraiment pas
Commenter la réponse de thibaut1313
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
211
0
Merci
Il est vraiment important que tu te familiarises avec l'IDE d'Excel et de VBA.
Reviens nous dire quand tu auras terminé cette familiarisation essentielle. Je te montrerai alors un petit bout de code qui te fera comprendre que plusieurs chemins "mènent à Rome".


____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne intallée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
21
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
24 août 2011
0
Merci
Bonjour,

Voila j'ai fais ce que vous m'avez dit. Tout fonctionne parfaitement et j'ai réussi à faire ce que je souhaité.
Un grand merci.
Commenter la réponse de thibaut1313