INCRÉMENTER COLONNE SOUS VBA EXCEL

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 8 févr. 2010 à 22:40
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 9 févr. 2010 à 11:22
Cette discussion concerne un article du site. Pour la consulter dans son contexte d'origine, cliquez sur le lien ci-dessous.

https://codes-sources.commentcamarche.net/source/51267-incrementer-colonne-sous-vba-excel

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
9 févr. 2010 à 11:22
debutLettre est un string
UCase va renvoyer un variant
il faut utiliser ucase$

tropGrand(ByRef debutChiffre <- AS QUEL TYPE? pas typé = variant

etc...
Pariterre Messages postés 15 Date d'inscription mercredi 6 août 2008 Statut Membre Dernière intervention 5 septembre 2010
9 févr. 2010 à 04:58
D'accord, donc si je comprends bien, je peux/dois poster les petites fonctions sur codyx.org. C'est bon, je ferai à l'avenir.

Pour ce qui est du typage, j'avoue ne pas saisir à quoi cela fait référence... là, c'est vraiment parce que je suis débutant en fait. Tu as un lien à me proposer sur le typage (afin de savoir ce que je suis sensé poster et non poster ici)

Merci :)
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
9 févr. 2010 à 02:46
malheureusement ils ne pourront pas te répondre, regarde en haut : j'ai déjà supprimé ta source. seuls toi et moi pouvons voir ces commentaires

donc comme indiqué s'il y a vraiment un intérêt, le code reste trop court. simple fonction : CODYX.ORG

et, rapide ou non, en diagonale il n'est pas correct : aucun typage

bonne soirée
Pariterre Messages postés 15 Date d'inscription mercredi 6 août 2008 Statut Membre Dernière intervention 5 septembre 2010
9 févr. 2010 à 01:48
Finalement, j'ai trouvé une très bonne raison de le conserver!

Mon algorithme passe 100 000 itérations en 0,3 sec
Le dernier de US_30 le fait en 2,3 sec
Le plus lent est le second que US_30 a déposé les faisant en 5,8 sec
Celui de Big les fait en 1,5 sec

J'améliore la vitesse par un facteur 10 pour incrémenter ces lignes.

(bon si c'est pas une raison suffisante, je supprime, j'ai besoin de votre avis là-dessus :))
Pariterre Messages postés 15 Date d'inscription mercredi 6 août 2008 Statut Membre Dernière intervention 5 septembre 2010
9 févr. 2010 à 01:15
Ah ouais, carrément beaucoup mieux.

Pour une raison que j'ignore, je n'ai jamais vu aussi simple nulle part sur les forums! Partout, ils proposent des façons tordues d'incrémenter une colonne... mais jamais aussi simplement.

Ça va me sauver beaucoup de problèmes!

Question pour US_30, je suis mieux de supprimer le tout ou simplement de changer le titre [et éventuellement l'endroit de la source... j'ai lu vite qu'il y avait un endroit pour les sources et un autre pour les choses utiles] pour quelque chose du genre :
Incrémentation de lettre

Merci pour vos réponses :)
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
9 févr. 2010 à 00:53
hum... On peut considérer Instr comme plus gourmand que Len... Donc une autre alternative plus optimisée basée sur le mélange du code de Bigfish et Next :

Function ColNext(ByVal Lettre As String) As String
ColNext = Columns(Columns(Lettre).Column).Next.Address(False, False)
ColNext = Left$(ColNext, Len(ColNext) - 1)
End Function

Qui dit mieux...

Amicalement,
Us.
bigfish_le vrai Messages postés 1835 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 20 novembre 2013 15
8 févr. 2010 à 23:39
Bonsoir,

une fois de plus je ne peux qu'etre d'accord avec US_30 et me permets donc d'y aller de ma version:

Function ColonneSuivante(ByVal ColName As String) As String
ColonneSuivante = Columns(Columns(ColName).Column + 1).Address(False, False)
ColonneSuivante = Left$(ColonneSuivante, InStr(1, ColonneSuivante, ":", vbTextCompare) - 1)
End Function

pour info : Excel2007 => 16384 colonnes

A+
3ddI7IHd
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
8 févr. 2010 à 22:53
ou encore une autre version (moins gourmande en ressource)

Sub MacroViteFait2()

Dim Lettre As String
Dim ColName As String

Lettre = "AB"
ColName = Mid$(Range(Lettre & "1").Next(1, 1).Address, 2, InStr(2, Range(Lettre & "1").Next(1, 1).Address, "$") - 2)
MsgBox ColName

End Sub

Amicalement,
Us.
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
8 févr. 2010 à 22:40
Bonsoir Pariterre,

Beaucoup d'effort pour rien... Voici un peu plus court pour la même chose :

Sub MacroViteFait()

Dim Lettre As String
Dim ColNext As String
Dim ColName As Variant

Lettre = "A"
ColNext = Range(Lettre & "1").Next(1, 1).Address
ColName = Split(ColNext, "$")
MsgBox ColName(1)

End Sub

Du coup, à se demander si cela vaut vraiment le coup de mettre une source pour ça... Je serais tenté de dire non... mais je te laisse voir ça tout seul... En effet, et tu le comprendras bien, qu'il faut mettre des choses qui présente quelque intérêt... et voir le point 2 du règlement...

Amicalement,
Us.
Rejoignez-nous