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 un champ à partir d'une valeur recherchée


Sujet :

Macros et VBA Excel

  1. #1
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 44
    Points
    44
    Par défaut Copier un champ à partir d'une valeur recherchée
    Bonjour à tous,
    en espérant que personne n'ait attrapé de coup de soleil ces derniers temps, je me permets de vous appeler de nouveau à l'aide.
    J'ai un tableau dans lequel j'ai besoin de récuperer un champ complet pour le coller dans une autre feuille.
    de A1 à A10 j'ai une valeur X
    de A11 à A50 une valeur Y
    de A51 à A70 une valeur Z
    ect...
    Nota: le nombre de valeur n'est pas figé
    Dans les colonnes B,C,D... j'ai des résultats associés à chacunes des valeurs.
    Si je veux récupérer toutes les valeurs associée à Y et les coller dans une autres feuilles à quoi ressemble le code?

    1) recherche dans col A dees valeurs Y
    2) récuperer le champ A11 à D50
    3) copier l'ensemble dans une feuille

    Cela me paraissait simple sur le papier et pourtant ...
    Merci d'avance pour l'éventuel coup de main

  2. #2
    Membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Mars 2013
    Messages
    95
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Mars 2013
    Messages : 95
    Points : 60
    Points
    60
    Par défaut
    Bonjour gilou41,

    Tu déclare une plage
    Tu fais une boucle qui parcoure ta colonne A
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    for i = prem_ligne to dern_ligne
        set cell_courante = cells(i, 1)
    Si tu as la valeur Y tu l'ajoute à ta plage avec quelque chose dans le genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    if cell_courante = Y then
        plage = Union(plage, range(cell_courante, cells(cell_courante.row, 4))) ' 4 pour la colonne D '
    Tu copies ta plage
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    plage.copy destination:=ta_feuille.ta_cellule_de_destination

  3. #3
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut occurence
    Bonjour le Forum,

    Personnellement, j'utiliserais une variable tableau.
    Pour ce faire, tu peux adapter cette - modeste - contribution.

    alimentation feuilles depuis occurences

  4. #4
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Déjà merci à tous les 2 pour votre aide
    J'ai tester le code mais ça ne fonctionne pas.
    Pour être le plus précis possible avec mon problème, je joint un petit fichier
    Fichiers attachés Fichiers attachés

  5. #5
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut code
    Quel code?
    Je n'en vois aucun dans ton classeur
    (Nota : celui-ci doit être enregistré avec l'extension ".xlsm" afin de tenir compte des procédures macro)
    As-tu essayé le code figurant dans la cible du lien que je t'ai indiqué?
    Tu peux l'adapter et revenir si nécessaire.

  6. #6
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    je faisais référence au code de Hallo2550.
    J'ai regargé ton lien mais honnetement je n'ai pas compris grand chose.
    J'ai l'impression que mon besoin ne demande pas un code très complexe mais comme mes connaissances sont plus que limitées...

  7. #7
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut
    Bonsoir le Forum,

    Aucun problème, Gilou. Bien entendu.

    Avant toute chose, et si tu es intéressé, tu peux abordrer les variables tableaux par le tutoriel de Sylkiroad

    les tableaux par Sylkiroad

    Ensuite, si je peux te mettre sur la voie, tu peux créer une procédure appelant la procédure argumentée figurant dans mon code et nommée "Gestion_Feuilles".

    Préalable : tes données doivent se présenter sous forme de base soit avec des entêtes de colonnes (titres des champs) sur la 1ère ligne de ta feuille (ici "Feuil3"). Les données (enregistrements) débutent à partir de la ligne 2.

    Exemple (à partir de ton fichier avec le préalable ci-dessus)

    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
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    Public liste As Range
     
    Public Sub essaioccurs()
    Dim dercel As Range
    With Sheets("Feuil3")
                Set dercel = .Cells(.Rows.Count, 1).End(xlUp)
                Set liste = .Range(.Cells(2, 1), dercel)
    End With
    Call Gestion_Feuilles("180520")
    End Sub
     
    Public Sub Gestion_Feuilles(occurs As String)
     
    Dim i As Integer, n As Integer, nbcol As Integer
    Dim f As Range, celcop As Range
    Dim firstAddress As String
    Dim Tablo() As Variant
    Dim sh As Worksheet
    Dim existe_feuil As Boolean
     
    Application.ScreenUpdating = False
     
    'Ligne de titre
    With Sheets("Feuil3")
            Set celcop = .Range("B1", .Cells(1, .Columns.Count).End(xlToLeft))
    End With
     
    'Nombre de données à alimenter = dimension 1 de la variable Tablo
    nbcol = celcop.Columns.Count
     
    'Test si la feuille existe
    existe_feuil = False
    For Each sh In Worksheets
            If sh.Name = occurs Then
                    existe_feuil = True
                    Exit For
            End If
    Next sh
     
    'Si la feuille n'existe pas, alors création de celle-ci avec nom et titres de colonnes adaptés
    If existe_feuil = False Then
            Sheets.Add Type:=xlWorksheet, After:=Sheets(Sheets.Count)
            celcop.Copy
            With ActiveSheet
                    .Paste Destination:=.Range("A1")
                    .Name = occurs
            End With
            Application.CutCopyMode = False
    End If
     
    'Alimentation de la variable Tablo
    With liste
        Set f = .Find(occurs, LookIn:=xlValues)
        If Not f Is Nothing Then
            firstAddress = f.Address
            Do
                    n = n + 1
                    ReDim Preserve Tablo(1 To nbcol, 1 To n)
                    'Toutes les cellules de la ligne alimentent Tablo
                    For i = 1 To nbcol
                            Tablo(i, n) = f.Offset(0, i - numcol)
                    Next i
                    Set f = .FindNext(f)
            Loop While Not f Is Nothing And f.Address <> firstAddress
        End If
    End With
     
     
    'Alimentation de la feuille
    With Sheets(occurs)
             .Range("A2", .Range("A2").Offset(UBound(Tablo, 2) - 1, UBound(Tablo, 1) - 1)).Value = WorksheetFunction.Transpose(Tablo)
    End With
     
    'Réinitialisation de la variable Tablo
    Erase Tablo
     
    End Sub
    Méthode proposée:
    - tu abordes le tutoriel de Sylkiroad
    - tu regardes le code ci-dessus ligne par ligne, preque mot par mot
    - tu fais un essai à partir de ton fichier, en tenant compte du préalable ci-dessus
    - tu reviens pour tous les points qui te semblent obscurs.

    Je reste à ta disposition

  8. #8
    Membre du Club
    Inscrit en
    Février 2011
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Février 2011
    Messages : 60
    Points : 44
    Points
    44
    Par défaut
    Je te remercie pour les pistes que tu m'a donné, après quelques modif pour adapter à mon besoin, cela fonctionne pile poil.
    Encore merci et peut-être à une autre fois.

  9. #9
    Expert éminent
    Avatar de MarcelG
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2009
    Messages
    3 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 67
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2009
    Messages : 3 449
    Points : 7 149
    Points
    7 149
    Billets dans le blog
    7
    Par défaut alimentation
    Bonjour Gilou, Bonjour le Forum,

    Sûr? Aucune question?
    Si tu as pris soin d'étudier le code proposé instruction par instruction, et que tu les as toutes assimilées, alors tant mieux.

    Un aménagement possible.
    Tu peux moduler l'occurence cherchée par InputBox.

    Bonne semaine à tous.

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

Discussions similaires

  1. Vérification de valeurs d'un champ à partir d'une liste
    Par mad44 dans le forum Développement de jobs
    Réponses: 5
    Dernier message: 06/11/2014, 17h26
  2. [XL-2010] Recherche dans une ligne à partir d'une valeur
    Par icem4n dans le forum Excel
    Réponses: 7
    Dernier message: 15/07/2014, 15h50
  3. Réponses: 0
    Dernier message: 26/03/2014, 04h34
  4. Copier un champs à partir d'une autre table
    Par theo63 dans le forum Débuter
    Réponses: 2
    Dernier message: 08/05/2012, 04h42
  5. Réponses: 2
    Dernier message: 20/07/2006, 12h10

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