Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Extraire des données d'une base

3 réponses
Avatar
Céline06
Bonsoir à tous,
Voici mon problème. J'ai une base de données que j'essaye de lier à un bon
de commande. Dans la base, je voudrais, lorsque je mets une croix (par
exemple) dans une colonne, que l'ensemble des données de la ligne
correespondante soit recopiées dans le bon de commande. La difficulté c'est
que chaque donnée (nom, prenom, adresse ....) doit être recopiée dans une
cellule bien precise et qu'une cellule doit pouvoir contenir sucessivement
diverses données.
J'espère que je suis claire mais un exemple s'impose surement.
Si la colonne 1 comprend les noms : A1 = Dupond, A2 = Durand et B doit
recevoir des croix. Si B1="x" alors Dupond doit être recopié dans la cellule
A1 de la feuil2. Par contre, si B2="X" (et donc B1="") alors Durand doit être
recopié en A1Feuil2.
Quelle formule dois je utiliser?
Merci pour vos lumières.

3 réponses

Avatar
Daniel
Bonsoir.
Si j'ai bien compris, essaie :
=INDEX(Feuil1!A1:A100;EQUIV("x";Feuil1!B1:B100;0);1)
Cordialement.
Daniel
"Céline06" a écrit dans le message de
news:
Bonsoir à tous,
Voici mon problème. J'ai une base de données que j'essaye de lier à un bon
de commande. Dans la base, je voudrais, lorsque je mets une croix (par
exemple) dans une colonne, que l'ensemble des données de la ligne
correespondante soit recopiées dans le bon de commande. La difficulté
c'est
que chaque donnée (nom, prenom, adresse ....) doit être recopiée dans une
cellule bien precise et qu'une cellule doit pouvoir contenir sucessivement
diverses données.
J'espère que je suis claire mais un exemple s'impose surement.
Si la colonne 1 comprend les noms : A1 = Dupond, A2 = Durand et B doit
recevoir des croix. Si B1="x" alors Dupond doit être recopié dans la
cellule
A1 de la feuil2. Par contre, si B2="X" (et donc B1="") alors Durand doit
être
recopié en A1Feuil2.
Quelle formule dois je utiliser?
Merci pour vos lumières.




Avatar
GVentre
Bonjour Céline06,

Je ne suis pas sûr d'avoir très bien compris la question mais essai ceci:

Sub CopieDonnee()

Dim Cell, MaPlageX As Range
Set MaPlageX = Range("C1:C10") 'à adpater

For Each Cell In MaPlageX
If Cell = "x" Then
Cell.Offset(0, 2) = Cell.Offset(0, -2)
Cell.Offset(0, 3) = Cell.Offset(0, -1)
End If
Next

End Sub

Cela recopie les données de An et Bn, en Dn et En, si en Cn tu as "x" où
n est le numéro de ligne.
Si j'ai mal compris, je peux adapter.

Cordialement,

GVentre



Merci, c'est tout a fait ca que je cherchais.
Par contre, j'avais pensé egalement a faire la même chose par le biais d'une
macro et j'ai tenté d'en mettre une au point.
Ca donne ca (ne faites pas attention aux coordonnées des cellules qui n'ont
plus rien a voir avec mon exemple precedent):
If Range("C2") = "x" Then
Range("A2").Select
Selection.Copy
Range("E1").Select
ActiveSheet.Paste
Range("B2").Select
Application.CutCopyMode = False
Selection.Copy
Range("E2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
If Range("C3") = "x" Then
Range("A3").Select
Selection.Copy
Range("E1").Select
ActiveSheet.Paste
Range("B3").Select
Application.CutCopyMode = False
Selection.Copy
Range("E2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
End Sub
Je l'ai faite pour la recopie de 2 lignes 1 et 2 des colonnes A et B et je
me demandais comment faire pour faire la même chose avec un nombre étendu de
lignes et de colonne (en faite au lieu de mettre des coordonnées precises
comme A1 ou A2, je voudrais pouvoir dire "si dans la colonne "C" il y a "x"
alors tu recopie la ligne qui est devant).
Merci






Avatar
Céline06
Merci beaucoup. Juste un petit detail par contre, est ce que tu peux me dire
quoi changer si je veux que An et Bn soient recopié dans les cellules D1 et
E1 (et plus Dn et En) si il y a "X" dans Cn.

De plus (mais t'embétes pas avec cette question si tu peux pas), est ce
qu'il est possible de recopié An et Bn (si "x" dans Cn) dans Dn et En mais
sans sauter de ligne si par exemple la croix est dans C2 et que C1 est vide?

Merci beaucoup en tout cas pour ta reponse.


Bonjour Céline06,

Je ne suis pas sûr d'avoir très bien compris la question mais essai ceci:

Sub CopieDonnee()

Dim Cell, MaPlageX As Range
Set MaPlageX = Range("C1:C10") 'à adpater

For Each Cell In MaPlageX
If Cell = "x" Then
Cell.Offset(0, 2) = Cell.Offset(0, -2)
Cell.Offset(0, 3) = Cell.Offset(0, -1)
End If
Next

End Sub

Cela recopie les données de An et Bn, en Dn et En, si en Cn tu as "x" où
n est le numéro de ligne.
Si j'ai mal compris, je peux adapter.

Cordialement,

GVentre



Merci, c'est tout a fait ca que je cherchais.
Par contre, j'avais pensé egalement a faire la même chose par le biais d'une
macro et j'ai tenté d'en mettre une au point.
Ca donne ca (ne faites pas attention aux coordonnées des cellules qui n'ont
plus rien a voir avec mon exemple precedent):
If Range("C2") = "x" Then
Range("A2").Select
Selection.Copy
Range("E1").Select
ActiveSheet.Paste
Range("B2").Select
Application.CutCopyMode = False
Selection.Copy
Range("E2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
If Range("C3") = "x" Then
Range("A3").Select
Selection.Copy
Range("E1").Select
ActiveSheet.Paste
Range("B3").Select
Application.CutCopyMode = False
Selection.Copy
Range("E2").Select
ActiveSheet.Paste
Application.CutCopyMode = False
End If
End Sub
Je l'ai faite pour la recopie de 2 lignes 1 et 2 des colonnes A et B et je
me demandais comment faire pour faire la même chose avec un nombre étendu de
lignes et de colonne (en faite au lieu de mettre des coordonnées precises
comme A1 ou A2, je voudrais pouvoir dire "si dans la colonne "C" il y a "x"
alors tu recopie la ligne qui est devant).
Merci