Endrement contour des cellules

Mharira - 2 mai 2013 à 12:19
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 - 3 mai 2013 à 22:53
Bonjour je suis debutante en VBA.
je dois creér une macro qui doit m'encadrer juste le contour de mes cellules a partir de la cellule 28.
j'ai ecrit le code ci-dessous et ça marche.

Sub encadrer_Contour()
Range("A28:I28").Select
Selection.BorderAround xlContinuous, xlMedium, xlColorIndexAutomatic
Range("A43:I43").Select
Selection.BorderAround xlContinuous, xlMedium, xlColorIndexAutomatic
ActiveSheet.Range("E28").CurrentRegion.Select
Selection.BorderAround xlContinuous, xlMedium, xlColorIndexAutomatic
ActiveSheet.Range("A43").CurrentRegion.Select
Selection.BorderAround xlContinuous, xlMedium, xlColorIndexAutomatic

Mais mon probleme est que je souhaiterai avoir un code qui tiendra compte des modifications ou des changement de plage.Par exemple si ma plage ("A28:I28") change ou le nombre de ligne comment dois je faire?
Merci pour votre Aide.

19 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
2 mai 2013 à 12:41
Bonjour,
Surtout du fait que tu débutes :
1) Perds tout de suite la mauvaise habitude de travailler à coups de Select, Selection, etc ...
Travaille directement sur les objets Excel
2) intéresse-toi (ton aide VBA) à ce qu'est la méthode Union pour définir une plage (continue ou non) à traiter

Je te propose ce petit test en exemple :
Dim plage As Range
Set plage = Application.Union(Range("A2:I2"), Range("B4:D4"), Range("G3"))
plage.BorderAround xlContinuous, xlMedium, xlColorIndexAutomatic


Il devrait te "parler", que tu débutes ou non.
A toi ensuite de jouer.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Bonjour,
le code que tu m'as proposer m'encadre bien les celles les plages que j'ai definie.
Mais imaginons que les lignes augmentent ou que les plages changent.
Je souhaiterai avoir un code qui gére automatiquement les modifications et les changements de plage.
Merci d'avance.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mai 2013 à 14:53
Ce que tu précises n'a de sens que si tu précises également les mécanismes logiques qui te permettent de déterminer les plages à traiter !
Un programme "devin" n'existe pas !


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Oui tu as raison!
Donc par exemple la premiere ligne de mon tableau commence a A28 et va jusqu'a I28
et dans cette cellules jai un gros titre que je dont je doit encadrer le contour.
ensuite les reste des cellules de A29 a I40.aprés une ligne vide que je dois toujours laisser
entre les deux tableaux.
Apres de A42 a I42 jai un autre titre que je dois encadrer ensuite le reste des cellules
le code c-idessousqui est le code qui tu m'as proposé le fait bien.

Sub encadrer_Contour()
Dim plage As Range
Dim plage1 As Range
Set plage1 = Application.Union(Range("A28:I28"), Range("A42:I42"))
plage1.BorderAround xlContinuous, xlMedium, xlColorIndexAutomatic
Set plage = Application.Union(Range("A29:I40"), Range("A43:I60"))
plage.BorderAround xlContinuous, xlMedium, xlColorIndexAutomatic
End Sub

Sauf que mon tableau est un tableau qui sera genéré en fontion des données exxistants.
donc il peut y arrivé que les plages changes.donc mon Probleme c'est de comment gerer ses changements qui vont arrivée.
Merci pour les reponses..
0

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

Posez votre question
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
2 mai 2013 à 15:49
Bonjour,

Ça prendrait des cellules "repères" pour que tu puisses boucler et trouver ces cellules.

Disons que tes entêtes commencent toujours par un mot ou un groupe de mots, tu pourrais boucler (ou utiliser Find/FindNext) pour trouver ces cellules.
De là, tu pourrais encadrer tes sections.

