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

Excel Discussion :

[VBA]Incrémenter valeurs d'une colonne/ligne (début et fin spécifiés) ?


Sujet :

Excel

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut [VBA]Incrémenter valeurs d'une colonne/ligne (début et fin spécifiés) ?
    Bonjour à tous,

    Je cherche (avec une faible connaissance en VBA) à faire une macro qui incrémente les valeurs d'une colonne (ou bien d'une ligne) pour des cellules dont la ligne (colonne) de début et de fin sont spécifiées par l'utilisateur.

    Mon idée est donc de déclarer deux variables Deb et Fin en Integer, une autre Incr. en tant que Double puis de les demander par des MessageBox.

    Ensuite, faire une boucle qui sélectionne la cellule "ADeb"(avec RangeSelect), prend sa valeur et l'incrémenter (ActiveCell.Value = ActiveCell.Value + Incr), incrémenter Deb de 1 et finir la boucle quand Deb=Fin.

    Le principal problème que je recontre est l'utilisation d'une variable dans une fonction : ADeb en l'occurence. J'ai essayé différentes combinaisons A & Deb, A'Deb', A & 'Deb' pour tenter de combiner la constante (colonne A) et la variable.

    Je n'ai pas de manuel de référence et que ce soit l'aide dans l'éditeur ou bien ce que j'ai pu trouver en ligne ne m'ont rien apporté sur le sujet. Je ne sais donc même pas si cela est possible.

    Merci d'avance à quiconque pourra résoudre mon problème et a éventuellement mettre en avant d'autres soucis.


    PS : Je sais que le plus simple serait dans Excel de faire une formule qui recopie avec incrémentation la ligne/colonne concernée, puis d'écraser les valeurs d'origine avec les nouvelles valeurs.
    Mais je débute avec le VBA et ceci est avant tout pour m'aguerrir avec ce langage (et mes faibles notions de Turbo Pascal et de langage de calculatrice Casio ne me sont guère utiles).

  2. #2
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    bonjour


    Le principal problème que je recontre est l'utilisation d'une variable dans une fonction : ADeb en l'occurence. J'ai essayé différentes combinaisons A & Deb, A'Deb', A & 'Deb' pour tenter de combiner la constante (colonne A) et la variable.

    Si j'ai bien compris ta demande, tu peux définir ta cellule de 2 manières:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Range("A" & Deb ) = Range("A" & Deb ) + Incr
    ou en équivalent:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Cells( Deb , 1 ) = Cells( Deb , 1 ) + Incr


    N'hésite pas à revenir en cas de besoin, pour des infos complémentaires.


    Voici un peu de lecture si tu débutes:

    ftp://ftp2.developpez.be/developps/vb/VB-excel2.pdf



    bonne journée
    michel

  3. #3
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Super, merci pour la réponse rapide, claire et efficace et également pour le lien.
    Cette méthode est bien plus pratique que ce que je comptais utiliser. J'en ai profité pour "améliorer" ma requête en demandant la colonne à l'utilisateur.

    Serait-il possible d'avoir un avis sur le code que j'ai fait ? (savoir s'il est optimal, si des problèmes peuvent survenir si je l'intègre dans un code plus complexe...)

    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
    Sub Macro1()
     
    Dim Col, Deb, Fin As Integer
    Dim Incr As Double
     
    Col = Application.InputBox("Colonne ?")
    Deb = Application.InputBox("Debut ?")
    Fin = Application.InputBox("Fin ?")
    Incr = Application.InputBox("Incrementation ?")
     
    Do
    Range(Col & Deb) = Range(Col & Deb) + Incr
    Deb = Deb + 1
    Loop Until Deb = Fin + 1
     
    End Sub

    Et pour finir, j'aimerai un conseils par rapport à un souci que j'ai rencontré. Ce que j'aimerai ce sont des indications sur la possibilité de réalisation, non pas la réponse, histoire que je continue de découvrir un peu le VBA par essai et erreur.

    Avoir 4 InputBox est assez fastidieux pour l'utilisateur je pense (ça clignote à chaque changement, ce qui me semble diminuer avec Application.InputBox mais c'est pas top )
    J'envisage donc de faire apparaitre un petit tableau de 4 cases, chacune étant affectée à une des variables demandées.

    Est-ce réalisable ? Si oui, est-ce possible avec des arguments d'InputBox ou bien faut-il une autre fonction (je ne dis pas non à une indication) ?

    Merci d'avance

    PS : Je me dis que même avec le fichier pdf indiqué, les ressources en ligne et l'aide de l'éditeur VBA, il serait peut-être bon que je fasse l'acquisition d'un ouvrage sur le sujet.

    Quelque chose à me conseiller en particulier ? (en prenant en compte le fait que je ne suis pas programmeur de formation (juste quelques cours de maths qui portaient sur le Turbo Pascal et puis quelques altérations de scripts pour Unreal Tournament)).

  4. #4
    Expert éminent sénior

    Homme Profil pro
    Inscrit en
    Août 2005
    Messages
    3 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Isère (Rhône Alpes)

    Informations professionnelles :
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2005
    Messages : 3 317
    Points : 20 144
    Points
    20 144
    Par défaut
    Rebonjour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Col, Deb, Fin As Integer
    Dans ce cas, les deux premières variables sont de type Variant.
    Si tu indiques plusieurs variables avec le même Dim, tu dois préciser le type de donnée pour chaque variable.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Col As String, Deb As Integer, Fin As Integer
    http://silkyroad.developpez.com/VBA/LesVariables/


    Une autre possibilité pour ta boucle:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Dim Col As String
    Dim Deb As Integer, Fin As Integer, x As Integer
    Dim Incr As Double
     
    Col = Application.InputBox("Lettre Colonne ?", "Le titre", "A")
    Deb = Application.InputBox("Numero ligne Debut ?", "Le titre", 1)
    Fin = Application.InputBox("Numero ligne Fin ?", "Le titre", 10)
    Incr = Application.InputBox("Incrementation ?", "Le titre", 5)
     
    For x = Deb To Fin
        Range(Col & x) = Range(Col & x) + Incr
    Next x

    Ensuite tu peux éventuellement ajouter des instructions pour vérifier:
    que l'utilisateur saisies bien des données Alpha ou numériques dans les différents inputbox
    que la variable Fin est bien supérieure à Deb
    que l'utilisateur n'a pas appuyé sur le bouton "annuler" de l'inputbox
    ...etc...



    et une autre approche en utilisant les options d'Application.InputBox
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Dim Cell As Range, Plage As Range
    Dim Incr As Double
     
    Set Plage = Application.InputBox("Sélectionnez une plage:", "Le titre", , , , , , 8)
    Incr = Application.InputBox("Incrementation ?", "Le titre", 5)
     
    For Each Cell In Plage
        Cell = Cell + Incr
    Next Cell




    J'envisage donc de faire apparaitre un petit tableau de 4 cases, chacune étant affectée à une des variables demandées.

    Est-ce réalisable ? Si oui, est-ce possible avec des arguments d'InputBox ou bien faut-il une autre fonction (je ne dis pas non à une indication) ?
    Dans ce cas, tu pourrais utiliser un UserForm:

    http://silkyroad.developpez.com/VBA/UserForm/

    http://silkyroad.developpez.com/VBA/ControlesUserForm/



    Concernant les livres:
    Il commence à dater un peu mais reste une référence majeure dans ce domaine:

    http://vb.developpez.com/livres/#L2744090107



    Et les sources developpez.com:

    http://excel.developpez.com/faq/

    http://vb.developpez.com/faqvba/

    http://vb.developpez.com/cours/#app_office

    http://www.developpez.net/forums/forumdisplay.php?f=542



    michel

  5. #5
    Candidat au Club
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    3
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 3
    Points : 2
    Points
    2
    Par défaut
    Encore merci pour tout cela.

    Je me plongerai dans tout ça dés que j'aurai l'opportunité (j'avais profité du samedi grisâtre sur Paris pour m'y mettre et là j'avoue que mon cerveau est à saturation).

    En particulier, je vais essayer de bien regarder les possibilités de Application.InputBox car la dernière solution que tu proposes est extrêmement simple et fonctionnelle. Lorsque je l'ai lu la première fois, je ne comprenais pas du tout comment elle pourrait marcher et finalement en la voyant tourner et en réfléchissant pas à pas, c'est devenu plus clair.

    Merci pour les idées d'éléments à vérifier.
    J'avais songé à faire quelque pour comparer Deb et Fin, par contre, le reste je n'y aurai pas pensé tout seul. Pas évident de songer aux "erreurs" qu'un utilisateur peut commettre (ça m'apprendra à moins râler contre les programmeurs la prochaine fois que je tombe sur un bug qui se déclenche quand je fais quelque chose d'un peu tordu).

    Le livre doit être bien exhaustif avec 1100 pages.

    J'avais parcouru (un peu plutôt que beaucoup j'avoue) les FAQ mais je n'aurai pas pensé que la partie sur les variables était dans la rubrique les macros VBA et comme bêtement je n'avais pas pensé à cliquer sur "tout développer"...
    Maintenant c'est en forme développée que la page figure dans mes favoris.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 29/09/2008, 09h24
  2. Réponses: 7
    Dernier message: 03/04/2008, 11h33
  3. [VBA] Somme de certaines valeurs d'une colonne dans une requete
    Par petitelalou dans le forum VBA Access
    Réponses: 7
    Dernier message: 01/08/2007, 00h18
  4. vba-Excel-Plus grande valeur d'une colonne
    Par VBBBA dans le forum Macros et VBA Excel
    Réponses: 33
    Dernier message: 08/08/2006, 10h50
  5. Récupérer la valeur d'une colonne de la ligne d'un DBGrid
    Par Oluha dans le forum Bases de données
    Réponses: 4
    Dernier message: 10/10/2005, 10h22

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