J'ai dans une variable une adresse absolue de plage sous forme texte , je souhaite m'assurer qu'elle est sous la forme A1 ou A1: D4 ; R1C1 ou R1C1:R4C4 et que les limites sont respectées avant de l'utiliser dans une instruction RANGE(adresse) ?
Mes recherches n'ayant rien donné, je pense qu'ici je trouverai sûrement quelqu'un de plus perspicace.
Existe-t-il une fonction de VBA qui fait cela (j'ai trouvé des bouts de code qui détournent le traitement d'erreurs -on erreur ... if err.number- je veux éviter) ?
Sinon
Auriez-vous une fonction toute prête ?
Sinon
Y a-t-il des constantes VBA qui donnent les limites max des adresses de la version courante d'Excel (XFD1048576 dans Excel 2007 R65536C256 dans Excel 2003) pour que je puisse écrire une fonction de vérification d'adresse de plage indépendante de la version d'Excel ?
Par avance, je vous remercie de vos réponses.
Guy
Question complémentaire, peut-on vérifier l'existence d'une plage nommée plus simplement qu'avec une boucle sur la collection Names et sans détourner le traitement des erreurs ?
Re : VBA : vérifier la validité d'une adresse de plage avant de l'utiliser avec RANGE
Bonjour,
Merci pour ce premier indice, j'ai l'adresse de la dernière cellule (et donc les limites) avec
Code:
Cells(Rows.Count, Columns.Count).Address
Cela ne fonctionne que si la feuille active est une feuille de calcul et donc uniquement si on a accès à une feuille de calcul (ce qui est en général le cas).
Re : VBA : vérifier la validité d'une adresse de plage avant de l'utiliser avec RANGE
Re,
Cela ne fonctionne que si la feuille active est une feuille de calcul et donc uniquement si on a accès à une feuille de calcul (ce qui est en général le cas).
Re : VBA : vérifier la validité d'une adresse de plage avant de l'utiliser avec RANGE
Bonjour,
Mon objectif est une fonction universelle, il se peut qu'il n'y ait pas de feuille de type "worksheet" ouverte au moment de l'exécution de la fonction.
Re : VBA : vérifier la validité d'une adresse de plage avant de l'utiliser avec RANGE
Bonjour,
On doit faire quelque chose comme ça :
Code:
For Each Classeur In Workbooks
For Each Feuille In Classeur.Sheets
If TypeName(Feuille) = "Worksheet" Then
Debug.Print "Trouvé : " & Feuille.Cells(Feuille.Rows.Count, Feuille.Columns.Count).Address
End
End If
Next
Next
Mais si j'arrive à "Pas trouvé" je suis légèrement embêté (cela doit être vraiment très très rare).