Exploration d'un tableau de dimension inconnue

Résolu
jim77420 Messages postés 2 Date d'inscription mercredi 4 juillet 2012 Statut Membre Dernière intervention 12 juillet 2012 - 4 juil. 2012 à 18:17
jim77420 Messages postés 2 Date d'inscription mercredi 4 juillet 2012 Statut Membre Dernière intervention 12 juillet 2012 - 12 juil. 2012 à 17:47
Bonjour à tous

Je débute en VBA et j'ai développé des petites procédures d'apprentissage, mais "bateau" !!

Je souhaite développer une macro VBA qui va explorer un tableau qui débutera toujours en A1 avec un nombre de colonne fixe (mais à vérifier pour détecter les changements des données source) et un nombre de ligne inconnu. il me faut identifier les nombres de colonne et de ligne maximums pour aller ensuite lire chaque cellule et effectuer un traitement sur le contenu.

j'ai une piste pour identifier le tableau (comme Ctrl * en Excell), mais je n'arrive pas à extraire les valeurs maximums de ligne/colonne pour alimenter les boucles d'exploration.

Merci pour toute l'aide que vous pourrez m'apporter.

Jim

6 réponses

jim77420 Messages postés 2 Date d'inscription mercredi 4 juillet 2012 Statut Membre Dernière intervention 12 juillet 2012
12 juil. 2012 à 17:47
Bonjour à tous,

Je vous remercie pour toutes vos réponses.

On m'a donné une réponse simple et qui répond parfaitement à mes attentes:
"Dim c As Range
Set c = Range("A1").CurrentRegion
MsgBox c.Columns.Count
MsgBox c.Rows.Count"

Je vais quand même analyser vos propositions pour approfondir ma connaissance du VBA.

Encore merci à tous.

Jim
3
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
5 juil. 2012 à 00:38
Salut

Le VB des programmes Office est du VBA, pas du VB6 (catégorie)

On va partir de l'hypothèse où chacune des lignes comporte une donnée dans chaque colonne. Si ce n'est pas le cas, il faudra faire une boucle pour déterminer quelle colonne possède le plus grand nombre de valeurs afin de déterminer le maxi à utiliser.

Pour résoudre ton problème, l'enregistreur de macro te donnera le code correspondant aux manips clavier suivante :
Cellule A1 sélectionnée + combinaison de touches :
- Ctrl+FlècheBas ira sur la dernière ligne de la colonne
- Ctrl+FlècheDroite ira sur la dernière colonne de la ligne.
A partir de là, le .Row ou .Column te fournira les n° de ligne et de colonne.

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
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
5 juil. 2012 à 07:17
Bonjour,

Il y a également l'exploitation des cellules spéciales.
Ainsi :
Sheets("Feuil1").Cells.SpecialCells(xlCellTypeLastCell)
est la cellule la plus "lointaine" de la plage "occupée" de la feuille Feuil1
Ses propriétés Row et Column retournent sa position.
________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
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
5 juil. 2012 à 12:31
A vérifier, mais d'expérience, il me semble qu'il y a un piège avec LastCell :
Si tu écris une valeur dans la cellule de la ligne 4000, LastCell te répondra 4000; Ok
Si ensuite tu effaces cette cellule et que tu saisis une valeur dans la ligne 2000, LastCell te renvoie toujours 4000.
0

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

Posez votre question
DamienGB Messages postés 30 Date d'inscription mercredi 23 mai 2012 Statut Membre Dernière intervention 13 août 2012
10 juil. 2012 à 08:24
J'utilisai (je commence à la connaitre par coeur) souvent cette page qui présente bien les différentes méthodes dans la gestion des tableaux de dimensions inconnues

Tapez le texte de l'url 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
10 juil. 2012 à 11:39
Bonjour, jack,
Tu as raison en ce qui concerne le piège de LastCell (fichu Bill !).
Une parade, dans ce cas. Elle est tirée par les cheveux ! ====>>
Dim toto As Range
Set toto = Cells.SpecialCells(xlCellTypeBlanks)
Set toto = toto.Areas(toto.Areas.Count - 1)
MsgBox "dernière cellule remplie de rang " & toto.Row & "  et de colonne " & toto.Columns.Count + 1


Cela permet d'éviter des boucles.


________________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches.
Pas d'aide en ligne installée ? => ne comptez pas sur moi pour simplement vous dire ce qu'elle contient. Je n'interviendrai qu'en cas de nécessité de développ
0
Rejoignez-nous