[vba-excel] déclaration constante

Bonjour,

je voudrais situer et déclarer comme constante une cellule qui se trouve à l'avant dernière colonne de mon tableau , je ne peux pas le faire statiquement car le tableau peut être différent, je voudrais prendre toujours cette cellule qui sera placé toujours à l'avant dernière colonne, dois - je passer par une boucle qui testera si il existe encore des colonnes ou y a t-il une autre solution.

merci de votre aide

3 réponses

  1. Tu peux nommer ta cellule (Insertion, Nom, Définir)

    Dans ta macro tu l'appelles en faisant

    MaVariable = Range("CelluleNommee").value
    1. merci pour ta réponse mais ça ne me convient pas vraiment dans mon cas, car dans le cas on je rajoute des valeurs apres ma dernière colonne, cela ne marchera plus

      merci de ton aide
    2. @jeremacMeme si tu rajoutes des valeurs, la cellule restera nommée et tu pourras toujours y accéder de cette manière, sinon peux-tu nous en dire plus sur cette cellule : elle est sur l'avant-derniere colonne, mais sur une ligne précise ? A-t-elle un contenu particulier ?
    3. @onesdfmais ce qui m'interesse c'est une cellule de l'avant dernière colonne du fichier, alors elle peut changer toute le temps d'un fichier à un autre
      même si je rajoute des colonnes , je veux qu'il me prenne toujours cette celulle qui sera TOUJOURS SUR LA MEME LIGNE ET TOUJOURS SUR LAVANT DERNIERE COLONNE DU FICHIER
    4. @jeremacElle est toujours sur la même ligne, on progresse ...

      Quand tu entends Avant dernière Colonne du fichier, tu sous-entends de ton tableau excel ou bien la colonne IU ?
  2. Modérateur
    Bonsoir,
    Peux-tu indiquer quelle est la ligne sur laquelle cette cellule se situe toujours ?
    A+
    1. Modérateur
      Voici une macro à adapter, dans mon exemple, je considère que le tableau démarre à partir de la 1ère ligne de la colonne A et que la cellule variable se situe toujours sur la dernière ligne de ton tableau dans l'avant dernière colonne :
      Sub SelectionCellVariable()
      Dim x As Long
      Dim y As Long
      x = Range("A1").End(xlToRight).Column
      y = Range("A1").End(xlDown).Row
      Cells(y, x).Offset(0, -1).Select
      End Sub


      Bonne soirée
      1. merci pour ta réponse mais j'avais essayé de faire une boucle pour trouver la colonne en question puis mettre la valeur dans une variable
        mais ça ne marche pas trop
        ça me dit "application defined or object defined error"
        le debug souligne la ligne que j'ai mis en gras

        merci de ton aide

        Sub run()
        Set wrksheet = ActiveWorkbook.Worksheets.Add
        wrksheet.Name = "data"

        Dim toto1 As Integer
        Dim toto2 As Integer
        Dim colonne_total As Integer

        x = 1 'colonne
        y = 8 'ligne

        While ActiveWorkbook.Sheets("Pivot Solutions").Cells(x, y).Value <> "Grand Total"
        x = x + 1
        'on est dans la bonne colonne
        Wend

        colonne_total = x

        toto1 = ActiveWorkbook.Worksheets("Pivot Solutions").Cells(colonne_total, 29).Value
        'on utilise l'info de toto

        toto2 = ActiveWorkbook.Worksheets("Pivot Solutions").Cells(colonne_total - 6, 29).Value

        ActiveWorkbook.Sheets("data").Cells(colonne_total, 29).Value = "l'info qu'on veut ajouter dans la cellule en question"

        End Sub
      2. @jeremacLa syntaxe de Cells est Cells(Ligne, Colonne), vu que tu cherches une colonne tu dois incrémenter ton y et non ton x.

        Dans la situation que tu donnes, tu incrémentes ton X (donc les lignes) et Excel ne parvient pas à trouver "Grand total" dans H1 (cellule de départ avec X=1 et Y=8), incrémente le X, ne le trouve pas en H2 .... jusqu'à arriver en H65536 et générer une erreur
      3. @onesdfMerci beaucoup pour ta réponse, en effet j'avais inversé ligne, colonne.
        J'ai une dernière question , je voudrais rechercher à l'aide d'une boucle toutes les colonnes de la ligne 8 ou il y marqué à la fin TOTAL
        puiis je faire un truc comme ça ?
        While ActiveWorkbook.Sheets("Pivot Solutions").Cells(x, y).Value <> "### Total"
        y = y + 1
        'on est dans la bonne colonne
        Wend

        merci de votre aide
      4. @jeremacNon, car :

        - La boucle recherchera seulement ### Total, donc si dans une cellule de ta ligne tu as "Total Recall" ou "TOTAL, vous ne viendrez plus chez nous par hasard", ca ne sera pas pris en compte. De plus la comparaison est sensible à la casse, si tu as bien ### TOTAL dans une cellule, ca ne fonctionnera pas non plus car tu recherches ### Total

        - La boucle s'arrêtera à la première occurence trouvée

        Tu peux par contre essayer quelque chose dans ce genre :
            For Each Cellule In Rows(8).Cells
                If InStr(UCase(Cellule.Value), "TOTAL") Then
                    MsgBox "Total trouvé en " & Cellule.Address
                End If
            Next
        


      5. @onesdfen fait j'ai oublié une contrainte
        chaque chaque celulle est composé de MM/AAAA TOTAL
        ex : 05/2008 TOTAL 06/2008 TOTAL 07/2008 TOTAL
        10 20 30
        quand il va parcourir le tableau comment lui faire stocker dans une variable la valeur de chacun de ces mois en les differenciant

        encore merci de voter aide