[VBA Excel] recuperer la lettre d'une colonne [Résolu]

Signaler
Messages postés
695
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
5 janvier 2010
-
Messages postés
20
Date d'inscription
lundi 2 février 2009
Statut
Membre
Dernière intervention
3 mai 2013
-
Hello! Voila mon problème :

Je dois ajouter automatiquement sur une ligne un nouveau mois, puis remplir la colonne de données...
Je fais donc une boucle qui me parcourt la ligne jusqu'au dernier enregistrement, auquel je rajoute 1 pour me placer au bon endroit. C'est la que les problemes arrivent, puisque lorsque je veux "étirer" la formule sur une colonne supplementaire, je recois un message d'erreur : 'la méthode autofill de la classe Range à echouée'.


 


Voila mon code :

'Boucle qui parcourt la ligne jusqu'au premier enregistrement vide
While Cells(2, i) <> ""
i = i + 1
Wend


 



'"etirage" de la formule a la nouvelle cellule 
Range("D2").Select
 Selection.AutoFill Destination:=Range(Cells(2, 4), Cells(i, 2)), Type:=xlFillMonths
 Range(Cells(4, 2), Cells(2, i)).Select








 





(Si la réponse vous convient, appuyez sur réponse acceptée...)





Il y a plusieurs facon d'être con ,mais un con choisit toujours la pire
<>

5 réponses

Messages postés
695
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
5 janvier 2010
28
Voiula ce que j'ai trouvé sur un forum! Et ca marche nickel!
Merci à tous pour votre aide!

NumCol = Cells(2, i).Column

lettre = IIf(NumCol > 26, Chr(64 + NumCol \ 26) & Chr(64 + NumCol Mod 26), Chr(64 + NumCol))

(Si la réponse vous convient, appuyez sur réponse acceptée...)

Il y a plusieurs facon d'être con ,mais un con choisit toujours la pire< body>
Messages postés
2237
Date d'inscription
lundi 29 mai 2006
Statut
Membre
Dernière intervention
29 mai 2008
10
salut
Selection.AutoFill Destination:=Range("A8:A" & i)
essaie en faisant par un range comme ca au lieu d'utiliser les cells.
Je crois que quand je l'avais fais avec des cells j'avais la meme erreur.

 Drikce 06
Messages postés
6786
Date d'inscription
vendredi 16 décembre 2005
Statut
Membre
Dernière intervention
21 décembre 2011
18
Salut :

Je pense que la méthode de Drikce 06 est la plus appropriée.
Sache qu'effectivement Destination doit être de type Range.

Donc avec ta méthode, ca donnerait ceci :
Dim MaPlage As Range

MaPlage = (Cells(2, 4), Cells(i, 2)
Range("D2").Select

Selection.AutoFill Destination:=MaPlage, Type:=xlFillMonths

MaPlage.Select

@++

--Mortalino--
Le Mystérieux Chevalier "Provençal, le Gaulois"
N'oubliez pas de lire le règlement !
Messages postés
695
Date d'inscription
jeudi 5 mai 2005
Statut
Membre
Dernière intervention
5 janvier 2010
28
Le gros problême en fait, c'est ce 'i'. En utilisant la methode de Mortalino, je recois le même message d'erreur qu'indiqué plus haut! Je vous en prie aidez moi, ca commence à me faire c....!!!! mdr


Il faudrait juste que je puisse trouver le moyen de remplacer ce 'i' par la lettre correspondante!!!!


Merci à vous pour votre aide! 





(Si la réponse vous convient, appuyez sur réponse acceptée...)





Il y a plusieurs facon d'être con ,mais un con choisit toujours la pire
< body>
Messages postés
20
Date d'inscription
lundi 2 février 2009
Statut
Membre
Dernière intervention
3 mai 2013

Bonjour,

NumCol = Cells(2, i).Column

lettre = IIf(NumCol > 26, Chr(64 + NumCol \ 26) & Chr(64 + NumCol Mod 26), Chr(64 + NumCol))
Sous VBA Excel
supposons que i=20
c'est impécable lettre = "T"
Mais si i=200 (Sur Excel on peut aller jusqu'à IV soit 256 colonnes)
la formule génére alors une : Erreur d'exécution '5'
Argument ou appel de procédure incorrect.
Si on décompose la formule on se rend compte que l'erreur vient de la fin de la formule :
Chr(64 + NumCol) qui devient Chr(264) et hop on sort de la table ASCII.
C'est balot hein !!
par contre j'ai trouvé une solution qui marche à tous les coups sur le site
frederic.sigonneau.free.fr/Cellules.htm
qui donne ceci

Function Nombre_en_Lettre(Nombre As Long) As String
'// Dana DeLouis
If Nombre > 0 And Nombre < 257 Then
Nombre_en_Lettre = Split(Cells(Nombre).Address, "$")(1)
Else
Nombre_en_Lettre = Error(9) '> Valeur hors contexte
End If
End Function


Sub test()
MsgBox Nombre_en_Lettre(ActiveCell.Column)
MsgBox Nombre_en_Lettre(256)
End Sub

et là ça marche jusqu'à 256
Maintenant que j'ai la lettre il va falloir que le format conditionné marche avec ma sélection.

En tout cas merci à tous de partager vos infos qui sont bien utiles.