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 :

Copier le contenu d'une cellule dans la cellule suivante si celle-ci est vide


Sujet :

Macros et VBA Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Juillet 2012
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2012
    Messages : 1
    Points : 1
    Points
    1
    Par défaut Copier le contenu d'une cellule dans la cellule suivante si celle-ci est vide
    Bonjour à vous tous,

    Je me suis inscrit aujourd'hui sur ce forum dans le but d'obtenir des conseils avisés de personnes sachantes et bien aimables pour aider un débutant dans visual Basic.

    J'espère ne pas avoir "passé" les règles de base de ce forum en postant ce message, sinon veuillez m'excuser et pourquoi pas, me préciser la bonne démarche.

    Je travaille sur un "lourd" document excel (2007) et j'utilise beaucoup de macros, donc VBA. Cela fait peu de temps, d'où mes problèmes.

    Plus précisemment, je possède une grande colonne avec des cellules remplies et d'autres vides.

    Ce que je souhaiterais réaliser :
    On démarre de la première ligne et on descend. Si la cellule est pleine, on passe à la suivante. Si la cellule est vide, on copie le contenu de la cellule supérieure et on le colle dans la cellule vide. Pour le moment j'ai ce code qui ne fonctionne pas ...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Dim L as integer
    Const LigneDebut = 2
    Const LigneFin = 1000
         For L = LigneDebut To LigneFin Step 1
                 If IsEmpty(Cells(L, 2)) Then 
                         Cells(L - 1, 2).select
                         Selection.copy
                         Cells(L, 2).Select
                         Selection.Paste
                 End if
         Next
    Quelqu'un pourrait-il me donner un petit coup de main qui me serait grandement utile. Peu importe le code, l'objectif est le résulat

    Merci d'avance à vous

  2. #2
    Expert éminent sénior
    Homme Profil pro
    aucune
    Inscrit en
    Septembre 2011
    Messages
    8 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : aucune

    Informations forums :
    Inscription : Septembre 2011
    Messages : 8 203
    Points : 14 354
    Points
    14 354
    Par défaut
    Bonjour,

    Essaie (pour la colonne A) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Sub test()
        For Each c In Range([A2], Cells(Rows.Count, 1).End(xlUp))
            If c.Value = "" Then c.Value = c.Offset(-1).Value
        Next c
    End Sub
    Cordialement.

    Daniel

    La plus perdue de toutes les journées est celle où l'on n'a pas ri. Chamfort

  3. #3
    Membre expert

    Homme Profil pro
    Retraité
    Inscrit en
    Juin 2012
    Messages
    1 564
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2012
    Messages : 1 564
    Points : 3 554
    Points
    3 554
    Billets dans le blog
    1
    Par défaut
    Bonjour,
    Je pense qu'il y a en en-tête une déclaration de procédure du style
    SUB nomprocédure ()
    et à la suite du code la ligne
    END SUB
    Pour modifier le moins possible le code proposé, on peut remplacer
    Selection.Paste par ActiveSheet.Paste ce qui donnerait :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Sub Completer()
    Dim L As Integer
    Const LigneDebut = 2
    Const LigneFin = 1000
        For L = LigneDebut To LigneFin Step 1
            If IsEmpty(Cells(L, 2)) Then
                Cells(L - 1, 2).Select
                Selection.Copy
                Cells(L, 2).Select
                ActiveSheet.Paste
            End If
        Next
    End Sub
    Ca fonctionne mais les spécialistes du VBA (c'est à dire d'autres que moi) conseillent d'éviter les sélections répétées dans une procédure.
    On peut donc préférer en modifiant à peine un peu plus.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    Sub Completer()
    Dim L As Integer
    Const LigneDebut = 2
    Const LigneFin = 100
        For L = LigneDebut To LigneFin Step 1
            If IsEmpty(Cells(L, 2)) Then
                Cells(L, 2).Value = Cells(L - 1, 2).Value
            End If
        Next
    End Sub
    Ah!Pas assez rapide.
    Cordialement

Discussions similaires

  1. Copier le contenu d'une ArrayList dans un fichier texte. Manque du texte.
    Par Pierre8r dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 08/08/2008, 20h32
  2. Réponses: 3
    Dernier message: 29/05/2008, 09h23
  3. vba excel:copier le contenu d'une feuil dans une autre feuil
    Par yucf_miagiste dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 05/09/2007, 19h53
  4. Réponses: 13
    Dernier message: 18/05/2007, 16h06
  5. copier le contenu d'une forme dans word
    Par didami dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 11/05/2007, 15h35

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