Recentrage automatique d'un tableau

Résolu/Fermé
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 - 6 janv. 2016 à 17:47
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 - 12 janv. 2016 à 21:35
Bonjour et bonne année 2016 à tous,

J’ai créé une fonction macro recentrage sous Excel 2003. Pas de problème à ce niveau.

Mon problème c’est que je souhaiterais que la sélection soit automatique quelque soit l’emplacement du tableau (donc uniquement une sélection de la zone de donnée) mais je ne trouve pas la solution.

Ci-joint un fichier d’exemple : https://www.cjoint.com/c/FAgqSjEp6gt

Merci de votre aide

Cordialement
A voir également:

23 réponses

ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
6 janv. 2016 à 17:55
Bonjour

Difficile même avec ton exemple de comprendre ce que tu veux; peux tu compléter tes explications.
Du genre
J'ai un tableau en C4:K8, je veux .....

Cdlmnt
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
6 janv. 2016 à 18:32
Bonjour,

Quelque soit l’emplacement du tableau sur la feuille, je souhaite le sélectionner puis le replacer sur le haut de la feuille.

Cordialement
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
6 janv. 2016 à 18:44
Un exemple avec ce que j'ai compris
http://www.cjoint.com/c/FAgrRI3GCkk

Cdlmnt
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
Modifié par ccm81 le 6/01/2016 à 18:51
Une autre possibilité
http://www.cjoint.com/c/FAgrY4Y6DCk
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
6 janv. 2016 à 18:57
Ta solution marche très bien pour moi, merci.
Est-il possible que la sélection soit automatique ?

Cordialement
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
6 janv. 2016 à 19:05
as tu essayé la deuième possibilité (message 4) ?
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
6 janv. 2016 à 19:16
Ça marche nickel.
Je tente de mettre cette fonction dans un fichier plus complexe après diner et je te donne le résultat.
Merci beaucoup pour tes réponses.

Cordialement
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
6 janv. 2016 à 21:10
J’ai fait des essais et la fonction marche très bien sauf dans le cas ou il y a des cases vides entre deux colonnes. Y a-t-il une solution ?

Voir fichier joint : https://www.cjoint.com/c/FAguhpMXATt

cordialement
0

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

Posez votre question
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
6 janv. 2016 à 21:22
Essaies ceci

Const celcible = "A1"

Sub recentrage()
Dim derlig As Long, dercol As Long, plage As Range
Dim premlig As Long, premcol As Long
derlig = Cells.Find("*", , , , xlByRows, xlPrevious).Row
premlig = Cells.Find("*", , , , xlByRows, xlNext).Row
dercol = Cells.Find("*", , , , xlByColumns, xlPrevious).Column
premcol = Cells.Find("*", , , , xlByColumns, xlNext).Column
Set plage = Range(Cells(premlig, premcol), Cells(derlig, dercol))
plage.Cut Destination:=Range(celcible)
End Sub

Cdlmnt
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
6 janv. 2016 à 22:09
Je rame depuis plus de 30 minutes pour comprendre pourquoi ta fonction (ccm81-9) qui marche si bien dans les exemples ne fonctionnée pas sur mon fichier.

Et voila pourquoi :

Dans mon ficher, les colonnes A et B et les lignes 1 et 2 ne doivent pas être prises en compte !
Le point de recalage haut doit être C3.

Aurais-tu une petite modification à me proposer ?

https://www.cjoint.com/c/FAgvhKNLdwt

Merci

Cordialement
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
7 janv. 2016 à 11:58
Je ne comprends pas bien le problème, sur ton fichier exemple
PremLifg = 9
PremCol = 6 (F)
DerLig = 42
DerCol = 18 (R)
Ce qui définit la plage rectangulaire F9:R42
qui est bien déplacée en C3:O36 après exécution
Ce n'est pas ce que tu veux ?

Cdlmnt
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
7 janv. 2016 à 13:24
OK ccm81, toutes mes excuses, je n’avais pas remarqué que mon bouton de commande macro pointé sur une autre version de fichier avec le positionnement en A1. pb lorsque j'ai sauvegardé le fichier de la version 4 à la version 5.

Ça marche donc très bien. Merci


Comment faut-il faire pour que les macros soient toujours bien accrochée au fichier sauvegardé en cas de changement de nom?

Cordialement
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
7 janv. 2016 à 13:38
En principe un "eregistrer sous" conserve le lien du raccourci-clavier vers la macro.
Par contre, si tu integres la macro à un nouveau fichier, il te faut recréer le raccourci-clavier
L'adresse de la cellule cible (A1 devenu C3) doit bien sûr être modifiée dans la macro en cas de changement de configuration

Cdlmnt
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
7 janv. 2016 à 14:12
merci pour toutes les réponses


cordialement
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
9 janv. 2016 à 22:06
Bonjour,

A l’utilisation de la fonction recentrage_zoom, dans mon fichier joint, j’ai un petit probléme : https://www.cjoint.com/c/FAju7VTssXt

La fonction macro recentrage_zoom marche très bien si il n'y a pas de donnée dans la one en jaune, mais je souhaiterais que cette fonction soit réalisée même s’il y a des données dans les céllules en jaune, donc,

Que la zone verte, dans l’exemple joint, soit déplacée mais que la zone jaune reste toujours en place.

Avez-vous une solution ?

cordialement
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
10 janv. 2016 à 15:27
Bonjour

Essaies celle-ci

