XL 2019 Copie de ligne d'une feuille à une autre avec changement de colonne selon 1 condition

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

ericlb56

XLDnaute Nouveau
Bonjour,
j'ai beaucoup parcouru le forum à la recherche d'une réponse, mais en vain.
J'ai un tableau sur la feuille 1 avec des données en ligne et je voudrais copier les lignes sur la feuille 2 (dans la 1ère ligne vide) en affectant les colonnes selon que la colonne "K" contient un 1 ou pas.
Si 1 ou " " en colonne K, copie de ligne feuille 1 colonne "A" "D" "E" "B" "G"en feuille 2 colonne "A" "B" "C" "D" "E"
Si seulement 1 en colonne K copie de ligne feuille 1 colonne "A" "D" "E" "B" "G"en feuille 2 colonne "A" "B" "C" "D" "E" + "L" en "AO"
Si " " en colonne K copie de ligne feuille 1 colonne "A" "D" "E" "B" "G"en feuille 2 colonne "A" "B" "C" "D" "E" + "L" en "AU"
Ca semble tellement simple que je suis perdu dans tous les essais que j'ai réalisé.
Si quelqu'un peut m'aider, ce serait vraiment génial.
 
C'est vrai qu'avec quelques mots plutôt abstrait ce n'est pas facile d'y comprendre quelque chose.
J'ai reconstruit un classeur avec la feuille 1 contenant les données à envoyer vers la feuille 2 en répartissant les données en fonction de la colonne "L".
J'espère que ce classeur aux données fictive sera assez parlant pour étayer mon problème.
Cordialement,
ELB
 

Pièces jointes

bonjour ericclb56
un petit essai avec des formules
une particularité
j'ai verrouillé la feuille 2 à l'activation pour protéger les formules
je n'ai pas trouvé la reference amateur professionnelle pour pour differencier les joueurs, il manque donc une condition dans les formules
cordialement galougalou
 

Pièces jointes

Tout d'abord, merci de vous intéresser à mon problème, c'est vrai qu'avec des formules ça pourrait le faire mais je voudrais le faire par macro. La raison: intégrer cette macro à d'autres macros pour le remplissage de toute la feuille (onglet masqué) .
 
Pour la différence amateur pro, il y a juste un "1" colonne "L" de la feuille 1 pour indiquer que c'est un pro. L'autre petite chose importante, c'est que je voudrais avoir les données dans la feuille 2 sans ligne vide, ou plutôt qu'elle soit reprises dans la ¹ere ligne vide.
 
bonjour ericlb56
ok
donc j'ai commencé par une macro qui ventile les informations généraliste. (couleur violette) c'est le plus facile
pour les informations dans les cellules orange c'est un peu plus compliqué. ce soir j'essaierai de la maitriser.
voici déjà un début de solution regarder si ça correspond à vos attentes
cordialement
la feuille2 est vérouillé, mais ce choix peut être annulé
cordialement
galougalou
 

Pièces jointes

rajout des colonnes milieu pour pro

le fonctionnement des macros nécessitent que les infos saisies dans la feuille 2 et la feuille 1 soit totalement identique a la virgule près et avec la même casse.
pour cette raison je vous propose la validation en colonne "d et e" de la feuille 1 par une boite de dialogue qui fait reference a la feuille liste, et se declenche par un clic dans la cellule.
dans la feuille 2 une formule appelle la même information dans la feuille liste
de cette manière la macro fonctionnera parfaitement
cordialement
galougalou
 

Pièces jointes

Bonsoir galougalou,
vous avez écrit ce code exactement comme j'aurais pu le demander, c'est extraordinaire, j'ai l'impression que vous avez lu mon raisonnement😉
Ce code me convient parfaitement, maintenant, il me reste à l'adapter à mon "vrai" fichier qui n'a rien à voir avec le foot ou le sport et à l'implémenter pour le remplissage d'autres colonnes de mon classeur 2.
J'ai commencé, en suivant votre code, pour l'instant ça fonctionne, mais avant de marquer ce sujet comme résolu, je vais essayer de terminer mon projet.
J'aurai peut-être encore besoin de votre précieuse aide.
Cordialement,
ERIC
 
