Collé des plages à la suites des unes des autres
Bonjour à tous le forum ,
Je me permet de venir vers vous car j'ai besoin d'un petit coup de pouce pour continuer mon program .
J ai un classeur qui me sert à la gestion de commandes livrées . j'enregistre les éléments de chaque commande dans une tableau qui contient toutes les infos concernant les commandes de la journée , mais je doit ensuite les ventilées de manière
à sauvegarder ses infos pour chaque clients .
Ma question et que je voudrais pouvoir coller plusieurs plage de taille variable, ( de 1 à 8 colonne par commande ) sachant que
je peux avoir plusieurs commandes par clients et par jours , à la suite .
Voici un exemple de se que je souhaite obtenir à la final .
Pour la première journée je rentre la plage (B10:c122) de la feuille source je la copie et elle se colle en (B10:C122) dans la feuille de destination là pas de souci
la journée suivante à 2 commandes la plage sera donc (B10:k122) je souhaite que le collage commence en D10 dans la feuille de destination .
Effaçant la feuille source après chaque saisie ( d'où le départ en B10)pour enregistré les infos du clients suivants .
mais la collage écrases les infos précédemment enregistré .
il vas de soit que je vous joint un fichier avec les tout les éléments pour aider a voir plus claire car je ne suis pas sur que se soit très claire au niveaux des explications veuilles m'en excuser .
je n'est mis que les feuille indispensable pour alléger au maximum . Mais il faut regarder la 4ème feuille qui vous donneras le résultat final que je souhaite .
Vous remerciant par avance de vôtres aide et reste à disposition pour toutes questions où demande d'explications qui pourrais vous aider à me guider pour que je puisse avancer dans mon program
Amicalement à tous le forum
Bonjour à toutes et à tous ,
je me permet de revenir vers vous car ne voyant pas réponse de vôtres part je me poses les question suivantes:
1 si ma demande est claire
2 si quelqu'un est dessus où
en 3 si cela n'est pas possible à réaliser .
Je sais que je doit êtres patient mais je voudrais pouvoir avancé sur là suites du programme qui n'est guerre plu simples .
Je vous prie d'excuser cette démarche qui peut sembler impoli , mais il ne s'agit que d'un peux d'impatience c'est tout .
Je sais que vous faite comme vous voulez mais dite moi se qui cloche afin que je puisse avancer .
Merci à vous toutes et tous par avances et milles excuses pour mon impatience .
Amicalement NONO44
Bonjour nono44,
Pas du tout certain d'avoir tout compris. Un essai dans le fichier joint.
Bonjour le fil, bonjour le forum,
@MaPoire
Pomme dans un forum, poire dans un autre ! Mais le fruit est toujours bon !...
bonsoir Mapoire ,ThauThème
Tour d'abord merci à toi Mapoire pour cette réponse . et à toi thauThème pour l'humour il ne manque plus que les scoubidou bidou lol
Mapoire j'ai regarder ta proposition qui très intéressante et que j'essaye d'adapter à mon program réel .
le premier point qu'il faut déterminer c'est la zone à copier qui n'est pas de 100 colonnes et 122 lignes .
mais au minimum de 1colonne a 336 colonnes( voici le détail : 6 commandes de 8 articles sur 7jours = (6*8)*7=336) si je prend la maximum possible pour une semaine , avec les données que j'ai eu . il vas de soit que je vais pas faire un tableau de 336 colonnes dont je ne me servirais que d'une petites quantité à la final .
le but et de copier la plage qui est délimité par la dernière colonne est non touts les colonnes du tableau
se qui donnerais ("B8 : "J"122 ") "J" étant la variable que tu mis pour déterminé la " dernière colonne "
pourrait-tu me dire comme modifier cette ligne : Sheets("Détail Fiche Client").Range("b8:cw122") dans se sens .
le point suivant est la condition que tu as rajouter en cas que l'ont arrive en fin de tableau si j'ai bien compris :
If dercelldest.Column + (zonesource.Columns.Count - 1) > Range("be7").Column Then
MsgBox "Le collage dépasse la colonne "be-"> échec"
Else
zonesource.Copy dercelldest
dercelldest.Resize(111, zonesource.Columns.Count).Borders(xlEdgeRight).Weight = xlThick
.Parent.Activate
Sheets("Détail Fiche Client").Range("b11:cw122").ClearContents
End If
si au lieu de l'échec l'ont puisse rajouter 8 colonnes sur les 122 lignes en décalant vers la droite cela serait parfait .
et ont peux supprimé le dernière ligne du code car dans l'userform2 j'ai un bouton qui me permet d'effacer l'ensemble de la feuille source .
voilà pour l'instant . donne moi les procédure pour que réalise les modifications cela sera plus simple et me permettra d'apprendre et de comprendre le fonctionnement de ta macro .
je te remercie par avance du coup d main et te dit à bientôt j'espère . Amicalement nono44
Bonsoir Mapoire , le forum
se petit message pour savoir si tu vais vu mon dernier poste ,car comme je n'est pas de réponse cela m'étonne .
A moins bien sur que tu soit indisponible et que n'à pas le temps pour l'instant se que je comprend fort bien . si tu me donne juste des nouvelles se serais cool .
Merci d'avance .Amicalement Nono 44
Bonsoir ,Ma poire , ThauThème le forum .
je m'excuse d'insister, mais je juste savoir comme écrire en vba
Coller à partir de la première vide dans la feuille de destination .
et je voudrais juste modifier ta macro "Ma poire" .La partie à copier étant de taille variable .
il faudrait donc limiter la copie a la dernière colonne pleine . et non pas sur l'intégralité des colonnes de la feuille source.
Voilà c'est tout si vous pouvez me donner un coup de pouce se serait vraiment géniale .
Si vous avez des questions surtout n'hésiter pas
Amicalement NONO44
Bonsoir le forum
Coucou je suis là si quelqu'un peux m'aider à avancer sur mon projet .
je veux juste pouvoir coller en décaler les plages sélectionnées .
le nombres de lignes est de 122 lui ne bouge pas. Seul la taille de la varie qu'au niveau du nombre de colonnes .
le nombres de colonnes disponibles dans le tableau est de 100
exemple copie 1 : la plage b7 :C122 collage 1 en b7:C122
copie 2 : la plage B7: k122 collage 2 en D7: N122
c'est tout un petit coup de pouce svp .
je vous remet le ficher de base avec une explication en vert dans la partie du code où je crois qu'ils faut modifié .
vraiment désoler d'insister mais je voudrais avancer , mais mes essais ne fonctionne pas .
vous remerciant par avance je vous dit a bientôt .Amicalement nono44
Bonsoir le fil, bonsoir le forum,
Pas sûr d'avoir bien compris d'autant plus que tu ne nous dis même pas où trouver le code. À nous de nous débrouiller !?...
Essaie comme ça :
Private Sub CommandButton2_Click()
Dim wsSource As Worksheet
Dim wsDestination As Worksheet
Dim Adr As Range
Dim ColFin As Integer
Dim ColDebut As Integer
Dim C As Integer
Dim Rng As Range
Set wsSource = Sheets("Détail Fiche Client")
Set wsDestination = Sheets("FCI " & wsSource.[f6].Value)
ColFin = ColonneDebut(wsSource.Range("B10:CV10")) - 1
If wsSource.Cells(10, 2).Interior.ColorIndex = wsSource.Cells(10, ColFin).Interior.ColorIndex Then
ColDebut = 2
Else
For C = ColFin To 2 Step -1
If wsSource.Cells(10, C).Interior.ColorIndex = wsSource.Cells(10, ColFin).Interior.ColorIndex Then
ColDebut = C
Else
Exit For
End If
Next
End If
With wsDestination
Set Adr = IIf(.Range("B7") = "", .Range("B7"), .Cells(7, Application.Columns.Count).End(xlToLeft).Offset(0, 1))
Set Rng = wsSource.Range("B7", wsSource.Cells(122, ColFin))
Rng.Copy Adr
ColFin = .Range("B10").End(xlToRight).Column
.Range(.Cells(7, ColDebut + 1), .Cells(7, ColFin)).HorizontalAlignment = xlCenterAcrossSelection
' With Cells(7, ColFin).Borders(xlEdgeRight)
' .Weight = xlMedium
' .ColorIndex = 3
' End With
.Activate
.Range("A").Select
End With
End SubBonjour ThauThem , le forum
Tout d'abord mille excuse pour l'omission de précision pour la localisation dans le fichier .
je viens de regarder vite fait ta proposition pour le quel je te remercie à première vu il vas falloir que j'adapte et que je teste .
je te tien au courant . au plus vite et merci encore .
oui il me dit qu'il y des erreurs de syntaxes certainement dû à un problème de version xl ? je ne voie que ça car j'ai le texte en rouge donc je te tien au courant . à plus et merci encore . Amicalement nono44
Bonjour thauthème ,le forum,
Comme prévu je reviens vers toi pour te donner des nouvelles .
hélas il y a un soucis de syntaxe avec ton programme (texte apparais en rouge dans le programme) , j'ai beau essayer de comprendre où le problème se trouve mystère ?
je te remet mon fichier avec ta macro tel qu'il apparaît à l'écran .
Tu à une version de mon programme de base dans le module 2 du fichier sous forme de teste .
J'ai essayer avec où sans cela ne change rien à l'erreur .
si tu n'a pas le temps dis moi comment insérer la fonction qui manque pour obtenir le résultat souhaiter au niveau du collage .
je voulais savoir si il serais possible d'insérer en plus le fonction suivante en cas où
Si lors du dernier collage il manques des colonnes . Rajouter 8 colonnes sur122 lignes pour agrandir le tableau à partir de la colonne "CV".
bien sure si tu as le temps d'étudier la question c'est juste en prévision et pour éviter d'avoir à faire des modification par la suite .
Bon voilà pour l'instant je te remercie beaucoup pour tout cela et milles excuse de te solliciter pour si peux de choses , mais là je cale vraiment . Amicalement Nono44
Bonjour le fil, bonjour le forum,
Je ne comprends rien !... J'ai supprimé le code avec les lignes en rouge dans le dernier fichier que tu as fourni et je l'ai remplacé par celui de mon avant dernier post (donc le même code, tu es d'accord). Et là ! tout passe sauf la dernière ligne : Range("A").Select que j'ai remplacé par Range("A1").Select.
Maintenant, si ça ne plante pas, ce n'est pas dit que ça fasse le job. Mais là, toi seul pourra le vérifier car vu de l'extérieur ?!...
Toutefois, J'ai repéré deux anomalies à prendre en compte :
• Les variables ColDebut et ColFin sont déjà déclarées publiques dans le Module1 il ne faut donc pas les redéclarer dans le code du CommandButton2_Click
• La fonction ColonneDebut(Rng As Range) a comme unique argument Rng et pour définir ColFin tu écris : ColFin = ColonneDebut(wsSource.Range("B10:CV10")) - 1. La fonction n'a pas d'argument Worksheet. Donc quelque soit l'onglet qu'on lui attribut, elle utilise en fait l'onglet actif et non pas l'onglet renseigné pour désigner la plage (wsSource dans ton exemple).
Je pense que cette fonction devrait avoir deux arguments :
Function ColonneDebut(O As Worksheet, Rng As Range)
En tenant compte de ces deux anomalies, le code du CommandButton2 :
Private Sub CommandButton2_Click()
Dim wsSource As Worksheet
Dim wsDestination As Worksheet
Dim Adr As Range
Dim C As Integer
Dim Rng As Range
Set wsSource = Sheets("Détail Fiche Client")
Set wsDestination = Sheets("FCI " & wsSource.[f6].Value)
ColFin = ColonneDebut(wsSource, Range("B10:CV10")) - 1
If wsSource.Cells(10, 2).Interior.ColorIndex = wsSource.Cells(10, ColFin).Interior.ColorIndex Then
ColDebut = 2
Else
For C = ColFin To 2 Step -1
If wsSource.Cells(10, C).Interior.ColorIndex = wsSource.Cells(10, ColFin).Interior.ColorIndex Then
ColDebut = C
Else
Exit For
End If
Next
End If
With wsDestination
Set Adr = IIf(.Range("B7") = "", .Range("B7"), .Cells(7, Application.Columns.Count).End(xlToLeft).Offset(0, 1))
Set Rng = wsSource.Range("B7", wsSource.Cells(122, ColFin))
Rng.Copy Adr
ColFin = .Range("B10").End(xlToRight).Column
.Range(.Cells(7, ColDebut + 1), .Cells(7, ColFin)).HorizontalAlignment = xlCenterAcrossSelection
' With Cells(7, ColFin).Borders(xlEdgeRight)
' .Weight = xlMedium
' .ColorIndex = 3
' End With
.Activate
.Range("A1").Select
End With
End SubLe code de la fonction ColonneDebut :
Function ColonneDebut(O As Worksheet, Rng As Range) 'article
Dim cel As Range
For Each cel In Rng
If cel.Interior.ColorIndex = [A10].Interior.ColorIndex Then 'cherche vert si jaune présent
ColonneDebut = cel.Column
Exit For
End If
Next cel
End FunctionLe Fichier :
bonjour
mon avis perso de moi et qui se discute : le fichier de départ n'est pas un fichier réfléchi pour être performant en informatique mais pour ressembler à ce qu'on fait avec un crayon.
les difficultés qui s'en suivent viennent de là
une gestion de commandes clients, c'est une seule feuille de saisie, avec en colonnes toutes simples :
A- date
B- client
C n° de commande
D- réf du produit
E- quantité
F- prix unitaire PU
G- total ligne = qté*PU
c'est tout
on peut ajouter des colonnes "livré oui ou non", et autres infos utiles pour la suite
une commande sera donc constituée de 1 à 10 lignes (ou plus je te le souhaite), avec les cellules A à F remplies, G est calculée
pour visualiser une CC, tu filtres ou tu fais un TCD basé sur n° commande
pour visualiser les ventes par client ou produit, ou mois ou années, des TCD
pour voir les livraisons à faire, un TCD
aucun calcul, aucun VBA. Rien
bonjour thauthème , jmd le forum
merci pour cette réponse Thauthème , je te tiens au courant pour la suite ais d'après les premier teste
il n'y a aucun décalage dans la feuille de destination .
je souhaiterait que la journée suivante reparte de la première colonne vide (colonne I dans la feuille "FCI 1")
pour constituée la plage semaine . Cela doit se faire à partir de la colonne b de la feuille source ("Feuille 2 ") .
je te joint dès que possible le feuille source et destination en pièce jointe pour que tu puisse comprendre se que je souhaite obtenir .
te remerciant pour tout et te dit a bientôt .
JMD merci pour ton commentaire et ton analyse qui est exact ,c'est bien la transcription de feuille manuelle vers un support informatique . je te concède qu'il y certainement des procédure plus simple , mais n'ayant besoin que de cela je tiens que se soit le plus ressemblant a se que j'ai en support papier . de je n'est qu'une journée par semaine pour saisir donc plus les supports sont semblable pus vite je les remplirais .
mais étant ouvert et voulant toujours progresser si tu a une proposition qui vas dans ton sens n'hésite pas à me la faire parvenir .
Je vous remercie tout les deux et vous dit à bientôt . Amicalement . nono44
re
ma meilleure réponse : essayer. Tu en as pour 2 minutes !
par la suite, la siasie n'est pas plus longue qu'avec un formulaire.
par contre tu vas gagner du temps car pas besoin de temps pour la mise au point ou la modification (changement de PC par ex) du fichier.
RE à tous
jmd : merci pour cette réponse et tu raison il faudra que je teste .
ThauThème : comme prévue dans mon dernier message je te joint un fichier qui contient
la feuille source et la feuilles destination
sur a première tu verra que j'ai mis en la 3 journée
avec l'indication de fin de semaine
sur le seconde :
1) tu as la zone où je souhaite qu'elle soit collée (zone zébré en rose )
2) le rajout pour déterminer la plage semaine (ligne 7 en orangé )
3) les décalage à la première colonne vide ( flêches violettes)
Voilà en espérant que se soit plus claire pour toi et te remerciant par avance je te dit à bientôt .
Amicalement nono44
p s : je te met le code pour infos
Bonsoir le fil, bonsoir le forum,
Désolé Nono mais j'ai pas le courage de m'y plonger...