Recentrage automatique d'un tableau [Résolu/Fermé]

Signaler
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
-
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
-
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 : http://www.cjoint.com/c/FAgqSjEp6gt

Merci de votre aide

Cordialement

23 réponses

Messages postés
9192
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 janvier 2020
1684
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
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
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
Messages postés
9192
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 janvier 2020
1684
Un exemple avec ce que j'ai compris
http://www.cjoint.com/c/FAgrRI3GCkk

Cdlmnt
ccm81
Messages postés
9192
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 janvier 2020
1684
Une autre possibilité
http://www.cjoint.com/c/FAgrY4Y6DCk
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
Ta solution marche très bien pour moi, merci.
Est-il possible que la sélection soit automatique ?

Cordialement
ccm81
Messages postés
9192
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 janvier 2020
1684
as tu essayé la deuième possibilité (message 4) ?
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
Ç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
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
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 : http://www.cjoint.com/c/FAguhpMXATt

cordialement
Messages postés
9192
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 janvier 2020
1684
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
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
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 ?

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

Merci

Cordialement
Messages postés
9192
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 janvier 2020
1684
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
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
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
Messages postés
9192
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 janvier 2020
1684
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
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
merci pour toutes les réponses


cordialement
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
Bonjour,

A l’utilisation de la fonction recentrage_zoom, dans mon fichier joint, j’ai un petit probléme : http://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
Messages postés
9192
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 janvier 2020
1684
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
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
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
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
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.

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

Merci d’avance

Merci
Messages postés
9192
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 janvier 2020
1684
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
mijean94
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
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
Messages postés
9192
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 janvier 2020
1684
Re, re ...

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

Cdlmnt
Messages postés
9192
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 janvier 2020
1684
Re, re, re ...

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

Cdlmnt
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
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
Messages postés
9192
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 janvier 2020
1684
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
Messages postés
341
Date d'inscription
mercredi 16 décembre 2015
Statut
Membre
Dernière intervention
7 novembre 2019
7
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
Messages postés
9192
Date d'inscription
lundi 18 octobre 2010
Statut
Membre
Dernière intervention
21 janvier 2020
1684
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
1 2