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 :

Simplification de code avec boucle


Sujet :

Macros et VBA Excel

  1. #1
    Membre à l'essai
    Femme Profil pro
    Responsable des études
    Inscrit en
    Juin 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2016
    Messages : 21
    Points : 15
    Points
    15
    Par défaut Simplification de code avec boucle
    Bonjour à tous,
    Je souhaiterais faire une boucle pour cette macro.

    Un trimestre est entré en cellule A2 par l'utilisateur. J'ai ensuite trois zones dans ma feuille Excel : de F2 à W2, de X2 à AN2 et de AO2 à BC2.
    Il faut qu'à chaque nouveau trimestre rentré en A2 aller coller ce trimestre dans la première case non vide de mes trois zones (les trois zones fonctionnent à l'identique : si un trimestre est collé en F2 il le sera forcément en X2 et en AO2), si et seulement si le trimestre est supérieur à celui précédemment collé. Dans le cas contraire, une boite de dialogue s'ouvre et demande de saisir une nouvelle date.
    J'ai commencé à écrire un 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
     
    If Sheets("Outil suivi").Range("F2") = "" Then
     
    Sheets("Outil suivi").Range("A2").Copy
    Sheets("Outil suivi").Range("F2").PasteSpecial Paste:=xlPasteValues
    Sheets("Outil suivi").Range("W2").PasteSpecial Paste:=xlPasteValues
    Sheets("Outil suivi").Range("AN2").PasteSpecial Paste:=xlPasteValues
     
    Else
     
    If Sheets("Outil suivi").Range("G2") = "" Then
      If Year(Range("A2")) & " Q" & DatePart("q", Range("A2")) > Year(Range("F2")) & " Q" & DatePart("q", Range("F2")) Then
    Sheets("Outil suivi").Range("A2").Copy
    Sheets("Outil suivi").Range("G2").PasteSpecial Paste:=xlPasteValues
    Sheets("Outil suivi").Range("X2").PasteSpecial Paste:=xlPasteValues
    Sheets("Outil suivi").Range("AO2").PasteSpecial Paste:=xlPasteValues
    Else: MsgBox "The quarter you want to analyse already exists, please choose another date"
    Range("A2").ClearContents
        End If


    Merci par avance

  2. #2
    Expert éminent sénior
    Avatar de kiki29
    Homme Profil pro
    ex Observeur CGG / Analyste prog.
    Inscrit en
    Juin 2006
    Messages
    6 132
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : ex Observeur CGG / Analyste prog.

    Informations forums :
    Inscription : Juin 2006
    Messages : 6 132
    Points : 11 274
    Points
    11 274
    Par défaut
    Salut, déjà ce code ne peut pas fonctionner.

    ensuite Il faut baliser ton code

  3. #3
    Membre à l'essai
    Femme Profil pro
    Responsable des études
    Inscrit en
    Juin 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2016
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Salut,

    Je pensais avoir balisé 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
    If Sheets("Outil suivi").Range("F2") = "" Then
     
    Sheets("Outil suivi").Range("A2").Copy
    Sheets("Outil suivi").Range("F2").PasteSpecial Paste:=xlPasteValues
    Sheets("Outil suivi").Range("W2").PasteSpecial Paste:=xlPasteValues
    Sheets("Outil suivi").Range("AN2").PasteSpecial Paste:=xlPasteValues
     
    Else
     
    If Sheets("Outil suivi").Range("G2") = "" Then
    If Year(Range("A2")) & " Q" & DatePart("q", Range("A2")) > Year(Range("F2")) & " Q" & DatePart("q", Range("F2")) Then
    Sheets("Outil suivi").Range("A2").Copy
    Sheets("Outil suivi").Range("G2").PasteSpecial Paste:=xlPasteValues
    Sheets("Outil suivi").Range("X2").PasteSpecial Paste:=xlPasteValues
    Sheets("Outil suivi").Range("AO2").PasteSpecial Paste:=xlPasteValues
    Else: MsgBox "The quarter you want to analyse already exists, please choose another date"
    Range("A2").ClearContents
    End If
    Ce code fonctionne actuellement, c'est juste qu'il est beaucoup trop laborieux!

  4. #4
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    sans trop détailler la demande, juste un exemple pour écrire
    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
    With Sheets("Outil suivi")
      If .Range("F2") = "" Then
        .Range("F2").Value = .Range("A2").Value
        .Range("W2").Value = .Range("A2").Value
        .Range("AN2").Value = .Range("A2").Value
      ElseIf .Range("G2") = "" Then
        If Year(Range("A2")) & " Q" & DatePart("q", .Range("A2")) > Year(.Range("F2")) & " Q" & DatePart("q", .Range("F2")) Then
          .Range("G2").Value = .Range("A2").Value
          .Range("X2").Value = .Range("A2").Value
          .Range("AO2").Value = .Range("A2").Value
        Else
          MsgBox "The quarter you want to analyse already exists, please choose another date"
          .Range("A2").ClearContents
        End If
      End If
    End With
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

  5. #5
    Membre à l'essai
    Femme Profil pro
    Responsable des études
    Inscrit en
    Juin 2016
    Messages
    21
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Juin 2016
    Messages : 21
    Points : 15
    Points
    15
    Par défaut
    Je regarde ça demain et vous dis si ça fonctionne. Merci pour l'aide apportée

  6. #6
    Expert éminent Avatar de casefayere
    Homme Profil pro
    RETRAITE
    Inscrit en
    Décembre 2006
    Messages
    5 138
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 69
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations professionnelles :
    Activité : RETRAITE
    Secteur : Agroalimentaire - Agriculture

    Informations forums :
    Inscription : Décembre 2006
    Messages : 5 138
    Points : 9 548
    Points
    9 548
    Par défaut
    Bonjour,
    même code sur moins de lignes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    With Sheets("Outil suivi")
      If .Range("F2") = "" Then
        Union(.Range("F2"), .Range("W2"), .Range("AN2")).Value = .Range("A2").Value
      ElseIf .Range("G2") = "" Then
       If Year(Range("A2")) & " Q" & DatePart("q", .Range("A2")) > Year(.Range("F2")) & " Q" & DatePart("q", .Range("F2")) Then
          Union(.Range("G2"), .Range("X2"), .Range("AO2")).Value = .Range("A2").Value
        Else
          MsgBox "The quarter you want to analyse already exists, please choose another date"
          .Range("A2").ClearContents
        End If
      End If
    End With
    Cordialement,
    Dom
    _____________________________________________
    Vous êtes nouveau ? pour baliser votre code, cliquer sur cet exemple : Anomaly
    pensez à cliquer sur si votre problème l'est
    Par contre, il est désagréable de voir une discussion résolue sans message final du demandeur (satisfaction, désarroi, remerciement, conclusion...)

Discussions similaires

  1. [Débutant] Simplification d'un code avec des boucles
    Par abel413 dans le forum MATLAB
    Réponses: 5
    Dernier message: 14/06/2013, 17h12
  2. optimiser mon code avec une boucle for?
    Par Invité dans le forum ActionScript 3
    Réponses: 1
    Dernier message: 16/11/2007, 08h33
  3. [PHP-JS] Optimisation du code avec des boucles
    Par jiojioforever dans le forum Langage
    Réponses: 3
    Dernier message: 15/06/2007, 16h02
  4. Simplification de code avec une procedure
    Par zx10 dans le forum VB 6 et antérieur
    Réponses: 8
    Dernier message: 03/12/2006, 19h30

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