Public Sub Cale()
Dim lideb As Long, codeb As Long, lifin As Long, cofin As Long, li As Long, co As Long
Dim plage As Range
With ActiveSheet
lideb = .Range(celcible).Row
codeb = .Range(celcible).Column
lifin = Cells.Find("*", , , , xlByRows, xlPrevious).Row
cofin = Cells.Find("*", , , , xlByColumns, xlPrevious).Column
li = lideb - 1
Do
li = li + 1
co = .Cells(li, Columns.Count).End(xlToLeft).Column
Loop Until co > codeb
lideb = li
co = codeb - 1
Do
co = co + 1
li = .Cells(Rows.Count, co).End(xlUp).Row
Loop Until li > lideb
codeb = co
'MsgBox .Cells(lideb, codeb).Address
Set plage = .Range(.Cells(lideb, codeb), .Cells(lifin, cofin))
plage.Cut Destination:=Range(celcible)
End With
End Sub

Cdlmnt
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
10 janv. 2016 à 18:55
Bonjour à tous,
Bonjour CCM81

Merci CCM81pour ta fonction qui marche très bien.
Je vais essayé d'y ajouter la fonction zoom sur la zone recentrée.

Cordialement
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
Modifié par mijean94 le 10/01/2016 à 22:48
Re

Après utilisation dans mon fichier, je me suis aperçu qu’il y avait des déplacements qui étaient suspect.

La fonction si dessous ne semble pas sélectionner la dernière ligne (de ma zone en vert dans mon fichier) mais la dernière ligne de la zone jaune que je ne doit pas changé de place.
Ça ne dérange pas trop la fonction de recentrage mais lorsque je souhaitais utiliser les coordonnées pour faire un zoom sur cette sélection ça ne marche pas.

lifin = Cells.Find("*", , , , xlByRows, xlPrevious).Row


Heureusement que ce type de forum existe, car seul je galère grave. J’ai passé toute la soirée pour essayer de comprendre comment faire sans trouver de solution.

Aurais-tu une solution à me proposer.

https://www.cjoint.com/c/FAkvUgwWISt

Merci d’avance

Merci
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
10 janv. 2016 à 20:28
En principe, en ajoutant les 5 lignes avant End With, ça devrait fonctionner

  lifin = Cells.Find("*", , , , xlByRows, xlPrevious).Row
cofin = Cells.Find("*", , , , xlByColumns, xlPrevious).Column
Set plage = .Range(.Cells(1, 1), .Cells(lifin, cofin))
plage.Select
ActiveWindow.zoom = True
End With

Bonne soirée
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
10 janv. 2016 à 22:58
Re,

La fonction zoom est ok, merci encore une foi, mais j'ai le problème de sélection de la lifin qui n'est pas la bonne.
Pb exposé dans le poste 19.

aurais-tu une solution ?

cordialement
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
11 janv. 2016 à 16:10
Re, re ...

Je crois qu'il y avait plus que ça, essaies celle là !
http://www.cjoint.com/c/FAlpgSY1I8I

Cdlmnt
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
11 janv. 2016 à 16:59
Re, re, re ...

Et surtout celle là nettement plus simple
http://www.cjoint.com/c/FAlp6FrNhuI

Cdlmnt
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
11 janv. 2016 à 18:19
Bonjour à tous,

bonjour ccm81 et merci pour les réponses.

La fonction zoom prend toujours en compte des données de la zone jaune.
Ce que je souhaiterais, si possible, c'est de faire un zoom uniquement sur la zone recadrée donc la zone verte.

Cordialement
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
11 janv. 2016 à 19:02
Comme ça ?

Option Explicit

Const celcible = "D3"

Sub recentrage_zoom()
Dim derlig As Long, dercol As Long, plage As Range
Dim premlig As Long, premcol As Long, nbli As Long, nbco As Long
' si pas assez grand comme taille, aaugmenter les nb de lignes et de colonnes
Set plage = Range(celcible).Resize(1000, 100)
' MsgBox plage.Address
derlig = plage.Find("*", , , , xlByRows, xlPrevious).Row
premlig = plage.Find("*", , , , xlByRows, xlNext).Row
dercol = plage.Find("*", , , , xlByColumns, xlPrevious).Column
premcol = plage.Find("*", , , , xlByColumns, xlNext).Column
Set plage = Range(Cells(premlig, premcol), Cells(derlig, dercol))
nbli = plage.Rows.Count
nbco = plage.Columns.Count
plage.Cut Destination:=Range(celcible)
derlig = Range(celcible).Row + nbli - 1
dercol = Range(celcible).Column + nbco - 1
premlig = Cells.Find("*", , , , xlByRows, xlNext).Row
premcol = Cells.Find("*", , , , xlByColumns, xlNext).Column
Set plage = Range(Cells(premlig, premcol), Cells(derlig, dercol))
plage.Select
ActiveWindow.zoom = True
Range(celcible).Select
End Sub

Cdlmnt
0
mijean94 Messages postés 394 Date d'inscription mercredi 16 décembre 2015 Statut Membre Dernière intervention 8 novembre 2021 10
11 janv. 2016 à 19:23
Re,

Merci encore CCM81.

Je viens de commander un livre sur la programmation en VBA, pour essayer de comprendre, mais ce n'est pas pour cela que j'y arriverais.

Je vais pendre une soirée de détente grâce CCM81.

Bonne soirée à tous.

Cordialement
0
ccm81 Messages postés 10853 Date d'inscription lundi 18 octobre 2010 Statut Membre Dernière intervention 24 avril 2024 2 404
11 janv. 2016 à 19:57
De rien

En y réfléchissant encore un peu, une fin de code plus simple

plage.Cut Destination:=Range(celcible)
derlig = Range(celcible).Row + nbli - 1
dercol = Range(celcible).Column + nbco - 1
Set plage = Range(Cells(1, 1), Cells(derlig, dercol))
plage.Select
ActiveWindow.zoom = True
Range(celcible).Select
End Sub

Bonne soirée

Cdlmnt
0