Mais est-ce possible dans ton cas ?

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Rebonjour,
Je suis debutante en VBA est ce que tu pourrai m'expliquer clairement stp!
Merci d'avance
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mai 2013 à 16:20
Mais enfin ! ===>> il sont remplis comment, par quoi et depuis où, ces "tableaux" ?
Et ta réponse précise est nécessaire. Si remplis par code : avec le code en cause.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
En fait c'est a chaque fois une mise a jours est faite. par exemple dans le tableau on a la 1ere ligne c celle des nouvelles Anomalies:en desous si a des nouvelle anomalies il les mets et s'il n'ya pas il laisse jste le titre.
Et apres une ligne vide.
Ensuite:
Anomalies supprimées:s'il ya des ano supprimées il met sinon si ya pas il laisse juste la cellules ou ya marqué Anomalies supprimées .Donc moi je dois faire une mise en forme qui doit tenir compte des changements.
Esperant que j'ai eté claire cette fois ci.lol
0
Voici le code des cellules Nouvelle Anomalie
Sub NouvellesAnomalies()
Workbooks(NomBilanAMettreAJour).Sheets("Bilan").Activate
Cells(20, 1).Select
Cells.Find(What:="Nouvelles anomalies", After:=ActiveCell, LookIn:=xlFormulas, _
LookAt:=xlPart, SearchOrder:=xlByRows, SearchDirection:=xlNext, _
MatchCase:=False, SearchFormat:=False).Activate
r = ActiveCell.Row
NBNewAno = Workbooks(NomBilanAMettreAJour).Sheets("Bilan").Cells(r, 1).CurrentRegion.Rows.Count - 1
Cells(r + NBNewAno + 1, 1) = NMBCodeAnomalie
dateNMBDéclarationDA = Day(NMBDéclarationDA) & "/" & Month(NMBDéclarationDA) & "/" & Year(NMBDéclarationDA)
BMMRang = "le: " & dateNMBDéclarationDA & " rang: " & NMBTopVenteInstruc & "- " & NMBBMM ' date de création
Cells(r + NBNewAno + 1, 2) = BMMRang
Cells(r + NBNewAno + 1, 3) = NMBLibelléDA
Cells(r + NBNewAno + 1, 9) = NMBProcessus 'lire processus

Range(Cells(r + NBNewAno + 1, 3), Cells(r + NBNewAno + 1, 8)).Merge
Range(Cells(r + NBNewAno + 1, 1), Cells(r + NBNewAno + 1, 8)).Select

With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlInsideVertical)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With

With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With
'mise en forme
If NMBProcessus <> "" Then
Cells(r + NBNewAno + 1, 9).Select
With Selection.Borders(xlEdgeRight)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With

With Selection.Borders(xlEdgeLeft)
.LineStyle = xlContinuous
.Weight = xlThick
.ColorIndex = xlAutomatic
End With

With Selection.Borders(xlEdgeTop)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
With Selection.Borders(xlEdgeBottom)
.LineStyle = xlContinuous
.Weight = xlThin
.ColorIndex = xlAutomatic
End With
End If
'fin ajout

LLP = Round(Len(LibelléDA) / 125) + 1
Rows(r + NBNewAno + 1).RowHeight = 12.5 * LLP
Cells(r + NBNewAno + 2, 1).Select
Selection.EntireRow.Insert

Workbooks(NomFichierAnomalies).Sheets(FeuilleAnomaliesEnCours).Activate
End Sub
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
2 mai 2013 à 18:20
Bonjour,
Je t'ai dit plus haut de ne pas travailler à coups de Select, Selection, etc ..., mais avec les objets Excel !
Cette mauvais habitude ajoutée au fait que tu ne présentes pas un code indenté et entre balises code (3ème icône en partant de la droite) font que je n'ai pas du tout envie d"'attraper un mal au crane et un torticolis dans ton "labyrinthe".
Recommence s'il te plait proprement : pas de select, etc ... et code entre balises codes

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Bonjour Ucfoutu,
Ce n'est pas moi qui ai fait ce code; je te lai mit par rapport à ta question de savoir par quel code est remplit mon tableau : pour que te puisse comprendre mon problème.

Moi le code que j'ai faite est celui que je t'ai envoyé en 1ere position et tu m'as conseillée l'autre code sans Select et Selection et ça j'ai bien compris.

Maintenant avec ce code quand je précise les plages il marche bien c code, mais à condition que je précise les plages; et moi je souhaiterai avoir un code qui prendra en compte le changement des lignes et colonne du tableau; quand il sera mis à jour.
Merci pour tes reponses.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 mai 2013 à 10:09
Ce n'est pas moi qui ai fait ce code

