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

Excel Discussion :

Boucle d'identification + copier-coller entre deux feuilles


Sujet :

Excel

  1. #1
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut Boucle d'identification + copier-coller entre deux feuilles
    Bonjour à tous,

    N'ayant pas trouvé exactement la réponse que je cherche et débutant à VBA, je me retrouve bloqué avec la macro que je veux faire.
    Je dispose d'un classeur composé de deux feuilles dont la premiere posséde une colonne où est rentrée des données et dans la seconde, trois colonnes contenant des valeurs.
    Je cherche à créer une boucle qui déterminera une égalité entre les premières colonnes des deux feuilles. Pour ensuite, pour la ligne concernée, copier-coller les données présentes dans la seconde feuille et des colonne 2 et 3 vers les cases respectives en feuille 1.

    J'ai tenté avec le code suivant mais cela ne fonctionne 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
    Private Sub CommandButton1_Click()
    Dim x As Integer, y As Integer
     
    For x = 1 To 8
    For y = 4 To 6
     
    If Feuil1.Cells(x, 1) = Feuil2.Cells(y, 2) Then Feuil2.Range(Cells(y, 3), Cells(y, 4)).Copy Destination:=Feuil1.Cells(x, 2)
     
    Next
    Next
     
    Next
    Next
    End Sub
    Désolé si je ne suis pas très clair.
    Je vous remercie pour votre aide.
    Fichiers attachés Fichiers attachés

  2. #2
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Salut scratos,

    Voici pour toi.
    Je ne sais pas si c'est la meilleure méthode pour que tu progresses mais, j'avais un truc tout fait que j'ai rapidement adapté.
    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
    Option Explicit
     
    Sub scratos()
    Dim oRng_src As Range
    Dim oRng_bdd As Range
    Dim i As Integer, j As Integer
     
    With Worksheets("Feuil2")
        Set oRng_src = .Range("A1")
        For i = 0 To .Columns(1).Find("*", , , , , xlPrevious).Row - 1
            With Worksheets("Feuil3")
                Set oRng_bdd = .Columns(1).Find(oRng_src.Offset(i, 0), LookIn:=xlValues, LookAt:=xlWhole)
                If Not oRng_bdd Is Nothing Then
                    For j = 1 To 2
                        oRng_src.Offset(i, j) = oRng_bdd.Offset(0, j)
                    Next j
                End If
                Set oRng_bdd = Nothing
            End With
        Next i
    End With
     
    End Sub
    N'hésite pas à revenir vers moi !

    Cordialement,
    Kimy

  3. #3
    Nouveau Candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2015
    Messages
    2
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2015
    Messages : 2
    Points : 1
    Points
    1
    Par défaut
    Bonjour Kimy_Ire,

    Merci d'avoir répondu à ma demande. J'ai modifié quelques lignes pour que cela corresponde à mon fichier (enfin je sais pas si c'est juste ce que j'ai fait). Mais cela ne fonctionne pas. Pour mieux comprendre le code que tu as fait, j'ai ajouté des commentaires ou plutôt des questions. Tu te rendras compte de niveau très faible que j'ai

    N'hésite pas à me corriger si je fais fausse route. Encore merci pour ton 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
    Dim oRng_src As Range
    Dim oRng_bdd As Range
    Dim i As Integer, j As Integer
     
    'Sélection de la feuille où est rentré les données variables en colonne A
    With Worksheets("Feuil1")
    'Sélection de la colonne
        Set oRng_src = .Range("A1")
    'Boucle sur la colonne, mais je ne comprend pas pourquoi i=0 et la fonction .find("*", , , , , xlPrevious).Row - 1
        For i = 0 To .Columns(1).Find("*", , , , , xlPrevious).Row - 1
     
    'Sélection de la deuxieme feuille où se trouve des données fixes
            With Worksheets("Feuil2")
    'Colonne où sera appliquée la recherche d'égalité, pourquoi (i,0)?
                Set oRng_bdd = .Columns(2).Find(oRng_src.Offset(i, 0), LookIn:=xlValues, LookAt:=xlWhole)
    'Condition d'égalité, pour ensuite ajouter les données se trouvant sur la même ligne mais dans les deux colonnes qui suivent
                If Not oRng_bdd Is Nothing Then
                    For j = 3 To 4
                        oRng_src.Offset(i, j) = oRng_bdd.Offset(0, j)
                    Next j
                End If
    'Pourquoi appliqué la qualité Nothing?
                Set oRng_bdd = Nothing
            End With
        Next i
    End With
     
    End Sub
    Fichiers attachés Fichiers attachés

  4. #4
    Expert éminent sénior Avatar de Menhir
    Homme Profil pro
    Ingénieur
    Inscrit en
    Juin 2007
    Messages
    16 037
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Ingénieur
    Secteur : Industrie

    Informations forums :
    Inscription : Juin 2007
    Messages : 16 037
    Points : 32 866
    Points
    32 866
    Par défaut
    Excel contient une aide pour VBA. Tu devrais la consulter pour comprendre les différents éléments de syntaxe. Parce que essayer de les comprendre "littéralement", c'est loin d'être suffisant.

  5. #5
    Membre émérite
    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Novembre 2011
    Messages
    1 503
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Irlande

    Informations professionnelles :
    Activité : Chef de projet en SSII

    Informations forums :
    Inscription : Novembre 2011
    Messages : 1 503
    Points : 2 657
    Points
    2 657
    Par défaut
    Bonjour scratos,

    Réponses :
    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
    Dim oRng_src As Range
    Dim oRng_bdd As Range
    Dim i As Integer, j As Integer
     
    'Sélection de la feuille où est rentré les données variables en colonne A
    'Pas de sélection - on utilise la feuille
    With Worksheets("Feuil1")
    'Sélection de la colonne
    'On set la variable oRng_src sur la cellule A1 de Feuil1
        Set oRng_src = .Range("A1")
    'Boucle sur la colonne, mais je ne comprend pas pourquoi i=0 et la fonction .find("*", , , , , xlPrevious).Row - 1
    'On boucle de i = 0 à i = la dernière ligne non-vide de la colonne A de Feuil1
        For i = 0 To .Columns(1).Find("*", , , , , xlPrevious).Row - 1
     
    'Sélection de la deuxieme feuille où se trouve des données fixes
    'Avec la feuille Feuil2
            With Worksheets("Feuil2")
    'Colonne où sera appliquée la recherche d'égalité, pourquoi (i,0)?
    'On recherche sur la colonne 2 la valeur de oRng_src.Offset(i, 0) et on set oRng_bdd sur cette cellule.
    'oRng_src.Offset(i, 0), c'est A1 avec un décalage de i lignes (de Feuil1)
                Set oRng_bdd = .Columns(2).Find(oRng_src.Offset(i, 0), LookIn:=xlValues, LookAt:=xlWhole)
    'Condition d'égalité, pour ensuite ajouter les données se trouvant sur la même ligne mais dans les deux colonnes qui suivent
    'Si on ne trouve pas de valeur alors oRng_bdd  sera à "Nothing". Ainsi, on vérifie qu'on a bien une valeur.
                If Not oRng_bdd Is Nothing Then
    'Si on a une valeur, alors on rentre dans la condition et on met dans les cellules oRng_src.Offset(i, j) les valeurs.
    'Ici j = 3 et 4. Donc on prend oRng_bdd.Offset(0, 3) et oRng_bdd.Offset(0, 4) (décalage respectif de 3 et 4 colonnes) dans oRng_src.Offset(i, j)
                    For j = 3 To 4
                        oRng_src.Offset(i, j) = oRng_bdd.Offset(0, j)
                    Next j
                End If
    'Pourquoi appliqué la qualité Nothing?
    'Et on replace la variable oRng_bdd à Nothing pour réeffectuer la boucle.
                Set oRng_bdd = Nothing
            End With
        Next i
    End With
     
    End Sub
    Ton erreur ne se situe-t-elle pas sur For j = 3 To 4. Ceci est un décalage de 3 et 4 colonnes.

    N'hésite pas à revenir vers moi.

    Cordialement,
    Kimy

Discussions similaires

  1. [XL-2010] Copier/coller Entre deux classeurs excel VBA
    Par Benjen dans le forum Excel
    Réponses: 11
    Dernier message: 19/09/2014, 15h58
  2. Copier coller entre deux feuilles
    Par charlesveillet dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 04/08/2012, 10h59
  3. [XL-2000] Copier coller entre deux classeurs
    Par Juan Jacko dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 15/03/2011, 11h35
  4. Copier coller entre deux fichiers excel par macro
    Par miss-o-21 dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 26/11/2009, 14h45
  5. Réponses: 5
    Dernier message: 16/08/2006, 20h09

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