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-E]copie du contenu de la cellule si non vide


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 62
    Points : 44
    Points
    44
    Par défaut [VBA-E]copie du contenu de la cellule si non vide
    Bonjour,

    J'ai un fichier assez volumineux organisé comme ceci :
    ligne 1 : nom, prénom, vide
    ligne 2 : vide, vide, adresse, autres données
    ligne 3 : vide vide, n° téléphone, autres données

    j'aimerais copier en ligne 2 et 3 les noms et prénoms.
    Quelqu'un a une idée ?
    Merci d'avance...

  2. #2
    Membre régulier Avatar de doringen
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 73
    Points : 87
    Points
    87
    Par défaut
    Je ne vois pas trop comment est foutu ton fichier pour être volumineux...
    VEux-tu conserver aussi dans les lignes 2 et 3 les données déjà présentes ? ou écraser les anciennes données ?
    Pourrais-tu être plus précis, et dans l´idéal nous montrer ton fichier ?

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 553
    Points : 566
    Points
    566
    Par défaut
    Il te sufffit de faire ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    cells(2,1).value = cells(1,1).value
    cells(2,2).value = cells(1,2).value
    cells(3,1).value = cells(1,1).value
    cells(3,2).value = cells(1,2).value
    En supposant que tes données commencenta dans la colonne A evidemment

    Je ne vois pas non plus comment ton fichier peut être si volumineux que çà

    Tu ne voudrais pas dire plutôt que tes données Personne sotn en fait sur 3 lignes systématiquement ??
    Et du coup, si tu as 20000 contacts, cela tient sur 60000 contact ???

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 553
    Points : 566
    Points
    566
    Par défaut
    Si ma suggestion est la bonne, tu peux essayer ce code làj'ai pas tester mais çà devrait marcher
    par sécuirté fait quand même une sauvegarde de ton fichier

    La macro fait ceci
    Elle va boucler tant que les 3 premières cases ne sont pas vide car si les 3 sont vides, on est en fin de fichie si j'ai bien compris

    Si la première est non vide alors il stocke le nom
    Si la deuximèe est non vide alors il stocke le prenom
    Si la troisieme est non vide alors il remplit les 2 premières avec nom et prenom

    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
     
    Sub test()
    Dim i As Integer
    i = 1
    Dim nom, prenom As String
     
    While Trim(Cells(i, 1).Value) <> "" And Trim(Cells(i, 2).Value) <> "" And Trim(Cells(i, 3).Value) <> ""
        If (Trim(Cells(i, 1).Value) <> "") Then nom = Cells(i, 1).Value
        If (Trim(Cells(i, 2).Value) <> "") Then prenom = Cells(i, 2).Value
        If (Trim(Cells(i, 3).Value) <> "") Then
            Cells(i, 1).Value = nom
            Cells(i, 2).Value = prenom
        End If
     
        i = i + 1
    Wend
     
    End Sub

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 62
    Points : 44
    Points
    44
    Par défaut précisions supplémentaires
    Voir fichier doc attaché : (pas pu uploader d'xls)
    J'ai une première ligne rattachée à un dossier, une seconde, une troisième ou une quatrième rattachée à une opération (selon leur nombre qui n'est pas toujours le même par individu).
    Le but de la manoeuvre est de remplir les champs blancs (noms, zoc, date naissance,...) pour que les opérations correspondent au dossier.
    Je le ferais bien à la main mais j'ai pas loin de 50000 lignes...

    Merci
    Fichiers attachés Fichiers attachés

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2004
    Messages
    553
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2004
    Messages : 553
    Points : 566
    Points
    566
    Par défaut
    Il te suffit de trier ton fichier par numéro de dossier pour commencer mais je suppose que cela est déjà fait et d'éxécuter la macro suivante qui est une adaptation de la précédente

    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
     
    Sub test()
    Dim i As Long
    i = 2
    Dim article, annee, nom, dateNaissance, zoc, typeDossier, zoneExploit As String
    Dim numDossier As String
    numDossier = ""
     
    While Trim(Cells(i, 3).Value) <> ""
        If (Trim(Cells(i, 3).Value) <> numDossier) Then
            article = Cells(i, 1).Value
            annee = Cells(i, 2).Value
            numDossier = Cells(i, 3).Value
            nom = Cells(i, 4).Value
            dateNaissance = Cells(i, 5).Value
            zoc = Cells(i, 6).Value
            typeDossier = Cells(i, 7).Value
            zoneExploit = Cells(i, 8).Value
        End If
     
       If (Trim(Cells(i, 1).Value) = "") Then Cells(i, 1).Value = article
       If (Trim(Cells(i, 2).Value) = "") Then Cells(i, 2).Value = annee
       If (Trim(Cells(i, 4).Value) = "") Then Cells(i, 4).Value = nom
       If (Trim(Cells(i, 5).Value) = "") Then Cells(i, 5).Value = dateNaissance
       If (Trim(Cells(i, 6).Value) = "") Then Cells(i, 6).Value = zoc
       If (Trim(Cells(i, 7).Value) = "") Then Cells(i, 7).Value = typeDossier
       If (Trim(Cells(i, 8).Value) = "") Then Cells(i, 8).Value = zoneExploit
     
        i = i + 1
     
    Wend
     
    End Sub
    Ce code suppose que sur ta première ligne, toutes les infos sont renseignées

  7. #7
    Membre régulier Avatar de doringen
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 73
    Points : 87
    Points
    87
    Par défaut
    Voilà un code testé sur un bout de ton fichier (lignes 1 à 22)
    la première boucle vide les cellules de la colonne D qui ne contiennent que des chaines d´espaces (j´en avais, peut-être du fait de word...)
    la seconde remplit les cellules vides avec la dernière chaîne de nom+prénom enregistrée
    Seule contrainte aupraravant, le fichier doit être trié par numéros de dossiers
    Un seul problème (et de taille) se pose à moi, c´est les dossiers qui ne contiennent aboslument aucun prénom (exemple: ton 6° dossier, le 001ALBAN8208101...)
    en fait, je me rends compte que le coode d´helios, en plus d´être bien plus élegant, solutionne le problème des dossiers uniques sans nom+prénom



    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
    Dim i As Long
    Dim nomprenom As String
     
    Sub test()
    nomprenom = ""
    For i = 1 To 22
    If Left(Range("D" & i).Value, 2) = "  " Then Range("D" & i).ClearContents
    Next i
     
    For i = 1 To 22
    If IsEmpty(Cells(i, 4)) = False Then
    nomprenom = Range("D" & i).Value
    Else: Range("D" & i).Value = nomprenom
    End If
    Next i
    End Sub
    un probl

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Novembre 2006
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 62
    Points : 44
    Points
    44
    Par défaut Résolu
    Super méga merci !

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 28/09/2007, 09h51
  2. [VBA-E]vérifier si contenue de deux cellules est identique
    Par k-eisti dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 02/05/2007, 18h01
  3. [VBA-E]Copier le contenu d'une cellule vers une autre
    Par idir.17 dans le forum Macros et VBA Excel
    Réponses: 24
    Dernier message: 26/03/2007, 16h50
  4. Ma Macro copie le contenu de certaines cellules mais pas d'autres
    Par zococo dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 25/01/2007, 11h53
  5. Réponses: 4
    Dernier message: 22/01/2007, 19h51

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