Mais c'est maintenant TOI, le développeur qui en a pris le relais, hein !
Et c'est donc maintenant TOI, qui va devoir en faire quelque-chose de propre. Sans rien changer du mécanisme ! Juste du propre !
Si tu n'en es pas capable (de cet aspect basique de chez basique), mieux vaudrait passer à autre chose.

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Ben si c'est un aspect basique de chez basique ; aide moi alors.
Si je savais le faire je n'allais pas demander de l'aide.
Merci
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 mai 2013 à 14:42
Je l'ai déjà fait plus haut, ami, mais cela a l'air d'être pour toi du chinois.
Si tu ne veux pas travailler sur les objets directement,
Si tu ne comprends pas que, par exemple :
Range("A28:I28").Select
Selection.BorderAround xlContinuous, xlMedium, xlColorIndexAutomatic

est tout simplement
Range("A28:I28").BorderAround xlContinuous, xlMedium, xlColorIndexAutomatic

Exemple, hein ...!
C'est tout un cours, dont tu aurais besoin. Et ce forum n'est pas un site de cours.
Désolé, mais j'ai appris cette base-là, sans aucune autre aide que celle de VBA, dans les tous premiers moments de mon apprentissage ! Il est maintenant vrai que, moi, je n'ai pas cherché à mettre "la charrue avant les boeufs" et que je me suis infligé de commencer par ... les bases ! ...
Désolé, mais je te laisse, maintenant..

________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
Je suis désolé mais je ne pense pas que vous lisez bien les questions qu'on vous pose,
car ce n'est pas du tout ça ma question.je tai dit depuis le début que le code que j'avais depuis le début il marchait. Mais le problème est loin d'être ce que tu penses mais bon je pense que ce mieux de n'est pas répondre si tu ne comprends pas la question car depuis hier je répète la même chose et pour rien.
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 mai 2013 à 15:12
car depuis hier je répète la même chose et pour rien.

et moi que je ne lirai ton code que lorsqu'il sera buvable.
Or, cette lecture est nécessaire pour te répondre valablement, hein ... puisque tu ne sais pas exposer les choses techniquement et que seule cette analyse de code permettrait alors de deviner où et quand intervenir.
Et puis flute ! Tu as raison ! je ne sais ni lire ni développer. Je n'ai donc pas la compétence nécessaire pour t'aider. D'accord ?
Voilà ! On en finit là en ce qui me concerne.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
3 mai 2013 à 15:27
Comme je disais, il faudrait voir comment tu peux repérer tes groupes à encadrer.
Est-ce qu'il y a un texte qui se répète et qui servirait de repère pour discerner les groupes, à savoir le début et la fin de ces groupes à encadrer.

Comme on ne voit pas ton document, c'est assez difficile de t'aider

Tu utilises déjà Find
Peut-être que tu peux utiliser FindNext pour trouver la suite...
Commence par regarder l'aide sur ces mots


MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
3 mai 2013 à 15:44
Bonjour, MPi,
Je "devine" qu'il sera bien plus simple de le faire lors de cette "mise à jour" elle-même (dans la foulée. Et pas ensuite, avec un Find)
Mais je refuse (dit deux fois) un torticolis et un mal au crâne générés par un code si "tortueux" (ses select, etc ...) et non présenté indenté et mis en forme (en plus).


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" facilitera les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement répéter son contenu. Je n'interviendrai que si nécessité de la compléter.
0
cs_MPi Messages postés 3877 Date d'inscription mardi 19 mars 2002 Statut Membre Dernière intervention 17 août 2018 23
3 mai 2013 à 22:53
Je "devine" qu'il sera bien plus simple de le faire lors de cette "mise à jour" elle-même (dans la foulée. Et pas ensuite, avec un Find)


Effectivement, ucfoutu
Encore faut-il voir comment ça se met à jour...

Mharira,
utilise le 3e bouton à partir de la droite quand tu envoies du code.
Tu sélectionnes ton code puis tu cliques sur le bouton.

MPi²
Pour ceux qui programment sous Office, n'oubliez pas qu'il existe un forum dédié à ces applications VBA....... ICI
0
Rejoignez-nous