Déclarer colonne en VBA

Bonjour

Je crée une macro pour faire un calcul simple sur une colonne. Jusque là, pas de problème. En revanche, en fonction du fichier excel, cette colonne est différente. Je voudrais donc pouvoir déclarer une colonne au lancement de la macro, et je sèche.

Merci par avance pour votre aide

Bonjour,

Quelque chose comme:

sub test()
col = inputbox("Saisir le numéro de colonne.")
end sub

après tu peux utiliser ce numéro partout dans ta macro

Sinon si le nom de la colonne est toujours le même...

sub test()
col = range("1:1").find("mavaleur",lookat:=xlwhole).column
end sub

Merci AUSECOUR pour la rapidité de la réponse. Le problème est que je ne sais pas où mettre cette commande. Donc voici la macro d'origine. Dans ce cas, le calcul se fait toujours sur la colonne D, alors que je veux choisir cette colonne...

Merci encore

ActiveWindow.LargeScroll ToRight:=1

ActiveWindow.ScrollColumn = 23

ActiveWindow.SmallScroll ToRight:=90

Range("ERO1").Select

ActiveCell.FormulaR1C1 = "100"

Range("ERO1").Select

Selection.Copy

Columns("D:D").Select

Selection.PasteSpecial Paste:=xlPasteAll, Operation:=xlDivide, SkipBlanks _

:=False, Transpose:=False

Application.CutCopyMode = False

Selection.NumberFormat = "0.0%"

Range("D1").Select

Range(Selection, Selection.End(xlToRight)).Select

Range(Selection, Selection.End(xlToRight)).Select

Range(Selection, Selection.End(xlToRight)).Select

Range("ERO1").Select

Selection.ClearContents

End Sub

Re,

je viens de voir ton bout de programme, et voilà ce que j'en garde

col = InputBox("Saisir la colonne en texte.")

With Range(col & 1).EntireColumn
    .Value = "100"
    .NumberFormat = "0.0%"
End With

Comme tu l'avais fait avec l'enregistreur de macro, il était largement optimisable, d'ailleurs je ne comprends pas bien pourquoi tu dois mettre 100 dans absolument chaque cellule de la colonne D

Je crains que cela ne soit pas suffisant (à moins que je me trompe). En fait, je veux transformer des valeurs absolues d'une colonne en % (40 = 40%). Si j'applique un simple pourcentage, j'aurai 4000% donc, j'utilise le collage-special-opération. En ERO1, je mets mon coeff multiplicateur, soit 100 (pourquoi ERO1 ? pour qu'il soit dans une cellule dont je suis certain qu'elle sera vide). Je copie ce 100, et le colle-spécial-division sur la colonne de mon choix. Et c'est colonne que je veux choisir. Dans ta solution, il me semble que j'aurais 100 systématiquement.

Re,

Ah ok je n'avais pas compris que tu faisais ce type de collage spécial

Si tu veux convertir tes données colonne D, je peux te proposer une solution qui fera le travail

Par contre, tu dois vraiment faire ça en masse? j'ai l'impression qu'il ne s'agit pas d'une tâche nécessitant de passer par une automatisation...

Désolé du double post, je te propose cette solution qui convertit tous les nombres de la plage sélectionnée en pourcentage:

Sub conversion()
Dim plage As Range
Set plage = Application.InputBox("sélectionner la plage de cellules à traiter", Type:=8)
tableau = plage

For i = LBound(tableau, 1) To UBound(tableau, 1)
    For j = LBound(tableau, 2) To UBound(tableau, 2)
        If IsNumeric(tableau(i, j)) Then
            tableau(i, j) = tableau(i, j) / 100
        End If
    Next j
Next i

plage = tableau
plage.NumberFormat = "0.0%"
End Sub

Parfait ! La dernière macro fonction. Me reste plus qu'à comprendre.

Merci beaucoup en tout cas

Bonne journée

Re,

super!

si jamais tu as besoin d'explications, n'hésite pas à repasser par ce sujet, je continue à le suivre

Rebonjour

Comme j'ai plutôt l'habitude d'utiliser les macros en tant qu'enregistreur de tâches, je reconnais que ta solution, si elle fonctionne parfaitement, me laisse aussi perdu qu'une poule devant une fourchette. Comme j'aime être un peu moins bête au coucher qu'au lever, une petite explication serait top...

Merci encore

Pierre

Re,

ça marche, c'est parti pour quelques explications alors:

Set plage = Application.InputBox("sélectionner la plage de cellules à traiter", Type:=8)

tu as plusieurs types de variables en langage de programmation, le texte, les nombres (qui eux même ont plusieurs types de variables), et les objets, pour initialiser un objet ou lui affecter une "valeur", on utilise le mot clé "Set", ensuite j'utilise une fonction qui existe dans l'application Excel, qui s'appelle InputBox ( Application.InputBox). Une Inputbox permet d'échanger avec l'utilisateur par le biais d'une fenêtre de saisie, j'ai ici paramétré le texte affiché par la fenêtre de saisie, et ajouté le type de valeur retourné, ici 8 correspond à une plage de cellules (objet Range). J'ai précisé Type:= pour ne pas avoir à préciser d'autres paramètres qui se trouvaient entre le texte affiché par la fenêtre de saisie, et le type de valeur retournée par la fenêtre. Tu verras souvent cette façon de faire avec l'enregistreur de macro notamment

tableau = plage

ici je crée un tableau sur VBA (le langage de programmation des macros), je le crées d'une façon assez simple qui est : "mon tableau contient les valeurs de la plage de cellules qui se nomme plage", utiliser un tableau VBA pour parcourir les valeurs des cellules, plutôt que de passer directement par les cellules, permet de faire cette tâche plus rapidement.

For i = LBound(tableau, 1) To UBound(tableau, 1)
    For j = LBound(tableau, 2) To UBound(tableau, 2)
    Next j
Next i

Ici je fais deux boucles (qui font les actions entre for et next, puis reviennent à For un certain nombre de fois), une qui permet de parcourir toutes les lignes du tableau, et une autre qui permet de parcourir toutes les colonnes, j'utilise LBound et UBound pour savoir par quel numéro de ligne et de colonne commence et termine mon tableau, c'est très pratique pour travailler avec un tableau qui ne fait jamais la même taille comme ici.

        If IsNumeric(tableau(i, j)) Then
        End If

J'utilise une condition If Then End If pour vérifier avec une fonction IsNumeric, si la valeur dans le tableau est un nombre (pour ne pas traiter du texte), si c'est le cas, on passe à ce qui est entre Then et End If, c'est à dire:

            tableau(i, j) = tableau(i, j) / 100

Ici on change la valeur du tableau, ligne i, colonne j, par sa valeur divisée par 100.

plage = tableau

tout à l'heure on a fait tableai = plage, maintenant c'est le tableau qui vient sur la plage et exporte donc ses valeurs sur les cellules.

plage.NumberFormat = "0.0%"

et pour finir, on passe les cellules au format 0.0%

Voilà

Rechercher des sujets similaires à "declarer colonne vba"