[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. 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)
    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. 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. 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. 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. 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. 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. 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. 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. 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. 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. 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. Feuille1 = Portefeuille (celle avec les données)
                          Feuille2 = feuil2 (Celle qui contient D3)

                          Merci

                          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. 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. Contributeur
                                Bnjour Mike,
                                Faut mettre la macros dans un module général.
                                A+
                                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. 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. 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)