Copie lignes entre feuilles avec condition et sans doublon
Bonjour bonjour oh Excel-practiciens!
Ca fait quelques jours que je navigue à travers le forum afin de trouver une solution à mon étape où je bloque et j'ai finalement décidé de franchir le pas et de m'inscrire à ce forum qui en a aidé bien d'autres avant moi. Je tente donc ma chance
Dans le cadre d'un travail de bachelor en économie (suis Suisse forcément...), je dois réaliser un fichier Excel (donc je ne connaissais rien à VBA). Mon fichier Excel tire ses données d'une base de donnée Access avec une connexion permanente réactualisée très régulièrement. L'idée c'est que tout se fasse automatiquement à chaque fois qu'on actualise les données. J'ai réussi à établir la connexion et à récupérer exactement ce que je voulais via une requête créée sous Access donc aucun problème de ce côté là. Je le précise car j'ai trouvé des solutions pour des changements manuels mais pas pour des changements "en gros" après réactualisation totale.
L'idée (voir avec la première image):
La condition est en colonne 3. Si "02. Reçu à compléter" est inscrite en colonne 3 de la ligne, j'aimerais qu'il me copie les deux premières colonnes de la ligne concernée dans la feuille 2 "02. Reçu à compléter" qui a donc le même nom que la condition recherchée (pas grave si je dois changer pour plus de compréhension). J'aimerais qu'il ne reproduise pas les doublons (le no étant une ID unique, j'imagine qu'il faut chercher de ce côté) et qu'il me supprime la ligne dans la feuille 2 si elle n'est plus "02. Reçu à compléter" colonne 3 dans la feuille "Données base". Il ne faudrait pas que chaque ligne soit supprimée et réinscrite à chaque fois car l'utilisateur finale va compléter des éléments dans les colonnes 3 à 15 de la feuille 2. A chaque fois que je réactualise, j'aimerais donc les dossiers classés par le numéro (si possible), réactualisé afin de savoir si la ligne a toujours le critère sur la feuille 1 et en ayant aucune ligne vide si la ligne a du être supprimée car ne répondant plus au critère (si possible également, sinon que ça complète dans la première ligne vide disponible pour la prochaine ligne qui correspondra au critère).
Actuellement j'ai réussi à avoir les trois premières colonnes copiées (respectivement j'imagine que ça copie toutes les colonnes de la ligne mais je n'aimerais que les deux premières). Aucune idée pour les doublons et la suppression des lignes qui ne correspondent plus aux critères. Actuellement à chaque fois que j'actualise les données, ça me recopie les trois lignes avec la condition "02. Reçu à compléter" à la suite.
Et j'aimerais faire pareil avec deux autres conditions également en colonne 3 avec "03. Analyse" et "07. Prêt - en travail" mais je pense pouvoir y arriver facilement dès que je saurai comment faire avec le premier cas.
Voici en image où j'en suis:
J'ai pioché à gauche à droite des bouts de codes que j'ai modifié et j'ai obtenu le résultat suivant:
Voici le code:
Private Sub Worksheet_Change(ByVal Target As Range)
Dim strSearch
Dim rg As Range, rgF As Range
Dim i As Integer
Application.ScreenUpdating = False
Set rg = Sheets("Données base").Cells(1).CurrentRegion
For i = 1 To rg.Rows.Count
Set rgF = rg.Rows(i).Find("02. Reçu à compléter", , xlValues, xlPart)
If Not rgF Is Nothing Then
rg.Rows(i).Copy Sheets("02. Reçu à compléter").Range("A60000").End(xlUp).Offset(1, 0)
Set rgF = Nothing
End If
Next i
Application.ScreenUpdating = True
End SubJe ne sais pas du tout si je suis parti dans la bonne direction et là je bloque vraiment pour la suite. Cela fait plusieurs jours que j'essaie de trafiquer des autres bouts retrouvés à gauche et à droite mais c'est le premier qui m'a donné un début de résultat. Je viens donc très humblement demander votre aide.
Merci d'avance et je reste à disposition pour toute info complémentaire!
Mark
Bonjour,
pour ce genre de cas simple - copie de données sans doublon - l'idéal est le filtre avancé !
L'astuce pour le tester manuellement : se placer sur la feuille de destination avant de l'appeler …
Une fois le résultat escompté obtenu, activer le Générateur de macros et reproduire l'opération : un code est livré sur un plateau !
Bonjour,
Merci, je vais aller creuser de ce côté!