bonjour eric
j'ai concu ce classeur sans etre certain que cela pouvait vous convenir. content de vous savoir satisfait.
mais a l'analyse le début du code ne convient pas
je vous propose de remplacer

Sub ECRIREDANSNOUVEAUTABLEAU()
Dim po As Range
Dim ppo As Range
Dim cell As Range
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False

ActiveSheet.Unprotect
Sheets("Feuil2").Select



par


Sub ECRIREDANSNOUVEAUTABLEAU()

Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False

Sheets("Feuil2").Select
ActiveSheet.Unprotect

cordialement
galougalou
 
Merci galougalou,
voici mon code, qui fonctionne parfaitement, mais a l'exécution un peu longue….
Peut-être une idée pour réduire le temps de traitement?

Sub Edition_bordereaudecollecte()
Dim Pro As Range
Dim cell As Range
Application.ScreenUpdating = False
Application.DisplayStatusBar = False
Application.Calculation = xlManual
Application.EnableEvents = False
ActiveSheet.DisplayPageBreaks = False
Set Pro = Range("A2:A1000")
For Each cell In Pro
cell = LCase(cell)
Next
Sheets("bordereau de collecte").Select
LI = Sheets("piquage").Cells(15000, 1).End(xlUp).Row

Sheets("bordereau de collecte").Select

Sheets("bordereau de collecte").Range("A5:AX10000").ClearContents
Calculate
Ligne = 5
For i = 2 To LI
If UCase(Sheets("piquage").Range("A" & i)) <> "" Then


Cells(Ligne, 1) = Sheets("piquage").Cells(i, 1)
Cells(Ligne, 2) = Sheets("piquage").Cells(i, 4)
Cells(Ligne, 3) = Sheets("piquage").Cells(i, 5)
Cells(Ligne, 4) = Sheets("piquage").Cells(i, 2)
Cells(Ligne, 5) = Sheets("piquage").Cells(i, 7)
Cells(Ligne, 8) = "production"
Cells(Ligne, 9) = "PDI Classique(orphelin)"
Cells(Ligne, 10) = "Entrée libre"
Cells(Ligne, 16) = Sheets("piquage").Cells(i, 12)
Cells(Ligne, 17) = Sheets("piquage").Cells(i, 13)
'Cells(Ligne, 21) = Sheets("piquage").Cells(i, 16)

If Sheets("piquage").Cells(i, 11) = "1" Then
Cells(Ligne, 47) = "1"
Else: Cells(Ligne, 41) = "1"
End If
If Sheets("piquage").Cells(i, 12) = "" And Sheets("piquage").Cells(i, 12) = "" Then
Cells(Ligne, 11) = "Limite Voirie"
Else: Cells(Ligne, 11) = "Dans la propriété"
End If
If Sheets("piquage").Cells(i, 6) = "0" Then
Cells(Ligne, 21) = "0"
Else: Cells(Ligne, 21) = "1"
End If
If Sheets("piquage").Cells(i, 6) = "1" Then
Cells(Ligne, 22) = "1"
Else: Cells(Ligne, 22) = "0"
End If
If Sheets("piquage").Cells(1, 1) = "saint barthelemy" Then
Cells(Ligne, 24) = "5615003"
End If
End If
Range("A5:A65000").SpecialCells(xlCellTypeBlanks).EntireRow.Delete
Ligne = Ligne + 1
Next
'End If
Application.ScreenUpdating = True
Application.DisplayStatusBar = True
Application.Calculation = xlAutomatic
Application.EnableEvents = True
ActiveSheet.DisplayPageBreaks = True
Call Mise_en_forme
End Sub

Cordialement,
ERIC
 
bonjour eric
en début du code
Dim Pro As Range
Dim cell As Range
est inutile. cela correspond à une partie de macro que j'ai supprimé.

en fin du code

essayer de mettre
Call Mise_en_forme

juste avant

Application.ScreenUpdating = True
j'essaierai votre code ce soir

cordialement
galougalu
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
324
Réponses
5
Affichages
474
Retour