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

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.
 

ericlb56

XLDnaute Nouveau
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

  • MODELE CLASSEUR POUR TEST DE MACRO.xlsm
    12.2 KB · Affichages: 3

GALOUGALOU

XLDnaute Accro
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

  • foot v1.xlsm
    70.3 KB · Affichages: 7

ericlb56

XLDnaute Nouveau
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é) .
 

ericlb56

XLDnaute Nouveau
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.
 

GALOUGALOU

XLDnaute Accro
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

  • Copie de foot v2.xlsm
    70.7 KB · Affichages: 5

GALOUGALOU

XLDnaute Accro
bonjour
un classeur avec macro
j'attend votre retour pour des éventuelles modifications
particularite
pour les pro il n'y a pas de milieu dans la feuille destination mais il y en a dans la saisie des données
cordialement
galougalou
 

Pièces jointes

  • Copie de foot v3.xlsm
    74.4 KB · Affichages: 6

GALOUGALOU

XLDnaute Accro
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

  • Copie de foot v4.xlsm
    83.6 KB · Affichages: 9

ericlb56

XLDnaute Nouveau
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
 

GALOUGALOU

XLDnaute Accro
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
 

ericlb56

XLDnaute Nouveau
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
 

GALOUGALOU

XLDnaute Accro
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
 

Discussions similaires

Statistiques des forums

Discussions
314 628
Messages
2 111 333
Membres
111 103
dernier inscrit
Maxime@mar