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 :

VBA - Boucle avec recopie incrémentée à partir d'une formule


Sujet :

Macros et VBA Excel

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Consultant E-Business
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Par défaut VBA - Boucle avec recopie incrémentée à partir d'une formule
    Bonjour à tous,

    Je suis une toute nouvelle pratiquante VBA ! Excusez donc mon trop peu de connaissances sur ce sujet...

    Afin de me faciliter la vie, j'ai décidé de m'y mettre : Here is my problem !

    Imaginez donc une grosse base de données avec date de début/Date de fin.

    De cette base, il me faut tirer les informations par semaines : je me suis donc créer un tableau avec numéro de semaines et dates correspondantes.

    Je veux donc rentrer le n° de semaine de fin, pour que la VBA puisse aller dans le TCD, rafraîchir les données /semaines jusqu’à n° de fin et les coller dans une autre feuille à la suite les unes des autres.

    Ma base se colle parfaitement à la suite (la boucle n'étant pas encore faite mais j'attends de résoudre mon pb avant de m'y mettre...) mais les formules m'indiquant l'année, le mois et la semaine c'est autre chose.

    Les données rafraîchies du TCD se colle dans les colonnes D à E. Et les colonnes A B et C doivent mettre les semaines correspondantes avec mois et année.

    Pb : Je n'arrive pas à copier la dernière ligne des colonnes ABC créée par mon code pour pouvoir l'incrémenter jusqu'à la dernière ligne de ma colonne D.

    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
    30
    31
    32
    33
    34
    35
    36
    37
    Sub MacroBoucle()
        Dim nb As Integer
        nb = InputBox("Saisissez le numéro de semaine final")
        Dim rng As Range
        DerLigne = Sheets("Base CP Semaine").Range("A" & 65000).End(xlUp).Row
     
     'Entrer le numéro de semaine final
     
     Sheets("PARAMETRES").Select
     Range("E1").Select
     Selection.Value = nb
     
     'Copier les données de la semaine
     
     Range("E2").Select
        Sheets("Dyna CP").Select
        Range("A5:B34").Select
        ActiveSheet.PivotTables("Tableau croisé dynamique2").PivotCache.Refresh
        Selection.Copy
     
     'Coller les données de la semaine
        Sheets("Base CP Semaine").Select
        Range("D65000").End(xlUp).Offset(1).Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
     
    'Formule pour n° de semaine / mois / année
     
        Range("A65000").End(xlUp).Offset(1).Select
        ActiveCell.FormulaR1C1 = "=YEAR(PARAMETRES!R2C2)"
        Range("B65000").End(xlUp).Offset(1).Select
        ActiveCell.FormulaR1C1 = "=MONTH(PARAMETRES!R2C2)"
        Range("C65000").End(xlUp).Offset(1).Select
        ActiveCell.FormulaR1C1 = "=PARAMETRES!R1C5"
        Range("A1:C65000").Value = Range("A1:C65000").Value
     
    End Sub

    Si vous n'avez pas bien saisie, je reste à dispo !

    Merci d'avance pour vos réponses !

    Une débutante VBA

  2. #2
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 165
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Je sais que ce n'est pas ta question mais en VBA, il faut proscrire les méthodes SELECT et l'emploie de l'objet Selection ainsi, cette ligne de code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sheets("PARAMETRES").Select
     Range("E1").Select
     Selection.Value = nb
    Se résumera tout simplement par cette ligne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Sheets("PARAMETRES").Range("E1").Value = nb
    et de préférence en la faisant précéder par l'objet parent de la feuille ThisWorkbook

    Si tu dois régulièrement mettre à jour les données sources du TCD, je te conseille de transformer la liste de données source par un tableau.
    Commande Tableau du groupe Tableaux de l'onglet [Insertion].
    A partir de ce moment là, les lignes et colonnes qui seraient ajoutées à la source seront dynamiquement accessible dans le TCD par le simple fait de cliquer sur la commande Actualiser.
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  3. #3
    Membre averti
    Femme Profil pro
    Consultant E-Business
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Par défaut
    Bonjour Philippe,


    Merci pour vos conseils ça ne pourra que raccourcir mon code ! En attendant j'ai trouvé une solution pour copier la dernière ligne du code que je viens de créer grâce aux formules : seul pb je n'arrive pas à créer le code pour me copier les trois colonnes...

    Voici le code pour copier ma dernière ligne (De A à C):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Sub MacroBoucle()
     
    derLigne = Sheets("Base CP Semaine").Range([A65000], [C65000]).End(xlUp).Row + 1
     
    Sheets("Base CP Semaine").Range("A" & derLigne).Copy
     
    End Sub
    Je sais.... La réponse doit être évidente ! Pourtant j'ai essayé pas mal de chose et rien ne fonctionne...

    Simplement sélectionner la dernière ligne que le code vient de créer de A à C.... Et avec ce code il ne me sélectionne que la dernière ligne de la colonne A.

    Merci d'avance pour vos réponses ! Et encore merci Philippe

    Marine

  4. #4
    Rédacteur
    Avatar de Philippe Tulliez
    Homme Profil pro
    Formateur, développeur et consultant Excel, Access, Word et VBA
    Inscrit en
    Janvier 2010
    Messages
    13 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Formateur, développeur et consultant Excel, Access, Word et VBA

    Informations forums :
    Inscription : Janvier 2010
    Messages : 13 165
    Billets dans le blog
    53
    Par défaut
    Bonjour,
    Pour ma part, j'utilise la propriété CurrentRegion d'une plage de cellule pour en connaître la zone Ligne/Colonne
    Les deux listes de cet exemple commencent en cellule A1
    Voici un exemple de la copie de la dernière ligne d'une plage source vers la prochaine ligne vide de la plage cible
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Sub CopyRow()
     Dim rngSource As Range, rngTarget As Range, LastRowSrce As Long
     With ThisWorkbook
      Set rngSource = .Worksheets("db").Range("A1").CurrentRegion
      Set rngTarget = .Worksheets("Export").Range("A1").CurrentRegion
     End With
     LastRowSrce = rngSource.Rows.Count ' Dernière ligne de la source
     With rngTarget
      rngSource.Rows(LastRowSrce).Copy .Cells(.Rows.Count + 1, 1)
     End With
     Set rngSource = Nothing: Set rngTarget = Nothing
    End Sub
    Philippe Tulliez
    Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément. (Nicolas Boileau)
    Lorsque vous avez la réponse à votre question, n'oubliez pas de cliquer sur et si celle-ci est pertinente pensez à voter
    Mes tutoriels : Utilisation de l'assistant « Insertion de fonction », Les filtres avancés ou élaborés dans Excel
    Mon dernier billet : Utilisation de la fonction Dir en VBA pour vérifier l'existence d'un fichier

  5. #5
    Membre averti
    Femme Profil pro
    Consultant E-Business
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Par défaut
    Je crois que je me suis mal exprimée Philippe.

    Plus simple :

    Quel serait le code pour déterminer la dernière ligne de mes colonnes A B et C sachant que D et E sont déjà remplies ;

    A B C D E
    x x x x x
    x x x x x
    ........x x
    ........x x

    Je voudrais copier la ligne soulignée (après l'avoir déterminée dans mon code) et la coller jusqu'à la dernière ligne de D (en italique)

    Merci encore du temps que vous consacrez à mes questions !

  6. #6
    Membre averti
    Femme Profil pro
    Consultant E-Business
    Inscrit en
    Mars 2015
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Consultant E-Business

    Informations forums :
    Inscription : Mars 2015
    Messages : 14
    Par défaut
    Du coup ça serait de changer ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    derLigne = Sheets("Base CP Semaine").Range([A65000], [C65000]).End(xlUp).Row + 1
    je ne sais pas si [A65000],[C65000] marche réellement, ça m’entonnerait !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sheets("Base CP Semaine").Range("A" & derLigne).Copy
    Range("A65000").End(xlUp).Offset(1).Select
    Range("A2:A" & Range("D" & Rows.Count).End(xlUp).Row).PasteSpecial
    en sorte de

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Sheets("Base CP Semaine").Range("A:C" & derLigne).Copy
    Range("A65000:C65000").End(xlUp).Offset(1).Select
    Range("???" & Range("D" & Rows.Count).End(xlUp).Row).PasteSpecial

Discussions similaires

  1. [VBA-E] Supprimer des lignes à partir d'une variable tableau
    Par humbp dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 28/02/2008, 08h09
  2. [VBA-E]suppression lignes a partir d'une cellule active
    Par lio62 dans le forum Macros et VBA Excel
    Réponses: 7
    Dernier message: 08/02/2007, 15h01
  3. [VBA-Excel] Créer un événement à partir d'une cellule excel
    Par marsupilami34 dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 03/01/2007, 11h36
  4. [VBA-E] extraire des données à partir d'une autre feuille
    Par zzman dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/01/2007, 13h26
  5. [VBA-A]récuperation de champs à partir d'une listbox
    Par jouf dans le forum VBA Access
    Réponses: 10
    Dernier message: 05/04/2006, 15h43

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