Macro copie ligne par rapport a une donnée dans une colonne

Fermé
nico006 Messages postés 2 Date d'inscription jeudi 5 mars 2015 Statut Membre Dernière intervention 5 mars 2015 - 5 mars 2015 à 12:26
nico006 Messages postés 2 Date d'inscription jeudi 5 mars 2015 Statut Membre Dernière intervention 5 mars 2015 - 5 mars 2015 à 14:51
Voila

j'ai un fichier excel avec 4 onglet

dans le 1er onglet qui se nomme Base j'ai 10 colonne qui m'intéresse
"S" "F" "C" "Sa" "Bo" "Si1" "Si2" "Civ" "Ti1" "Ti2"

j'ai a la suite 3 autre onglet qui se nomme "Bo" "BoSa" "BoSaC"

ce que je souhaiterai c'est implémenté la ligne correspondant du fichier de basse vers l'un de ces 3 onglets.

ex:
si dans le fichier de base la ligne 3 contient des données dans les colonnes "Sa" et "Bo"
la ligne 3 devra se copier dans l'onglet "BoSa"

si dans le fichier de base la ligne 15 contient des données dans les colonnes "Bo"
la ligne 15 devra se copier dans l'onglet "Bo"

si dans le fichier de base la ligne 21 contient des données dans les colonnes "Bo", "Sa" et "C"
la ligne 21 devra se copier dans l'onglet "BoSaC"

Voila je galère a mort parce je comprend pas tout sur les macro

Si vous avez une idée

merci tt le monde
A voir également:

1 réponse

via55 Messages postés 14512 Date d'inscription mercredi 16 janvier 2013 Statut Membre Dernière intervention 18 janvier 2025 2 741
5 mars 2015 à 14:30
Bonjour

En supposant les colonnes de Base de A à J et uyn ligne de titres dans les autres feuilles, style de macro possible, à adapter au besoin :
Sub recopie()
Dim Ligne As Long
Dim Ligne2 As Long

'dernière ligne remplie en colonne 1 de base
Ligne = Sheets("Base").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row

'boucle sur les lignes 2 à derniere de base
For n = 2 To Ligne
copier = 0
' si 3 données feuille=BoSac et ligne2=première ligne vide de BoSaC
If Sheets("Base").Range("C" & n) <> "" And Sheets("Base").Range("D" & n) <> "" And Sheets("Base").Range("E" & n) <> "" Then
feuille = "BoSaC"
Ligne2 = Sheets(feuille).Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 1
copier = 1

' sinon  si 2 données feuille=BoSa et ligne2=première ligne vide de BoSa
ElseIf Sheets("Base").Range("C" & n) = "" And Sheets("Base").Range("D" & n) <> "" And Sheets("Base").Range("E" & n) <> "" Then
feuille = "BoSa"
Ligne2 = Sheets(feuille).Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 1
copier = 1

' sinon si 1 donnée feuille=BoSac et ligne2=première ligne vide de Bo
ElseIf Sheets("Base").Range("C" & n) = "" And Sheets("Base").Range("D" & n) = "" And Sheets("Base").Range("E" & n) <> "" Then
feuille = "Bo"
Ligne2 = Sheets(feuille).Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row + 1
copier = 1
End If
'si copier =1 (3, 2 ou 1 colonnes remplies)
If copier = 1 Then
' selection ligne dans Base et copie de la ligne
Sheets("Base").Select
Range(n & ":" & n).Select
Selection.Copy
'selecttion ligne en feuille concernée etcollage de la ligne
Sheets(feuille).Select
Range("A" & Ligne2).Select
ActiveSheet.Paste
End If

Next n
End Sub


Cdlmnt
0
nico006 Messages postés 2 Date d'inscription jeudi 5 mars 2015 Statut Membre Dernière intervention 5 mars 2015
5 mars 2015 à 14:51
Super je te remercie je vais tester ca
0