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

Résolu
thibaut1313 Messages postés 21 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 24 août 2011 - 23 août 2011 à 09:15
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.

12 réponses

ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 août 2011 à 19:29
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
3
krimog Messages postés 1860 Date d'inscription lundi 28 novembre 2005 Statut Membre Dernière intervention 14 février 2015 49
23 août 2011 à 10:03
[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é. -
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 août 2011 à 10:16
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
0
thibaut1313 Messages postés 21 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 24 août 2011
23 août 2011 à 12:04
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 août 2011 à 12:47
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)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
23 août 2011 à 12:48
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.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 août 2011 à 14:25
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
0
thibaut1313 Messages postés 21 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 24 août 2011
23 août 2011 à 15:42
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 août 2011 à 16:22
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
0
thibaut1313 Messages postés 21 Date d'inscription mercredi 9 juin 2010 Statut Membre Dernière intervention 24 août 2011
23 août 2011 à 17:46
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
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 août 2011 à 19:55
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
0
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,

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.
0
Rejoignez-nous