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 :

1ère Programmation VBA


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 2
    Par défaut 1ère Programmation VBA
    Bonjour tout le monde,

    Je suis entrain de débuter sur VBA et je suis entrain de réaliser ma première macro, seulement voilà je bloque et je me suis dis qu'en échangeant avec vous j'apprendrai plus facilement que si je tournais en rond tout seul dans mon coin :

    Voilà j'ai un tableau avec des opérations d'apport ou de retrait en espèce ou en titres
    Chaque fois que dans la colonne M il y a un 1 cela veut dire qu'il faut copier la valeur de la colonne G et la coller dans la colonne C à partir de la ligne 16 pour le compte correspondant

    Chaque fois que dans la colonne N il y a un 1 cela veut dire qu'il faut copier la valeur dans la colonne G et la coller dans la colonne D à partir de la ligne 16 pour le compte correspondant

    J'ai donc compris qu'il fallait créer une boucle et aussi créer une condition

    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
    Sub Macro2()
     
    Range("M2").Select
    Do While Columns("M") <> ""
    If Columns("M") = 1 Then
    Range("G2").Select
    Selection.Copy
    Range("C16").Select
    ActivateSheet.Paste
     
    End If
     
    Loop
     
    Range("N2").Select
    Do While Columns("N") <> ""
    If Columns("N") = 1 Then
    Range("G2").Select
    Selection.Copy
    Range("C16").Select
    ActivateSheet.Paste
     
    End If
     
    Loop
     
    End Sub


    Mon problème est que je ne sais pas comment indiquer à Excel d'actualiser les lignes c'est à dire de copier la valeur G2 puis G3 ect dans la cellule C16 puis C17 ou D16 D17 en fonction de l'opération. Je pense qu'il s'agit avant tout de logique et pour le moment je manque de logique dans ma programmation mais ça viendra !

    Vous trouverez le fichier en pièce jointes, je vais continuer à essayer de mon côté bien évidemment et comprendre mon erreur !
    Merci pour votre temps.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre confirmé
    Homme Profil pro
    Inscrit en
    Janvier 2007
    Messages
    130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Aveyron (Midi Pyrénées)

    Informations forums :
    Inscription : Janvier 2007
    Messages : 130
    Par défaut
    Bonjour Romuald42,

    C'est une macro que vous souhaitez écrire, Attention !! vous n'êtes plus sous Excel qui vous prends par la main pour vous guider.

    VBA est une langue qu'il faut apprendre à parler avant de pouvoir dialoguer avec Excel.

    Un règle de base : on ne fait pas deux fois la même chose , faites une procédure qui va appeler une procédure avec un passage de paramètre

    par exemple : (utiliser la balise 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
     
    Sub Traitement (Colonne as string)
     
      Range(Colonne&"2").Select
      Do While Columns(Colonne) <> ""
        If Columns(Colonne) = 1 Then
          Range("G2").copy
          Range("C16").Paste
        End If
      Loop
    End Sub
     
     
    Sub Principal
      Call Traitement("M")
      Call Traitement("N")
    End Sub
    la même que vous, mais en plus clair mais cela ne fonctionne pas mieux
    Que voulez-vous faire exactement ?

    Christophe

  3. #3
    Expert éminent Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Par défaut
    J'espère que tu fais ça juste pour t'entrainer.
    Parce que si c'est "pour de vrai", il est bien plus simple de faire ça avec des fonctions Excel.

    Déjà, premier conseil : évite les Select / Selection.
    La plupart du temps, il est possible de faire sans. Ca ne fait que compliquer le code et ralentir l'exécution.

    Second conseil : déclare tes variables.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Sub Macro2()
    Dim Lig As Long
    For Lig = 1 To ActiveSheet.UsedRange.Rows.Count
        If Range("M" & Lig).Value = 1 Then Range("C" & Lig).Value = Range("G" & Lig).Value
        If Range("N" & Lig).Value = 1 Then Range("D" & Lig).Value = Range("G" & Lig).Value
    Next Lig
    Un peu plus efficace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub Macro2()
    Dim CC As Range
    For Each CC In Intersect(ActiveSheet.UsedRange, Columns("M:N"))
        If CC.Value = 1 Then CC.Offset(0, -10).Value = Range("G" & CC.Row).Value
    Next CC

  4. #4
    Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 2
    Par défaut
    Merci beaucoup à vous deux ! Oui c'est uniquement pour m'entrainer, une prise en main en quelques sorte

Discussions similaires

  1. [VBA-E] Help création d'un programme vba pour excel
    Par yampi dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/01/2007, 11h46
  2. [Débutant] Critères de requete sur dates - Programmation VBA
    Par Sofie109 dans le forum Requêtes et SQL.
    Réponses: 9
    Dernier message: 11/01/2007, 15h35
  3. Réponses: 3
    Dernier message: 31/08/2006, 10h22
  4. Réponses: 11
    Dernier message: 27/06/2006, 17h04
  5. Accès outlook par programmation VBA depuis access
    Par STOUPI dans le forum Access
    Réponses: 1
    Dernier message: 05/06/2006, 18h22

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