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 :

Recopier la première ligne à chaque fois que la valeur d'un champ change


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
    Géomatique
    Inscrit en
    Juin 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Géomatique

    Informations forums :
    Inscription : Juin 2011
    Messages : 2
    Par défaut Recopier la première ligne à chaque fois que la valeur d'un champ change
    Bonjour,

    Je commence à peine à découvrir Excel et aussi le langage VBA lequel permet apparemment d'automatiser l'édition sur les feuilles Excel.

    Je vous présente l'aspect de ma feuille Excel:

    Champ0 Champ1 Champ2 Champ3 Champ4
    25 a 2 100 200
    25 a 2 150 250
    25 a 2 200 300
    30 a 2 400 450
    30 a 2 450 500
    30 a 2 500 550

    Voilà, je voudrais écrire une macro qui me permettrai d'obtenir ceci:

    Champ0 Champ1 Champ2 Champ3 Champ4
    25 a 2 100 200
    25 a 2 150 250
    25 a 2 200 300
    25 a 2 100 200
    30 a 2 400 450
    30 a 2 450 500
    30 a 2 500 550
    30 a 2 400 450

    C'est à dire qu'à chaque fois que le champ0 change de valeur, la macro doit insérer la première ligne du bloc de lignes.

    Merci de me donner un coup de main car l'algorithme je l'ai en tête mais je ne suis pas familiarisée avec les instructions du VBA.

    Cordialement,

    Mum11

  2. #2
    Membre Expert
    Homme Profil pro
    Retraité
    Inscrit en
    Avril 2011
    Messages
    1 858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Avril 2011
    Messages : 1 858
    Par défaut
    Bonjour Mum11,

    Voici une solution.

    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
    Sub Test()
    Dim DerLigne As Long
    Dim LigneACopier As Range
    Application.ScreenUpdating = False
    With Sheets("Feuil1") ' Nom de feuille à adapter
        DerLigne = .Range("A" & .Rows.Count).End(xlUp).Row 'Recherche de la derniere ligne du tableau
        Set LigneACopier = .Range("A2").EntireRow 'La ligne à copier est la 1ere ligne du bloc (ligne 2 du tableau)
        i = 1 'Initialisation compteur
        Do While i < DerLigne 'Balayage de chaque ligne du tableau
            i = i + 1 'Incrémentation compteur
            ' On compare la valeur des cellules
            If .Range("A" & i).Offset(1, 0) <> .Range("A" & i) Then
                'Si les valeurs sont différentes, on insere une ligne
                .Range("A" & i).Offset(1, 0).EntireRow.Insert
                'on copie la 1ere ligne du bloc
                LigneACopier.Copy
                'on colle cette 1ere ligne du bloc à la place de la ligne insérée
                .Paste Destination:=.Range("A" & i).Offset(1, 0)
                'La 1ere ligne du nouveau bloc devient la ligne à copier
                Set LigneACopier = .Range("A" & i).Offset(2, 0).EntireRow
                'On corrige le nombre de lignes du tableau
                DerLigne = DerLigne + 1
                'On corrige le nombre de lignes à scruter
                i = i + 1
            End If
        Loop
        Set LigneACopier = Nothing
    End With
    Application.ScreenUpdating = True
    End Sub
    Cordialement.

  3. #3
    Candidat au Club
    Homme Profil pro
    Géomatique
    Inscrit en
    Juin 2011
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Géomatique

    Informations forums :
    Inscription : Juin 2011
    Messages : 2
    Par défaut Merci gFZT82 !!!
    Bonjour

    Je vous remercie infiniment gFZT82 car j'ai testé votre code et ça marche.

    Merci pour la rapidité et l'efficacité de votre réponse. Je vais me servir de votre code pour m'initier à la programmation sous Excel.

    Milles Merci.

    Cordialement,

    Mum11

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

Discussions similaires

  1. [MySQL] A chaque fois que j'actualise la table une ligne sera insérée
    Par jockhip12 dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 07/06/2012, 14h12
  2. Réponses: 4
    Dernier message: 06/06/2012, 11h14
  3. decrementer selection chaque fois que macro est appelée
    Par joeyd dans le forum Macros et VBA Excel
    Réponses: 12
    Dernier message: 28/09/2007, 18h05
  4. Réponses: 10
    Dernier message: 02/10/2006, 13h36
  5. Réponses: 10
    Dernier message: 17/05/2006, 19h55

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