Selection de ligne dans tableau.

Résolu
Bonjour,
Comment dans un tableau range (« J1 :Q24 »), puis-je sélectionner les lignes une par une pour les soustraire aux cellules d'une colonne range (« T1 :T24 ») ?
Par exemple, sélectionner la ligne 1 (« J : Q ») soustraire le total de la cette zone à la cellule (« T1 »)
Ensuite, sélectionner la ligne 2 (« J : Q ») soustraire le total de la cette zone à la cellule (« T2 »)
Etc. Etc. Etc.
En sachant que le tableau comporte des cellules vides.

Merci d'avance à celui qui répondra.

8 réponses

  • Votes
  • Date
  • Date décroissante
  1. =T1-SOMME(A1:Q1)
    ensuite tu selectionne la cellule et ds l'encadrement en bas a droite de cette cellule, tu as un point, tu clique dessus et tu descent jusqu'a la derniere ligne et excel se charge de remplacer les 1 par les numero de ligne correspondant
    1. Bonsoir charly_rom,

      Tu traites le tableau directement dans excel ?
      Ce que je veux, c'est créer une macro. Il me faut arriver à sélectionner une ligne du tableau pour en connaitre la somme, ensuite déduire ce résultat d'une cellule en vis à vis plus loin dans une colonne, lorsque je saurai faire cela, je l'inserrerai dans une boucle, "For...Each", par exemple.

      Merci.
      1. J'ai avancé dans ma réalisation mais je bloque sur une erreur incompatibilité de type Erreur d'exécution "13 ".
        Je sélectionne les cellules une par une dans mon tableau, puisque je n'arrive pas à le faire avec une ligne comme je le voulais au début du sujet, mais je n'arrive pas à les soustraire à la cellule en vis-à-vis dans la colonne concerné.
        Je joins le code si quelqu'un peu m'aider...

        Sub op()
        Dim Quinc As Range
        Dim cellule As Range
        Dim sto As Range

        Set sto = Range("Stock") `colonne ("T1:T24")
        Set Quinc = Range("QuincaillesUtilises") `zone (" J1 :Q24")

        For Each cellule In Quinc
        If cellule.Value > 0 Then
        cellule.Select `cellule > 0 dans " J1 :Q24" sélectionnée
        sto(cellule.row, sto.Column - 19).Select `cellule dans " T1:T24" sélectionnée jusque là ça marche

        sto.Value = sto.Value - cellule.Value `ici l'erreur est générée

        End If
        Next cellule

        Set Quinc = Nothing
        Set sto = Nothing

        End Sub

        Je cherche mais j'ai vraiment besoin d'aide...
        Dans ma ligne < sto.Value = sto.Value - cellule.Value > "cellule.value" contient bien une valeur mais pas "sto.value", comment faire ?
        Merci.
        1. bonjour

          peut être quelque chose comme ça

          Const lideb = 1
          Const lifin = 24
          Const codeb = "J"
          Const cofin = "Q"
          Dim li As Long
          For li = lideb To lifin
            Range("T" & li).Value = Range("T" & li).Value - Application.WorksheetFunction.Sum(Range(codeb & li & ":" & cofin & li))
          Next li


          bonne suite
          1. Contributeur
            Bonjour

            essaies si j'ai pigé ta demande

            Option Explicit
            Sub soustraire()
            Dim lig As Byte
            Application.ScreenUpdating = False
            For lig = 1 To 24
            Cells(lig, "T") = Cells(lig, "T") - Application.Sum(Range(Cells(lig, "J"), Cells(lig, "Q")))
            Next
            End Sub
            1. Contributeur
              Bonjour ccm
              excuses moi je n'avais pas rafraichi!!!
              :o)
          2. Bonjour ,

            Je tiens à vous remercier, ccm81 et michel_m, pour vos réponses qui fonctionnent l'une comme l'autre.
            Cela me permet de voir que l'on peut coder de différentes façons, et le savoir ne nuit pas.

            Si je peux me permettre michel_m, ne faut-il pas mettre "Application.ScreenUpdating = True " quand la procédure est finie ?

            Pourriez-vous me dire, si ce n'est trop, où est le problème dans ma procédure et comment aurais-je dû faire pour que mon opération se fasse, histoire d'en apprendre un peu plus ?

            S'il n'y a pas de réponse d'ici quelques jours je signalerai résolu.

            Merci à vous parce que je n'aurais pas trouvé de sitôt.
            1. Contributeur
              Si je peux me permettre michel_m, ne faut-il pas mettre "Application.ScreenUpdating = True " quand la procédure est finie ? 


              tu peux! :oD

              réponse est non
              voir ce site
              http://xcell05.free.fr/pages/prog/accvba.htm#ScreenUpdating

              comment aurais-je dû faire pour que mon opération se fasse

              Bin, ccm et moi ont t'a montré (d'ailleurs, les 2 macros ne varient que sur le fond et non sur la méthode)
          3. re

            @ jen_peuplus

            sto.Value = sto.Value - cellule.Value 'ici l'erreur est générée

            sto étant de type range, et contient une plage, contrairement à cellule, donc, je crois qu'il aurait fallu ecrire quelque chose du genre sto.Cells(ligne,colonne).value=sto.Cells(ligne,colonne).value - cellule.value

            @michel_m
            bonjour michel
            pas de pb pour le rafraichissement, mais, confondre la forme et le fond ....
            je vais mettre ça sur le compte d'un début d'assoupissement post déjeunatoire ...
            bon, j'arrete
            merci pour le Cells(lig, "T"), je me suis toujours cru obligé d'envoyer à cells un n° (numérique) de colonne !
            cordialement
            1. Contributeur
              confondre la forme et le fond ....
              Oui, effectivement, ca s'arrange pas: je vieillis mal :-)

              Je vais mettre ça sur le compte d'un début d'assoupissement post déjeunatoire ...
              Merci pour ton indulgence :-)

              merci pour le Cells(lig, "T"), je me suis toujours cru obligé d'envoyer à cells un n° (numérique) de colonne !
              Je préfère aussi le numérique mais sur des petits tableaux, la lettre permet une meilleure compréhension pour des débutants.

              Bon WE, j'espère ensolleillé pour tous
          4. Merci pour vos réponses et votre disponibilité. Pendant que certains faisaient la sieste (consécutive à un début d'assoupissement post déjeunatoire), j'ai mis vos conseils en applications et cela m'a bien aidé (jusqu'à la prochaine question).
            Effectivement, ccm81, en adaptant la ligne "sto.Cells(ligne,colonne).value=sto.Cells(ligne,colonne).value - cellule.value" cela marche aussi parfaitement.
            Vivement que je sache écrire comme vous...
            Merci à vous deux
            A+