Comment compter de manière correcte le nombre de colonne utilisé dans une feuill [Résolu]

Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
- - Dernière réponse : ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
- 19 nov. 2011 à 14:43
Bonjour le Forum,

Je cherche à compter le nombre de colonne d'une de mes feuilles Excel mais la valeur retournée n'est pas la bonne !

J'utilise le code suivant :

Colonne = ActiveSheet.UsedRange.Columns.Count 'Compte le nombre de colonnes dynamiques


J'ai cru voir sur l'aide Excel, qu'il pouvais y avoir des erreurs de comptage du au fait que les colonnes soient séparées.

J'ai pas tout compris en fait^^. Pourtant l'application pour compter le nombre de lignes fonctionne très bien. Mais pas pour les colonnes.

Donc si quelqu'un sait comment compter TOUTES les colonnes d'une feuille Excel indépendamment de la config utilisé ça serait cool.

Bien cordialement,

André
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
3
Merci
Bonjour le Forum,

J'ai fini par trouver ma solution au problème. Voici ci après un code qui permet d'identifier de manière correcte la dernière colonne qui est utilisée dans une feuille Excel. Ça parait simple mais ça ne l'est finalement pas^^

msgbox Cells.Find("*", , , , xlByColumns, xlPrevious).Column


Et voila, ça c'est fait.

Merci pour votre aide.

Bien cordialement,

André

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 223 internautes nous ont dit merci ce mois-ci

Commenter la réponse de SERIEUXETCOOL
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
Bonjour,

Jette un coup d'oeil sur UsedRange dans ton aide VBA

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
Regarde également ce que fait ceci :
MsgBox "dernière colonne de l'occupation : " & Cells.SpecialCells(xlCellTypeLastCell).Column
  MsgBox "dernière ligne de l'occupation : " & Cells.SpecialCells(xlCellTypeLastCell).Row

Maintenant : je n'ai peut-être pas compris ta demande :
S'il s'agit, pour UNE ligne donnée, de connaître la dernière colonne remplie, c'est encore autre chose.
Tu dis ...
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
Tu y es, André ?

Quelques explications, maintenant :
UsedRange est la plage "occupée/utile" et ses columns.count et Rows.count concernent cette plage.
L'erreur qui t'est- signalée n'en est point une du tout.
Il te faut simplement considérer le cas de figure où le usedrange ne démarre pas forcément en cellule A1.
Il faut donc ajouter au columns.count le n° (usedrange.column) de la colonne du début du usedrange - 1 et au rows.count celui (usedrange.row) de la ligne du début du usedrange - 1

Voilà tout;
Je te fais ici un exemple de tout (avec usedrange et avec xltypelastcell) :
MsgBox "dernière colonne de l'occupation :" & vbCrLf & _
  "avec usedrange : " & ActiveSheet.UsedRange.Columns.Count + ActiveSheet.UsedRange.Column - 1 & vbCrLf & _
"avec specialcells(xlCellTypeLastCell) : " & Cells.SpecialCells(xlCellTypeLastCell).Column & vbCrLf & vbCrLf & _
 "dernière colonne de l'occupation :" & vbCrLf & _
  "avec usedrange : " & ActiveSheet.UsedRange.Rows.Count + ActiveSheet.UsedRange.Row - 1 & vbCrLf & _
"avec specialcells(xlCellTypeLastCell) : " & Cells.SpecialCells(xlCellTypeLastCell).Row


Tu pourras constater que les deux méthodes retournent le même résultat, quel que soit le point de départ du usedrange.
____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu
Messages postés
336
Date d'inscription
dimanche 3 avril 2011
Statut
Membre
Dernière intervention
12 juin 2012
1
0
Merci
Bonsoir Ucfoutu,

Dsl pour le retard j'ai eu une journée de dingue. Pas touché terre^^. Alors j'ai pu tester ton code mais ça ne conviens pas tout à fait. C'est justement le problème que j'avais pu lire dans l'aide Vba. Le fait que l'on ne part pas forcément de la colonne A, ou alors du fait que les plages ne sont pas continues.

J'ai testé ton code sur toutes mes feuilles Excel (6 ou 7 feuilles) et il arrive que sur certaines feuilles la valeur retournée pour la dernière colonne d'occupation ne soit pas la bonne ! Toujours à plus ou moins un valeur.

Je vais tenter de reformuler ma demande différemment. Peut être que je me suis mal exprimé (pour changer^^).

Je cherche à savoir quel est le nom de la dernière colonne de ma feuille Excel qui contient une donnée.
Petit Exemple d'application : Si la donnée la plus à droite de ma feuille Excel se trouve en "H13" alors j'ai donc 8 colonnes depuis le début. Pas dur pourtant^^

Suis-je plus clair ainsi ? Ça ne parait pourtant pas compliqué je trouve.

André

Ps : J'ai oublié de mentionner que le nombre de ligne n'est pas tout le temps lui aussi compté de manière correcte. Pareil que pour les colonnes, je cherche à connaitre le numéro de la ligne de ma feuille Excel qui contient une donnée la plus en bas possible.
(Donnée la plus à droite-> numéro de colonne / Donnée la plus ne bas-> numéro de ligne)
Commenter la réponse de SERIEUXETCOOL
Messages postés
18039
Date d'inscription
lundi 7 décembre 2009
Statut
Modérateur
Dernière intervention
11 avril 2018
215
0
Merci
Je ne suis pas d'accord avec toi, André. Pourquoi ? ===>>
parce-que tu parcours ainsi toutes les cellules (lourd)
Je voudrais bien avoir un exemple qui montre que le code que je t'ai montré, notamment celui utilisant xlcelltypelastcell se plante

____________________
Réponse exacte ? => "REPONSE ACCEPTEE" pour faciliter les recherches d'autres forumeurs.
Pas d'aide en ligne installée ? ==> ne comptez pas sur moi pour simplement vous dire ce qu'elle contient
Commenter la réponse de ucfoutu