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 Copier Coller vers cellules precises avec des ranges aleatoires


Sujet :

Macros et VBA Excel

  1. #1
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut VBA Copier Coller vers cellules precises avec des ranges aleatoires
    Bonjour,

    Je suis un debutant en VBA et je bloque sur un sujet.
    Dans un fichier excel j'ai :
    - un onglet "toto"
    - un onglet "lala"

    Via un TCD dans l'onglet "lala" j'obtiens des donnees que je souhaite modifier. (Les donnees ne font pas partis du TCD)

    Ensuite, voila mon probleme : je veux que ces donnees modifiees aillent se coller au bon endroit dans l'onglet "toto" a la fin des modifications. Le lien que j'ai pour cela c'est un numeros commun.

    Ma plage de donnees a copier sur l'onglet "lala'" va de M13 a U13 mais varie sur le nombre de lignes suivant les criteres du TCD.
    Ma plage de donnees pour coller sur l'onglet "toto'" va de EI3 a EQ3 mais varie sur le nombre de lignes.

    Le lien en commun que j'ai entre les onglets "toto" et "lala" est un numeros qui se trouve pour "toto" a EH3 jusqu'a XX (Cela varie) et pour "lala" a L13 jusqu'a XX (cela depend du TCD)

    Comment faire pour aller copier au bon endroit tout en gerant ce probleme de variation des donnees ? Je suis completement perdu je ne sais meme pas par quoi commencer sur mon code...

    Votre aide m'est precieuse! Merci pour ceux qui veulent s'y pencher dessus.

  2. #2
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut VBA copier-coller
    Bonjour,

    Sans fichier ni code il est difficile de se faire une idée.
    Toutefois, une solution peut-être : Donner un nom aux cellules devant recevoir les modifications. Cela simplifie souvent les choses.

    Cordialement,

  3. #3
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Effectivement sans piece jointe c'est delicat mais mon fichier est tres tres lourd. J'ai fait un code deja mais il ne marche pas. Peut etre qu'il vous eclairera un peu plus sur ce que je souhaite.

    Merci de votre aide

    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
     
    Sub Copier_Valeurs()
     
    Dim WsS As Worksheet, WsC As Worksheet
    Dim Cel As Range, C As Range
    Dim LigneAjout As Long
     
    Application.ScreenUpdating = False
     
    Set WsS = Worksheets("lala")
    Set WsC = Worksheets("toto")
     
    For Each Cel In WsS.Range("L12:L" & WsS.Range("L" & Rows.Count).End(xlUp).Row)
     
    Set C = WsC.Columns(138).Find(Cel, , xlValues, xlWhole)
    LigneAjout = WsC.Range("L" & Rows.Count).End(xlUp).Row + 1
     
    If C Is Nothing Then
    Cel.Resize(, 9).Copy
    WsC.Range("L" & C.Row).PasteSpecial (xlPasteValues)
     
    Else
    Cel.Resize(, 16).Copy
    WsC.Range("A" & LigneAjout).PasteSpecial (xlPasteValues)
    LigneAjout = LigneAjout + 1
    End If
     
    Next Cel
     
    Application.CutCopyMode = False
     
    Set C = Nothing: Set WsS = Nothing: Set WsC = Nothing
     
    End Sub

  4. #4
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour,
    J'ai travaille sur mon code mais cela ne fonctionne toujours pas...

    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
    Sub Copier_Valeurs()
     
    Dim WsS As Worksheet, WsC As Worksheet
    Dim Cel As Range, C As Range
    Dim LigneAjout As Long
     
    Application.ScreenUpdating = False
     
    Set WsS = Worksheets("lala")
    Set WsC = Worksheets("toto")
     
    For Each Cel In WsS.Range("L12:L" & WsS.Range("L" & Rows.Count).End(xlUp).Row)
     
    Set C = WsC.Columns(138).Find(Cel, , xlValues, xlWhole)
    LigneAjout = WsC.Range("EH" & Rows.Count).End(xlUp).Row + 1
     
    If C Is Nothing Then
    Cel.Resize(, 9).Copy WsC.Range("EH" & C.Row)
     
    Else
    Cel.Resize(, 9).Copy WsC.Range("EH" & LigneAjout)
    LigneAjout = LigneAjout + 1
    End If
     
    Next Cel
     
    Application.CutCopyMode = False
     
    Set C = Nothing: Set WsS = Nothing: Set WsC = Nothing
     
    End Sub
    HELP!!! Je m'y suis vraiement penche dessus mais sans resultat...

    Merci de votre aide

  5. #5
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut VBA copier-coller
    Bonjour,

    difficile de savoir exactement ce que tu attends.

    en tout cas le code suivant (basé sur le tien) renvoie bien dans toto les lignes dont les cellules de la colonne "L" de "lala" ne sont pas présentes dans colonne "EH" de "toto".

    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
     
    Sub Copier_Valeurs2()
    Dim WsS As Worksheet, WsC As Worksheet
    Dim Cel As Range, C As Range
    Dim LigneAjout As Long
     
    Application.ScreenUpdating = False
     
    Set WsS = Worksheets("lala")
    Set WsC = Worksheets("toto")
     
    For Each Cel In WsS.Range("L12:L" & WsS.Range("L" & Rows.Count).End(xlUp).Row)
        On Error Resume Next
        Set C = WsC.Columns(138).Find(Cel, , xlValues, xlWhole)
        MsgBox C.Address
        LigneAjout = WsC.Range("EH" & Rows.Count).End(xlUp).Row + 1
     
        If C Is Nothing Then
            Cel.Resize(, 10).Copy WsC.Range("EH" & LigneAjout)
            LigneAjout = LigneAjout + 1
           Else
            'Cel.Resize(, 10).Copy WsC.Range("EH" & C.Row)
        End If
    Next Cel
     
    Application.CutCopyMode = False
     
    Set C = Nothing: Set WsS = Nothing: Set WsC = Nothing
    End Sub
    Cordialement,

  6. #6
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour nibledispo et encore merci de ton aide.

    Je peux pas essayer ton code car j'ai pas le fichier actuellement.

    Par contre ce que je souhaite c'est que les lignes de "lala" qui sont modifiées aillent ensuite se copier dans "toto" via le numéro commun qu'on a dans la colonne L pour "lala" et EH pour "toto". Elle écraseront les données précédentes qu'on avait dans "toto".
    En fait, je veux juste qu'elles aillent se copier au bon endroit grâce au numéro en commun qu'on a sur les 2 onglets.

    J'espère que c'est plus clair. Tu crois qu'on peut adapter ton code pour faire ça?

    Merci de ton aide en tout cas.

  7. #7
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut VBA copier-coller
    Bonsoir,

    regarde si le fichier joint répond à ton attente.

    La feuille lala a :
    - deux enregistrements 15 et 16 qui n'existent pas dans toto
    - subie des modifications en rouge sur deux enregistrements existants dans toto

    résultat:
    - les deux enregistrements inexistants sont rajoutés dans toto
    - les enregistrements modifiés sont remplacés dans toto

    Cordialement,
    Fichiers attachés Fichiers attachés

  8. #8
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Bonjour nibledispo,

    D'abord merci bcp pour ton aide! par contre le temps de traitement dure longtemps car je pense que j'ai trop de lignes dans ma base de donnee "toto" (environ 8000).

    Alors je pense changer de strategie et finalement partir uniquement sur un remplacage de ligne dans la base "toto". Il faudrait que j'annule l'option de rajouter une ligne au cas ou il ne trouve pas la ligne, peut etre que je gagnerai en temps de traitement.

    Je pensais le faire de cette sorte, mais cela ne marche pas... Probleme de synthaxe il me dit

    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
     
    Sub Copier_Valeurs2()
    Dim WsS As Worksheet, WsC As Worksheet
    Dim Cel As Range, C As Range
     
    Application.ScreenUpdating = False
     
    Set WsS = Worksheets("lala")
    Set WsC = Worksheets("toto")
     
    For Each Cel In WsS.Range("L12:L" & WsS.Range("L" & Rows.Count).End(xlUp).Row)
        On Error Resume Next
        Set C = WsC.Columns(138).Find(Cel, , xlValues, xlWhole)
     
    C = Cel.Resize(, 10).Copy WsC.Range("EH" & C.Row) 'probleme de synthaxe la!
     
    Next Cel
     
    Application.CutCopyMode = False
     
    Set C = Nothing: Set WsS = Nothing: Set WsC = Nothing
     
    End Sub
    Sinon, y a-t-il d'autres moyen pour reduire de temps de traitement ?

    Merci de ton aide.

  9. #9
    Membre expérimenté
    Homme Profil pro
    retraité
    Inscrit en
    Mars 2013
    Messages
    885
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Mars 2013
    Messages : 885
    Points : 1 499
    Points
    1 499
    Par défaut VBA copier-coller
    Bonjour,

    je sors de chez le dentiste avec une douleur qui paralyse mes méninges.

    Qu'entends-tu par longtemps ?

    Une solution serait de travailler sur des variables tableau.

    Pour ce faire transférer les données source dans une variable tableau:

    Variable tableau = donnée source

    A plus tard si tu n'obtiens pas de réponse satisfaisante avant.

    Cordialement,

  10. #10
    Candidat au Club
    Homme Profil pro
    Inscrit en
    Novembre 2013
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2013
    Messages : 10
    Points : 4
    Points
    4
    Par défaut
    Longtemps : je veux dire plus de 1 a 2 min ca depends des modifs.

    Apres pour le tableau, je ne sais pas comment faire. Mes competences, si on peut employer ce terme, sont limitees en VBA. Qu'entend tu par "tableau" sous VBA?

    Je te souhaite une bonne recup!

    Merci

  11. #11
    Expert éminent sénior
    Avatar de Marc-L
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2013
    Messages
    9 468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2013
    Messages : 9 468
    Points : 18 674
    Points
    18 674
    Par défaut

    Bonjour,

    un peu de lecture :




    __________________________________________________________________________________________

    Merci de cliquer sur pour chaque message ayant aidé puis sur pour clore cette discussion …

Discussions similaires

  1. [XL-2010] en vba copier coller avec une condition dans des classeurs différents
    Par will83177 dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 26/02/2014, 18h38
  2. [XL-2007] VBA copier coller d'une selection avec variable
    Par K.Barber dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 17/10/2013, 16h11
  3. [E-2003] Copier/Coller plage cellules vers autre fichier
    Par macat dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 08/10/2008, 16h01
  4. copier coller plage cellule avec Offset
    Par beebe dans le forum Macros et VBA Excel
    Réponses: 2
    Dernier message: 30/06/2008, 15h03
  5. [VBA-E] Aide copier-coller vers Word
    Par a.dequidt dans le forum Macros et VBA Excel
    Réponses: 6
    Dernier message: 19/09/2007, 16h45

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