IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Macros et VBA Excel Discussion :

Agrandir une plage lors d'un ajout de ligne


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 26
    Par défaut Agrandir une plage lors d'un ajout de ligne
    Je souhaite classer un tableau en appuyant sur une touche que j'ai cree pour cet effet.
    Seulement, mon tableau va evoluer dans le temps et je vais y ajouter des lignes. Ma plage de classement sera alors plus grande.

    Pour cela, j'ai ecris le mot "FIN" dans la derniere case du tableau que je dois classer.
    Lorsque je clique sur mon bouton de classement, je recherche en premier l'adresse de "FIN" pour connaitre la plage a classer et je mets cette adresse dans toto2.
    Lorsque je defini ma plage (With Worksheets("Essai_bouton").Range("a2:toto2").Select), il y a un bug avec le methode .Range.

    Est-ce normal ?
    Ai-je le droit de faire ce que je fais ?

    Voici mon code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    Private Sub Classement_Click()
     
        With Worksheets("Essai_bouton").Range("k3:k30")
            Set toto = .Find("FIN", LookIn:=xlValues)
            toto2 = toto.Address
        End With
     
        With Worksheets("Essai_bouton").Range("a2:toto2").Select
        Selection.Sort _
            Key1:=Range("J3"), Order1:=xlDescending, _
            Key2:=Range("B3"), Order2:=xlDescending, _
            Key3:=Range("A3"), Order3:=xlAscending, _
            Header:=xlYes, _
            OrderCustom:=1, _
            MatchCase:=False, _
            Orientation:=xlTopToBottom
        End With
     
        With Worksheets("Essai_bouton").Range("B3:toto2").Select
            Selection.HorizontalAlignment = xlCenter
            Selection.VerticalAlignment = xlBottom
            Selection.WrapText = False
            Selection.Orientation = 0
            Selection.AddIndent = False
            Selection.ShrinkToFit = False
            Selection.MergeCells = False
     
        End With
    End Sub
    J'ai une deuxieme question.
    Admettons que toto2 = $k$9, comment dois-je faire pour definir ma plage a classer de,par exemple, $a$1 a $k$8 (c'est c'est a dire, la case d'avant)

    Merci d'avance pour votre aide.
    Boule

  2. #2
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Bonjour,

    j'ai survolé le post, mais deux remarques sautent aux yeux :

    1) Au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Essai_bouton").Range("a2:toto2").
    ne serait-ce pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Essai_bouton").Range("a2:" & toto2)

    2) La syntaxe, des with n'est pas bonne, tu n'as pas besoin de select, au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets("Essai_bouton").Range("B3:toto2").Select
            Selection.HorizontalAlignment = xlCenter
    '...
    Tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets("Essai_bouton").Range("B3:toto2")
            .HorizontalAlignment = xlCenter
    '...

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 26
    Par défaut
    Citation Envoyé par aalex_38 Voir le message
    Bonjour,

    j'ai survolé le post, mais deux remarques sautent aux yeux :

    1) Au lieu de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Essai_bouton").Range("a2:toto2").
    ne serait-ce pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Worksheets("Essai_bouton").Range("a2:" & toto2)
    ]
    J'ai essaye et ca ne marche pas.
    il ne comprends pas la plage d'apres ce que je vois.

    Citation Envoyé par aalex_38 Voir le message
    2) La syntaxe, des with n'est pas bonne, tu n'as pas besoin de select, au lieu de :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets("Essai_bouton").Range("B3:toto2").Select
            Selection.HorizontalAlignment = xlCenter
    '...
    Tu peux faire :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    With Worksheets("Essai_bouton").Range("B3:toto2")
            .HorizontalAlignment = xlCenter
    '...
    C'est pareil, il ne comprends pas la plage

    Il me met : Erreur d'execution'1004'

  4. #4
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Je viens de faire le test suivant et il fonctionne, encore faut-il que le mot "FIN" soit trouvé (attention à la casse).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    With Worksheets(1).Range("k3:k30")
            Set toto = .Find("FIN", LookIn:=xlValues)
            toto2 = toto.Address
        End With
     
    msgbox Range("a2:" & toto2).address

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 26
    Par défaut
    Merci merci.
    Je m'etais plante dans mes modifs et vous aviez raison.

    Tout marche impecc.

    Par contre, je me permets de revenor sur ma deuxieme question, si toto2 est egal a $k$9, comme dois je fare pour definir une variable toto3 = $k$8 ?

    Merci

  6. #6
    Membre Expert Avatar de aalex_38
    Inscrit en
    Septembre 2007
    Messages
    1 631
    Détails du profil
    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 631
    Par défaut
    Tu peux utiliser offset


    Edit : une exemple

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim toto3 As Range, toto As Range
    With Worksheets(1).Range("k3:k30")
            Set toto = .Find("FIN", LookIn:=xlValues)
     
    End With
     
    Set toto3 = toto.Offset(-1, 0)
     
    MsgBox toto.Address & ";" & toto3.Address

  7. #7
    Membre émérite
    Inscrit en
    Décembre 2006
    Messages
    897
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 897
    Par défaut Essaye..
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    toto3 = Range(toto2).Offset(-1, 0).Address
    ESVBA


    Désolé, AALEX_38, j'ai fait autre chose entre la lecture et la réponse.
    Je laisse ma réponse : c'est la même en moins bien explicitée.

  8. #8
    Membre éclairé Avatar de casavba
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    464
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Juillet 2007
    Messages : 464
    Par défaut
    Lorsque je defini ma plage (With Worksheets("Essai_bouton").Range("a2:toto2").Select), il y a un bug avec le methode .Range.
    Pourquoi As-tu besoin de selectionner la plage pour agir après.
    N'est il pas mieux d'agir sur la plage directement ?

    Attention Toto2 est une variable donc, ce que t'as codé est faux "a2:toto2" ---> essaies plutôt "a2:" & toto2

    ++

Discussions similaires

  1. Réponses: 1
    Dernier message: 06/02/2012, 11h18
  2. Réponses: 4
    Dernier message: 02/02/2010, 20h35
  3. Excel, agrandir une plage de cellules sur la droite.
    Par Ldoppea dans le forum C++Builder
    Réponses: 9
    Dernier message: 12/11/2008, 17h52
  4. [VBA-E]Agrandir une plage de données d'un graphique
    Par dev81 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 15/05/2007, 11h43
  5. Décalage lors de l'ajout de ligne
    Par jean-pierre96 dans le forum Général JavaScript
    Réponses: 3
    Dernier message: 20/04/2007, 15h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo