[VBA] Excel- Copier cellulesous condition

Résolu
Bonjour,

Voilà plusieurs semaines que je parcours ce forum pour m'aider à trouver et à développer des macros. Donc déjà je tiens à remercier les personnes qui répondent, c'est réellement très pratique et agréable.

Voilà mon problème, je suis actuellement en train de développer un fichier Excel. En feuille 1 je possède une cinquantaine de colonne. Ce que je voudrais c'est que la valeur que je rentre dans ma feuil2 en cellule D3 recherche les valeurs correspondantes dans la feuil1 colonne AV et me copie la valeur contenu en colonne A (feuil1) de la même ligne en colonne A(feuil2).

A savoir que les valeurs rentrées en D3 sont totalement aléatoire.

Merci par avance,

Gotts
Configuration: Windows XP Internet Explorer 6.0
Excel 2003.

19 réponses

  1. Re,

    Il serait bien que tu deviennes membre, pour mettre ton statut en résolu en haut de ton post, si non clic sur le triangle et demande à la modération de le faire pour toi

    A+
    Mike-31

    Un problème sans solution est un problème mal posé  (Einstein)
    1. Rebonjour,

      Ne vous inquiétez pas je l'avais bien insérer en tant que macro en utilisant le code module et non pas le code Feuil comme on pouvait le croire.

      Néanmoins j'ai trouvé d'où venait l'erreur, le classeur possédant beaucoup d'autres codes il y avait un petit conflit qui est désormais réglé. La macro fonctionne très bien reste juste à lui rajouter quelques petits plus pour qu'elle soit parfaite!

      Merci à tous pour l'aide apportée.

      Au plaisir de vous revoir et de vous lire,

      Bonne après midi,

      Gotts
      1. Salut Lermite,

        Tout à fait, Ah ! il faut tout dire, je crois qu'on va envoyer des notes d'honoraires, (non je déconne)

        Alors clic droit sur l’onglet de feuille, Visualiser le code/Insérer/ Module et coller le code dans la partie blanche tu remarquera un curseur clignotant
        Il y a d’autre chemin pour y aller mais restons simple

        A+
        Mike-31

        Un problème sans solution est un problème mal posé  (Einstein)
        1. Contributeur
          Bnjour Mike,
          Faut mettre la macros dans un module général.
          A+
          1. Re,

            Le bouton de lancement se trouve en effet feuil2 mais il semblerait que la macro ne reconnaisse toujours pas l'adresse. ^^
            Toujours la même erreur. Pourtant le firstaddress indique $AV$4 ce qui est en effet bin la première ligne contenant la valeur recherchée.

            Merci encore pour toute cette aide précieuse et pour le temps consacré.

            Gotts
            1. Re,

              Voila, il fallait simplement identifier la feuille, le bouton de lancement macro se trouve Feuille 2 si non il faudra que je te modifie une ligne de code

              Sub Copie_Valeur_Trouvée()
              Dim x
              Sheets("Feuil2").Range("D3").Select
              x = ActiveCell.Value
              Sheets("Portefeuille").Select
              With Worksheets("Portefeuille").Range("AV:AV")
              Set c = .Find(x, LookIn:=xlValues)
              If Not c Is Nothing Then
              firstAddress = c.Address
              End If
              End With
              Range(firstAddress).Select
              ActiveCell.Activate
              Cells(ActiveCell.Row, 1) = Range(firstAddress)
              End Sub

              A+
              Mike-31

              Un problème sans solution est un problème mal posé  (Einstein)
              1. Feuille1 = Portefeuille (celle avec les données)
                Feuille2 = feuil2 (Celle qui contient D3)

                Merci

                Gotts
                1. Re,

                  Comment se nomment tes feuilles, la feuille ou se trouve la cellule D3 et la feuille ou se trouve ta liste de valeur en AV

                  A+
                  Mike-31

                  Un problème sans solution est un problème mal posé  (Einstein)
                  1. Edit de mon message précédent:

                    Je viens de tester ta macro Mike (déjà merci) et ensuite je rencontre un petit bug au niveau de:
                    Range(firstAddress).Select

                    Ou le VBE me dit que : "la méthode sélect de la classe range à échoué".

                    Merci par avance,

                    Gotts
                    1. Malheureusement un filtre est impossible pour beaucoup de raison sur la feuille 1 (Déjà car les données de cette feuille sont protégés et ne doivent pas être modifiées car elles sont le moteur d'autres documents).

                      C'est pourquoi je suis obligé de traiter ceci par macro sous VBA.

                      Petit shéma:

                      Feuille 1 : Tableau à 2 colonnes: Nom - Département (Tableau contenant les données)
                      Feuille2: Tableau à 1 colonne: Nom - (tableau fournissant les réponses) et une cellule recherche (où on tape un département au choix :D)

                      PS: Département et Nom sont de simples exemples. Les données que je traite ne sont pas transmissibles vu qu'elles sont confidentielles.

                      Voilà, en espérant avoir était le plus clair et concret possible,

                      Merci par avance,

                      Gotts
                      1. Salut tous,

                        Allez testes ce code, cellule contenant la valeur recherchée feuille02 cellule D3
                        Matrice en colonne AV feuille 1 copie la valeur trouvée en colonne A sur la même ligne

                        Sub Copie_Valeur_Trouvée()
                        Dim x
                        Sheets("Feuil2").Range("D3").Select
                        x = ActiveCell.Value
                        Sheets("Feuil1").Select
                        With Worksheets("Feuil1").Range("AV:AV")
                        Set c = .Find(x, LookIn:=xlValues)
                        If Not c Is Nothing Then
                        firstAddress = c.Address
                        End If
                        End With
                        Range(firstAddress).Select
                        ActiveCell.Activate
                        Cells(ActiveCell.Row, 1) = Range(firstAddress)
                        End Sub

                        A+
                        Mike-31

                        Un problème sans solution est un problème mal posé  (Einstein)
                        1. Contributeur
                          Bonjour,
                          Imaginer un tableau en feuille 1 à seulement 2 colonnes (prenons nom et département par exemple)
                          et un tableau en feuille 2 avec une seule colonne (nom) et une cellule recherche,

                          On rentre une donnée (un département par exemple) dans la cellule recherche on appuis sur la macro et ca nous donne les noms habitant dans le département recherché.
                          1. En fait pour être clair

                            Imaginer un tableau en feuille 1 à seulement 2 colonnes (prenons nom et département par exemple)
                            et un tableau en feuille 2 avec une seule colonne (nom) et une cellule recherche,

                            On rentre une donnée (un département par exemple) dans la cellule recherche on appuis sur la macro et ca nous donne les noms habitant dans le département recherché.

                            Voilà c'est surement plus concret. Mes données sont différentes mais c'est l'idée générale.

                            Voilà, encore merci par avance,

                            gotts
                            1. Pas de souci ^^

                              j'ai homi un détail assez important, juste avant le while, met un sheets("feuil2").range("A1").select par exemple.

                              et en me relisant, j'ai fai également une erreur, et je m'en excuse

                              if sheets("feuil1").cells(1,1)=var then --> 'faux'
                              if sheets("feuil1").cells(numeroligne,1)=var --> 'vrai'

                              Pour la ligne :

                              while activecell.cells(1,1) <> empty
                              --> tant que la cellule active est différente de vide

                              ActiveCell.Offset(1, 0).Activate (à écrire juste avant le wend)
                              --> active la cellule suivante vers le bas de 1 ligne 0 colonne (donc la suivante)

                              Mais petite précision, pour confirmer si j'ai bien compri ta demande :

                              tu a une valeur que tu saisi en feuille 2
                              cette valeur tu la recherche dans un tableau situé en feuille 1 sur la colonne A sur toute les ligne c bien sa?
                              et ensuite si par exemple A1 = valeur saisie, tu recopi la ligne sur la feuille 2? je crois m'être avancé tro vite dans le code tout à l'heure
                              1. Excusez moi d'avoit été si long, mais quand la direction appel on répond ^^

                                Donc, après test aucun résultat, pas de message d'erreur mais seulement du vide. Surement est-ce du à une mauavise compréhension de ma part ce dont je ne doute pas :D.

                                Voilà donc je vais essayer de mieux comprendre la macro pour éviter de bêtes erreurs.

                                Donc on fixe la variable, pas de soucis,
                                pour le If pas de problème,

                                les seules choses qui me "gène" sont les 2 activecell. Je ne vois pas trop quoi en faire et le but ^^.

                                Encore merci pour la ou les futures réponses,

                                Gotts
                                1. j'ai été un peu long à écrire le message.. mais te satisfait t'il?
                                  1. Bonjour,

                                    Je te dis ça dans une minute le temps de l'adapter et de le tester,

                                    Merci par avance,

                                    Gotts
                                2. Déjà merci pour la réponse,

                                  malheureusement un simple SI ne suffira pas ^^.

                                  Non en fait ce que je souhaite c'est afficher dans ma colonne A de ma feuille 2 les noms de ma colonne A de ma feuille 1 en fonction des résultats trouvés dans ma colonne AV (feuil1). Résultat que l'on trouve grâce à une recherche en cellule D3 (feuil2).

                                  Pour donner un exemple:

                                  Je recherche la valeur 12 en D3 feuille 2
                                  La macro recherche toutes les cellules en colonne AV (feuil1) qui contiennent la valeur 12 et recopie la valeur de la colonne A (de la même ligne que celle ou la valeur 12 a été trouvé) (feuil1) en colonne A (feuil2).

                                  Voilà je sais pas si c'est bien plus clair, mais ce n'est pas forcément évident à expliquer surtout que je ne peux pas vous transmettre le fichier qui ne contient ,malheureusement, que des données confidentielles :(.
                                  1. Bonjour Gotts,

                                    As-tu essayer de mettre le contenu de la cellule sous une variable? ainsi tu n'as plus qu'à tester sur ta variable.

                                    Sous la forme

                                    dim var as string
                                    dim numeroligne as integer

                                    var = sheets("feuil2").range("D3")


                                    ensuite tu effectue la condition pour savoir si la cellule située en feuille 2 est identique à var, et si cest la cas, tu copie.

                                    numeroligne = 1

                                    while activecell.cells(1,1) <> empty

                                    if sheets("feuil1").cells(1,1)=var then
                                    sheets("feuil2").cells(numeroligne,1)=sheets("feuil1").cells(numeroligne,1)
                                    end if

                                    numeroligne = numeroligne +1

                                    ActiveCell.Offset(1, 0).Activate
                                    wend

                                    Je précise que je ne suis pas un expert, mais si je peux essayer d'aider j'essai.
                                    Si je n'ai pas été assez clair, hésite pas à me le dire

                                    Bon test ^^

                                    Necro27
                                    1. Salut,

                                      Je ne sais si j'ai tout compris, mais si tu veux afficher sur la m^eme ligne la valeur de la plage en AV:AV référencée en D3

                                      tu peux le résoudre avec une formule que tu copis en A2 par exemple et que tu incrémente vers le bas

                                      =SI(Feuil1!AV2=Feuil2!$D$3;Feuil1!AV2;"")

                                      si tu le veux en VBA dès que j'ai un moment je t'écris un code, si personne ne l'a fait entre temps

                                      A+
                                      Mike-31

                                      Un problème sans solution est un problème mal posé  (Einstein)