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 :

Rechercher une cellule et la copier au bon endroit [XL-2010]


Sujet :

Macros et VBA Excel

  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 32
    Par défaut Rechercher une cellule et la copier au bon endroit
    Bonjour,

    Pouvez-vous m'aider svp ?

    Je souhaiterais faire une macro qui me permettrait dans la Feuille1 de copier en Colonne F la cellule correspondante au mois en cours c'est à dire où une cellule de la colonne A (colonnes des mois et années) correspondrait à la cellule B1 de la feuille 2 ( dans cette cellule est écrit le mois qui m'intéresse), Puis coller cette cellule de la feuille 1 et la coller dans une autre feuille (Feuille2) en ligne 45 dans la première cellule vide en partant de la colonne Q.


    Merci d'avance,

    Bonne journée

  2. #2
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Bonjour,

    2 petites choses qui pourraient nous aider :

    - Commence par essayer de créer ta propre macro, si tu as des questions ou des problèmes alors nous t'aiderons, mais nous ne sommes pas là pour faire tout le travail de A à Z. Utilise les balises [code] ou (bouton #) pour poster le code (évite au maximum les pièces jointes)

    - Une image du classeur nous faciliterait aussi probablement la compréhension!

  3. #3
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    bonjour,
    tout a fait d'accord avec @ jeanmidudu

    vois ce lien : http://www.developpez.net/forums/d15...-ose-demander/
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 32
    Par défaut Début de macro
    Bonjour,

    Voilà ou j'en suis, grace a l'enregistreur de macro en partie. Cependant cette macro ne fonctionne pas pour la partie où il s'agit de coller sur la feuille F2. Voici la fin du code qui ne fonctionne pas correctement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
       'Coller ma cellule "Plage" (L37) que j'avais copier (de la feuille F2) dans la premiére cellule vide a partir Q45 de la feuille F1
     
        plage.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False

    Voilà le code en entier :



    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
     Dim plage As Range
    Set plage = Range("L37")
     
     'Copier le mois sur F2
     
    Sheets("F1").Activate
        Sheets("F1").Select
     
     'Dans la F1 le mois sera toujours en B1   
        Range("B1").Select
        Selection.Copy
     
        Sheets("F2").Select
    'Je collerais toujours ce mois dans la cellule A34 de la F2
     
        Range("A34").Select
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks _
            :=False, Transpose:=False
        Application.CutCopyMode = False
     
      'Filtrer tableau avec mon mois
     
        Range("A36:F126").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Rows( _
    "33:34"), CopyToRange:=Range("G36"), Unique:=False
        Columns("L:L").ColumnWidth = 13.71
        Columns("K:K").ColumnWidth = 16.86
     
       'Plage sera toujours la cellule L37 de la F2  
     
        plage.Select
        plage.Copy
     
             'Rechercher première cellule vide a partir de Q45
     
        Sheets("F1").Select
     
        Range("Q45").Select
      ActiveCell.Offset(0, 1).Select
        Do While Not IsEmpty(ActiveCell)
            ActiveCell.Offset(0, 1).Select
        Loop
     
      'c'est à partir d'ici que ma macro n'execute pas l'action souhaitée  
     
     'Coller ma cellule "Plage" (L37) que j'avais copier (de la F2) dans la premiére cellule vide a partir Q45 de la F1
     
        plage.PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, _
            SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
     
    End Sub

  5. #5
    Membre très actif
    Homme Profil pro
    Analyste programmeur
    Inscrit en
    Mai 2014
    Messages
    393
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Analyste programmeur
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mai 2014
    Messages : 393
    Par défaut
    Re,

    Alors plusieurs petites choses concernant ton code :

    - Il y a plusieurs éléments inutiles. Surtout l'utilisation des "active", "activate", "select".
    - Il y a des instructions dont je ne suis pas certain quelles soient très utiles (Columns.columnWidth qui modifie la taille des colonnes par exemple), après, c'est peut-être un choix de ta part
    - Je te conseille d'utilise des variables pour naviguer dans tes objets (il y a plusieurs raisons à cela : code plus propre, mieux structuré et donc plus simple à comprendre en général, vitesse d'exécution plus rapide, moins d'erreur
    - Pour sélectionner la première cellule vide en partant d'une autre, il y a plus simple, notamment pour trouver une cellule vide il y a plusieurs moyens différents selon ce que tu souhaites faire. Dans ton cas, il faut utiliser .end (sheets.range.end(direction). row/column selon ce que tu souhaites)

    J'ai donc essayé de travailler à partir de ce que tu nous as donné, mais sans image de ton classeur c'est moins évident. De plus je ne suis pas certain de la direction dans laquelle tu dois parcourir tes lignes/colonnes.

    Bref, voici mon code à la va-vite :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
     
    Option Explicit
     
    Sub test()
        Dim i As Long
        Dim plage As Range
        Dim sh As Worksheet
     
        Set sh = Sheets("F1")
        Set plage = Range("L37")
     
        With sh
        'Dans la F1 le mois sera toujours en B1
        'Copier le mois sur F2
            .Select
            .Range("B1").Select
        End With
     
        Selection.Copy
     
        With Sheets("F2")
            .Select
            .Range("A34").Select
        End With
        'Je collerais toujours ce mois dans la cellule A34 de la F2
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
     
        'Filtrer tableau avec mon mois
        Range("A36:F126").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Rows("33:34"), CopyToRange:=Range("G36"), Unique:=False
        Columns("L:L").ColumnWidth = 13.71
        Columns("K:K").ColumnWidth = 16.86
     
        'Plage sera toujours la cellule L37 de la F2
        plage.Select
        plage.Copy
     
        'Rechercher première cellule vide a partir de Q45
        With sh
            .Select
            'Sélection de la première cellule vide sur la ligne 45 en partant de la colonne Q
            'et en parcourant les colonnes vers la droite, je considère que la cellule P45 et Q45 sont non vides
            .Range(Cells(45, .Range("P45").End(xlToRight).Column + 1), Cells(45, .Range("P45").End(xlToRight).Column + 1)).Select
            .PasteSpecial Paste:=xlPasteFormats, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        End With
     
        'c'est à partir d'ici que ma macro n'execute pas l'action souhaitée
     
        'Coller ma cellule "Plage" (L37) que j'avais copier (de la F2) dans la premiére cellule vide a partir Q45 de la F1
        Application.CutCopyMode = False
     
    End Sub
    Il faut aussi faire attention si tu as un tableau dynamique. Est-ce qu'il est important de faire le tri à ce moment?
    Je pense qu'il y a beaucoup de choses qui peuvent être simplifiées.

    Ce qui serait bien donc, c'est si tu pouvais nous donner une image du classeur "type" avec des explications claires de ce que tu veux faire (et nous indiquer l'ordre d'importance s'il y a)

    Edit : Je vois également qu'au niveau de ton erreur, c'est le format de ce que tu as copié que tu essayes de coller. Est-ce bien ce que tu veux faire.? Car sinon, voici une solution qui colle seulement les valeurs (et qui fonctionne)

    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
     
    Option Explicit
     
    Sub test()
        Dim i As Long, col As Long
        Dim plage As Range
        Dim sh As Worksheet
     
        Set sh = Sheets("F1")
        Set plage = Range("L37")
     
        With sh
        'Dans la F1 le mois sera toujours en B1
        'Copier le mois sur F2
            .Select
            .Range("B1").Select
        End With
     
        Selection.Copy
     
        With Sheets("F2")
            .Select
            .Range("A34").Select
        End With
        'Je collerais toujours ce mois dans la cellule A34 de la F2
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
        Application.CutCopyMode = False
     
        'Filtrer tableau avec mon mois
        Range("A36:F126").AdvancedFilter Action:=xlFilterCopy, CriteriaRange:=Rows("33:34"), CopyToRange:=Range("G36"), Unique:=False
        Columns("L:L").ColumnWidth = 13.71
        Columns("K:K").ColumnWidth = 16.86
     
        'Plage sera toujours la cellule L37 de la F2
        plage.Select
        plage.Copy
     
        'Rechercher première cellule vide a partir de Q45
        With sh
            .Select
            'Sélection de la première cellule vide sur la ligne 45 en partant de la colonne Q
            'et en parcourant les colonns vers la droite, en considérant les cellules P45 et Q45 non vides
            col = .Range("P45").End(xlToRight).Column + 1
            .Range(Cells(45, col), Cells(45, col)).Select
        End With
     
        'On colle les valeurs (attention!!!, seulement les valeurs)
        Selection.PasteSpecial Paste:=xlPasteValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
     
        'Coller ma cellule "Plage" (L37) que j'avais copier (de la F2) dans la premiére cellule vide a partir Q45 de la F1
        Application.CutCopyMode = False
     
    End Sub

  6. #6
    Membre Expert
    Homme Profil pro
    PAO
    Inscrit en
    Octobre 2014
    Messages
    2 576
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : PAO
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2014
    Messages : 2 576
    Par défaut
    Bonjour,
    je ne suis pas rentré dans les détails, car je ne visualise toujours pas ce que tu veux faire exactement,
    un exemple avec un classeur xlsx avec de fausses données et un onglet montrant le résultats serait le bienvenue.
    Petits conceils :

    - l'enregistreur de macro est là seulement pour te donner un premier jet de code,
    qui te permet aussi de voir certaines fonctions vba à utiliser quand tu ne les connais pas.
    En faisant une recherche sur la fonction utilisée (donnée par l'enregistreur de macro) sur internet,
    tu trouveras comment l'utiliser et plein d'exemples de son utilisation. Exemple de recheche sur le forum ou internet : VBA Find

    - l'enregistreur de macro donne plein de Activate, Select … qui sont à proscrire une bonne partie du temps
    Exemple de la copie en direct (sans activate ou select …) - tu veux copier la cellule A5 en B1 de la même feuille :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Range("B1") = Range("A5") ' ici tout est pris en compte format, valeur etc …
    ' la même chose avec l'objet Cells
    Cells(5, 1) = Cells(1, 2) 'Cells(ligne, colonne)
    'si tu veux seulement copier la valeur tu auras alors :
    Range("B1").Value = Range("A5").Value ' on rajoute ".Value"
    Cells(5, 1).Value = Cells(1, 2).Value
    Mais attention le pointage dans un même classeur est important (de même qu'entre classeurs), donc si tu copies d'une feuille à une autre,
    il faut faire le pointage (quoiqu'il en soit le faire tout le temps fait partie des bonnes habitudes),
    le code est plus compréhensible de plus; exemple toujours avec la copie mais de la feuil2 à la feuil1,
    on utilisera ici Worksheets (Worksheets("Nom_de_la_feuille"))
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Worksheets("Feuil1").Range("B1") = Worksheets("Feuil2").Range("A5") ' ici tout est pris en compte format, valeur etc …
    ' la même chose avec l'objet Cells
    Worksheets("Feuil1").Cells(5, 1) = Worksheets("Feuil2").Cells(1, 2) 'Cells(ligne, colonne)
    'si tu veux seulement copier la valeur tu auras alors :
    Worksheets("Feuil1").Range("B1").Value = Worksheets("Feuil2").Range("A5").Value ' on rajoute ".Value"
    Worksheets("Feuil1").Cells(5, 1).Value = Worksheets("Feuil2").Cells(1, 2).Value
    il existe aussi Sheets et CodeName pour le pointage entre feuille (Faire une recherche pour les explications)
    Cordialement
    Ryu

    La connaissance s’acquiert par l’expérience, tout le reste n’est que de l’information. – Albert Einstein

    Pensez à la Balise [ CODE][/CODE ] - à utiliser via le bouton # => Exemple

    Une fois votre problème solutionné pensez à mettre :resolu: en n'oubliant pas d'indiquer qu'elle est la solution finale choisie ;)

  7. #7
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Mai 2016
    Messages
    32
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mai 2016
    Messages : 32
    Par défaut
    Merci a tous, j'ai réussi grace a vos codes

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

Discussions similaires

  1. [bash] Rechercher une donnée et la copier vers un autre fichier
    Par Mendozaa dans le forum Shell et commandes GNU
    Réponses: 20
    Dernier message: 17/06/2014, 18h10
  2. Rechercher une cellule
    Par cigalou84 dans le forum WinDev
    Réponses: 8
    Dernier message: 12/03/2014, 19h35
  3. [Toutes versions] Cliquer sur une cellule pour la copier
    Par rhuttin dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 23/07/2013, 18h14
  4. rechercher une cellule par combobox
    Par jijie dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 07/01/2010, 21h23
  5. Réponses: 6
    Dernier message: 01/05/2007, 23h03

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