[VBA] Excel- Copier cellulesous condition
Résolu/Fermé
Gotts
-
15 juin 2009 à 10:40
Mike-31 Messages postés 18392 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 mai 2025 - 15 juin 2009 à 15:26
Mike-31 Messages postés 18392 Date d'inscription dimanche 17 février 2008 Statut Contributeur Dernière intervention 1 mai 2025 - 15 juin 2009 à 15:26
A voir également:
- [VBA] Excel- Copier cellulesous condition
- Excel cellule couleur si condition texte - Guide
- Liste déroulante excel - Guide
- Comment copier une vidéo youtube - Guide
- Word et excel gratuit - Guide
- Si et excel - Guide
19 réponses
Mike-31
Messages postés
18392
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 mai 2025
5 128
15 juin 2009 à 11:04
15 juin 2009 à 11:04
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)
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)
necro27
Messages postés
160
Date d'inscription
jeudi 28 mai 2009
Statut
Membre
Dernière intervention
11 février 2011
8
15 juin 2009 à 11:19
15 juin 2009 à 11:19
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
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
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 :(.
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 :(.
necro27
Messages postés
160
Date d'inscription
jeudi 28 mai 2009
Statut
Membre
Dernière intervention
11 février 2011
8
15 juin 2009 à 11:24
15 juin 2009 à 11:24
j'ai été un peu long à écrire le message.. mais te satisfait t'il?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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
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
necro27
Messages postés
160
Date d'inscription
jeudi 28 mai 2009
Statut
Membre
Dernière intervention
11 février 2011
8
15 juin 2009 à 12:13
15 juin 2009 à 12:13
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
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
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
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
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
15 juin 2009 à 12:57
15 juin 2009 à 12:57
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é.
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é.
Mike-31
Messages postés
18392
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 mai 2025
5 128
15 juin 2009 à 13:25
15 juin 2009 à 13:25
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)
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)
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
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
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
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
Mike-31
Messages postés
18392
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 mai 2025
5 128
15 juin 2009 à 13:44
15 juin 2009 à 13:44
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)
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)
Feuille1 = Portefeuille (celle avec les données)
Feuille2 = feuil2 (Celle qui contient D3)
Merci
Gotts
Feuille2 = feuil2 (Celle qui contient D3)
Merci
Gotts
Mike-31
Messages postés
18392
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 mai 2025
5 128
15 juin 2009 à 14:07
15 juin 2009 à 14:07
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)
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)
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
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
lermite222
Messages postés
8724
Date d'inscription
dimanche 8 avril 2007
Statut
Contributeur
Dernière intervention
22 janvier 2020
1 191
15 juin 2009 à 14:41
15 juin 2009 à 14:41
Bnjour Mike,
Faut mettre la macros dans un module général.
A+
Faut mettre la macros dans un module général.
A+
Mike-31
Messages postés
18392
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 mai 2025
5 128
15 juin 2009 à 14:48
15 juin 2009 à 14:48
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)
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)
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
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
Mike-31
Messages postés
18392
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
1 mai 2025
5 128
15 juin 2009 à 15:26
15 juin 2009 à 15:26
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)
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)