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

Signaler
Messages postés
21
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
24 août 2011
-
Messages postés
21
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
24 août 2011
-
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

Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
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
Messages postés
1860
Date d'inscription
lundi 28 novembre 2005
Statut
Modérateur
Dernière intervention
14 février 2015
42
[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é. -
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
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
Messages postés
21
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
24 août 2011

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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
70
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.
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
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
Messages postés
21
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
24 août 2011

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
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
Messages postés
21
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
24 août 2011

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
Messages postés
18038
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
232
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
Messages postés
21
Date d'inscription
mercredi 9 juin 2010
Statut
Membre
Dernière intervention
24 août 2011

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.