Rappatriement de données d'une feuille à l'autre
Bonjour,
Je débute à peine sous excel au boulot et j'aimerais faire une bonne grosse base de données. Par soucis de simplicité, J'aimerais ecrire une chose dans une feuille et que la cellule soit copiée sur une autre feuille.
Bon je vais mettre un exemple très grossier :
"=SI [[cellule1]feuille1]=[[cellule2]feuille2] alors [[cellule3]feuille1]=[[cellule4]feuille2]" et vice versa.
Est ce possible ?
J'aurais une autre question mais je la poserais dans un autre sujet.
Bonjour,
peux-tu expliciter ton vice et versa ?
Bonjour h2so4,
Le vice versa serait :
- d'une part de rentrer quelque chose sur la feuille 1 et que ça soit rentré sur la feuille 2
- et d'autre part, rentrer quelque chose sur la feuille 2 et que ça soit rentré sur la feuille 1.
Merci
Bonjour,
ce ne sera pas possible avec une formule, mais c'est possible avec une macro événementielle.
un exemple de macro événementielle qui copie chaque modification d'une feuille dans l'autre.
Rebonjour H2SO4
En fouillant dans le forum, je suis tombé sur un topic auquel vous avez répondu et qui pourrait me convenir. Mais le soucis avec ce code est que mon tableau d'origine n'est pas formaté pareil que celui que je désire.
Sub maj()
Set wsi = Sheets("mises à jour")
Set wso = Sheets("Elèves")
dli = wsi.Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne de wsi
dlo = wso.Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne de wso
For i = 2 To dli 'on parcourt toutes les lignes de wsi
Set re = wso.Range("A2:A" & dlo).Find(wsi.Cells(i, 1), lookat:=xlPart) 'on cherche le numéro de dossier dans wso
If re Is Nothing Then ' si non trouvé on ajoute une nouvelle ligne
lam = dlo + 1 'lam = ligne qui doit recevoir la modif
Else
lam = re.Row ' ligne à modifer est la ligne dans laquelle on a trouvé le n° de dossier
End If
wsi.Rows(i).Copy wso.Cells(lam, 1) 'on copie la ligne de wsi vers wso
Next i
End Sub
Cet exemple était dans le topic suivant : https://forum.excel-pratique.com/excel/mise-a-jour-d-une-feuille-a-partir-d-une-autre-feuille-t57031.html
On peut oublier le vice versa. Je suis désolé je suis vraiment une bille pour les macro ....
J'aimerais vous montrer ma base de données mais elle contient des données confidentielles et d'autre part, le fichier pèse 8 Mo
Merci d'avance !
bonjour,
merci de joindre un fichier avec la structure, quelques données bidons et ce que tu attends de la macro.
Merci de tes réponses
Je te transferais l'exemple que tu me demandes lundi car je ne suis plus au boulot pour pouvoir le faire.
Merci beaucoup en tout cas !
Bonne soirée !
Bonjour
Je récapitule tout, je souhaiterais pouvoir transférer les données des feuilles "Biothèque" vers la feuille "Tableau général" via un bouton situé sur la feuille "tableau général" tout ça grâce à la reconnaissance du numéro du patient (et parfois des gènes (UL97 / UL54 / UL27) ).
Je n'ai mis qu'un seul exemple dans le tableau mais il faut savoir qu'il y a plus de 2000 lignes de patient dans le tableau et il ne sont que rarement dans l'odre par rapport aux boîtes de biothèques.
Le tableau est déjà pas mal rempli, si je mets une macro dedans, risquerais-je de perdre des données ?
Merci d'avance.
Je ne sais pas si je me suis bien exprimé
re-Bonjour,
vu la manière dont tes données sont organisées c'est un peu la galère pour automatiser. chaque feuille biothèque a une structure différente.
il conviendrait également de déterminer dans quelles feuilles sont introduites quelles données et dans quelles feuilles les recopier.
il manque une colonne (nombre de tubes purifiés, dans la feuille tableau général)
que faire quand un numéro n'existe pas dans le tableau général ?
que faire quand il y a plus de tubes que de places dans le tableau général ?
j'ai fait une ébauche de programme, qui traite les 2 premières biothèques,
les données des feuilles biothèques resteront inchangées, par contre tu as un risque de perdre des données du tableau général, si la données copiée n'est pas présente dans la feuille biothèque.
à tester sur une copie, lancer la macro maj par alt-f8
Sub maj()
Set wso = Sheets("tableau général")
dlo = wso.Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne de wso
'traitement pour la feuille Biothèque Echantillons -80°C
Set wsi = Sheets("Biothèque Echantillons -80°C")
dli = wsi.Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne de wsi
For i = 4 To dli 'on parcourt toutes les lignes de wsi
clé = wsi.Cells(i, "C")
If clé <> "" Then 'numéro à chercher n'est pas ""
Set re = wso.Range("D2:D" & dlo).Find(clé, lookat:=xlWhole) 'on cherche le numéro de dossier dans wso 'on cherche le numéro de dossier dans wso
If re Is Nothing Then ' si non trouvé on ajoute une nouvelle ligne
dlo = dlo + 1
lam = dlo 'lam = ligne qui doit recevoir la modif
wsi.Range("C" & i & ":F" & i).Copy wso.Cells(lam, 1) 'copie nom prénom dna gims et date prélèvement
wsi.Cells(i, "I").Copy wso.Cells(lam, "E")
Else
lam = re.Row ' ligne à modifier est la ligne dans laquelle on a trouvé le n° de dossier
End If
ne = wso.Cells(lam, "T") + 1 ' ne = nombre d'échantillons pour cette biothèque
If ne > 5 Then MsgBox "trop d' échantillons pour " & wso.Cells(lam, 4): Exit Sub
With wso.Cells(lam, "T")
.Value = ne ' on met à jour le nombre d'échantillons
With .Offset(0, (ne - 1) * 7 + 1) ' on se positionne sur la première cellule pour recevoir les données de cet échantillon
.Cells(1, 1) = wsi.Cells(i, "A") ' numéro de boite
.Cells(1, 2) = wsi.Cells(i, "B") ' position
.Cells(1, 3) = wsi.Cells(i, "H") ' quantité prélevée
' à compléter
End With
End With
End If
Next i
Set wsi = Sheets("Biothèque Extraits -20°C")
dli = wsi.Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne de wsi
For i = 2 To dli 'on parcourt toutes les lignes de wsi
clé = wsi.Cells(i, "C")
If clé <> "" Then 'numéro à chercher n'est pas ""
Set re = wso.Range("D2:D" & dlo).Find(clé, lookat:=xlWhole) 'on cherche le numéro de dossier dans wso
If re Is Nothing Then ' si non trouvé on ajoute une nouvelle ligne
dlo = dlo + 1
lam = dlo 'lam = ligne qui doit recevoir la modif
wsi.Range("A" & i & ":B" & i).Copy wso.Cells(lam, 1) 'copie nom prénom gims
wsi.Cells(i, "C").Copy wso.Cells(lam, "D")
Else
lam = re.Row ' ligne à modifier est la ligne dans laquelle on a trouvé le n° de dossier
End If
ne = wso.Cells(lam, "BE") + 1 ' ne = nombre d'échantillons pour cette biothèque
If ne > 1 Then MsgBox "trop d' échantillons pour " & wso.Cells(lam, 4): Exit Sub
With wso.Cells(lam, "BE")
.Value = ne ' on met à jour le nombre d'échantillons
With .Offset(0, (ne - 1) * 7 + 1) ' on se positionne sur la première cellule pour recevoir les données de cet échantillon
.Cells(1, 1) = wsi.Cells(i, "F") ' numéro de boite
.Cells(1, 2) = wsi.Cells(i, "G") ' position
.Cells(1, 3) = wsi.Cells(i, "E") ' quantité prélevée
' à compléter
End With
End With
End If
Next i
Set wsi = Sheets("Biothèque Purifiats -20°C")
dli = wsi.Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne de wsi
For i = 2 To dli 'on parcourt toutes les lignes de wsi
'à compléter
Next i
Set wsi = Sheets("Biothèque +4°C")
dli = wsi.Cells(Rows.Count, 1).End(xlUp).Row ' dernière ligne de wsi
For i = 2 To dli 'on parcourt toutes les lignes de wsi
'à compléter
Next i
End Sublibre à toi de compléter la macro là où cela est nécessaire.
Ok merci, si j'arrive à corriger la mise en forme et la macro complémentaire, pourras tu vérifier si tout es bon ?
Merci beaucoup en tout cas