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 !
je suis un jeu membre de votre forum et je vous remercie pour la précieuse aide que vous fournissez. Dans le cadre de mes fonctions je dois remplir quotidiennement un fichier Excel avec des devis, à ce jour je remplis manuellement ces informations et je dois avouer que c'est assez lourd comme manip, j'ai réfléchis à un peu soulagé ma peine en créant un petit tableau dans l'encadré jaune dans le gauche de la photo qui se trouve en pièce jointe, j'ai essayé de créer une macro qui reprends les infos de l'encadré jaune pour les coller proprement dans la ligne vide suivante dans notre exemple la ligne 549, puis le devis d'aprés ira dans la ligne 550 etc ...
A ce jour avec mon faible niveau de connaissance, je n'ai pas réussi à trouver ou créer une macro qui puisse répondre à mon attente, si certains peuvent me donner une piste ou une petite aide d'avance merci
* regarde ton nouveau cadre en A9:C15 ; attention : j'y ai fait beaucoup de modifications, qui ne se voient pas au premier abord ! 😁 😜
* note que c'est vide en A28:F28, et dessous aussi ; est-ce que les données que j'ai déjà saisies dans le cadre te plaisent ? oui ? tu en es sûr ? alors au choix : fais Ctrl eou clique sur le bouton bleu. 🙂 c'est ok pour la ligne 28 ; refais Ctrl e ...
Avec le maximum d'info :
- Je prends les infos ou ?
- Comment je les mets dans ton fichier en cliquant sur un bouton par exemple ?
- Un exemple avant /après est un plus pour mieux comprendre ton besoin....
En résumé tout ce qui permet de comprendre ton problème est le bienvenu
Edit:
Quand on met un fichier à dispo il doit être le plus représentatif .
C'est quoi représentatif ?
- représentatif, même organisation des lignes et des colonnes, mêmes libellés, mêmes noms de feuilles...
- anonymisé, pas de données personnelles réelles tels nom, n° sécu, adresse ...
- simplifié, une quinzaine de lignes reproduisant l'ensemble des différents cas envisageables
*Éventuellement préciser l'ordre de grandeur des lignes à traiter, exemple mon fichier comporte 1 000 lignes ou bien 200 000 lignes ==> la méthodologie peut être différents.
Une demande claire donne très souvent une réponse rapide et qui correspond au mieux à la demande.
De plus si cela fonctionne sur le fichier que je fournis et pas sur le vrai fichier j'en conclu qu'il n'est en rien représentatif ou que tu n'as pas su transposer ce qui devrait être un simple copier coller.
Je joins dans ce post le fichier Excel, donc les infos (N° Devis, STS etc ...) sont à saisir manuellement dans le rectangle en jaune, pour les renseigner dans les lignes, il faudra appuyer sur le bouton bleu, puis ainsi de suite les devis doivent se mettre dans les lignes suivantes 28,29 etc ....
Ton fichier n'a aucune données !!!!🤔
Mets des données fictives et des exemples de ce que tu veux faire On prends les données où et on les mets où ?
D'ou sorte tes donnés d'une autre feuille ? Ou est elle ?
N’oublie pas ce qui est évident pour toi qui "baigne" dans le fichier ne l'est pas pour nous qui le voyons pour la 1ere fois.
Il faut que l'on comprenne ta logique (qui n'est pas forcément la notre voir la bonne) de ce que tu veux faire.
Et si il y a des macro dans ton fichier laissent les et c'est mieux quand elles sont opérationnelles
* regarde ton nouveau cadre en A9:C15 ; attention : j'y ai fait beaucoup de modifications, qui ne se voient pas au premier abord ! 😁 😜
* note que c'est vide en A28:F28, et dessous aussi ; est-ce que les données que j'ai déjà saisies dans le cadre te plaisent ? oui ? tu en es sûr ? alors au choix : fais Ctrl eou clique sur le bouton bleu. 🙂 c'est ok pour la ligne 28 ; refais Ctrl e ; c'est ok pour la ligne 29 ; refais Ctrl e ; c'est ok pour la ligne 30 ; etc...
code VBA de Module2(18 lignes) :
VB:
Option Explicit
Sub CpyCadre()
Dim lig&: Application.ScreenUpdating = 0
lig = Cells(Rows.Count, 1).End(3).Row + 1
If lig < 28 Then lig = 28
With Cells(lig, 1)
.Value = [B9] 'N° Devis
.Offset(, 1) = [B10] 'STS
.Offset(, 2) = [B11] 'DV Réalisé
.Offset(, 3) = [B12] 'Technicien
.Offset(, 4) = [B13] 'Client
.Offset(, 5) = [B14] 'Objet
End With
'désélectionne le bouton bleu :
ActiveCell.Select
End Sub
* regarde ton nouveau cadre en A9:C15 ; attention : j'y ai fait beaucoup de modifications, qui ne se voient pas au premier abord ! 😁 😜
* note que c'est vide en A28:F28, et dessous aussi ; est-ce que les données que j'ai déjà saisies dans le cadre te plaisent ? oui ? tu en es sûr ? alors au choix : fais Ctrl eou clique sur le bouton bleu. 🙂 c'est ok pour la ligne 28 ; refais Ctrl e ; c'est ok pour la ligne 29 ; refais Ctrl e ; c'est ok pour la ligne 30 ; etc...
code VBA de Module2(18 lignes) :
VB:
Option Explicit
Sub CpyCadre()
Dim lig&: Application.ScreenUpdating = 0
lig = Cells(Rows.Count, 1).End(3).Row + 1
If lig < 28 Then lig = 28
With Cells(lig, 1)
.Value = [B9] 'N° Devis
.Offset(, 1) = [B10] 'STS
.Offset(, 2) = [B11] 'DV Réalisé
.Offset(, 3) = [B12] 'Technicien
.Offset(, 4) = [B13] 'Client
.Offset(, 5) = [B14] 'Objet
End With
'désélectionne le bouton bleu :
ActiveCell.Select
End Sub
Dans un premier temps, merci tu as parfaitement cibler ma demande et ta réponse est PARFAITE c'est exactement ce dont j'avais besoin, il y'a une possibilité d'effacer les données une fois qu'elles sont copiers dans les lignes ?
PS : Comment tu as fais ? c'est juste une macro ? ou il y'a aussi une programmation ?
merci pour ton retour ! 😊 pour le cadre, j'espère que tu as remarqué tout ceci :
* il y a plus de place pour écrire l'Objet, car il y a 2 lignes ; avant, sur une seule ligne, la place était beaucoup trop restreinte ! j'ai même été tenté de mettre 3 lignes, mais vu la largeur de la colonne F, et comme tu écris tout le texte en majuscules, je me suis dit que c'est mieux de laisser 2 lignes ; je veux dire qu'avec 3 lignes, le texte en majuscules n'aurait pas tenu en entier en F28 ou au dessous ; si jamais tu préfères quand même 3 lignes, je peux te faire une autre version. 🙂 c'est pas seulement la présentation du cadre qu'il faudra changer : c'est aussi des instructions VBA.
* voici toutes les fusions que j'ai faites : B9:C9 ; B10:C10 ; B11:C11 ; B12:C12 ; B13:C13 ; B14:C15.
oui, c'est avec une macro ; cette macro est écrite en VBA, qui est le langage de programmation d'Excel ; plus exactement toutes les applications Office utilisent VBA, et VBA est le sigle de Visual Basic for Applications.
dans VBA, il y a une base commune à toutes les applications, qu'on peut appeler le « noyau » de VBA (en anglais : kernel) ; en plus de cette base commune, il y a des ajouts particuliers pour prendre en compte les spécificités de l'application ; exemples : avec Excel, il faut gérer les feuilles de calcul, les autres feuilles comme les feuilles graphiques, les cellules... ; avec Word, il faut gérer le texte, les paragraphes, les styles de police et les styles de paragraphe... ; avec PowerPoint, il faut gérer les présentations graphiques, les diapositives... ; avec Access, il faut gérer les tables de données, les requêtes, les formulaires, les états...
nouveau code VBA de Module2avec effacement
des données du cadre après la copie (20 lignes) :
VB:
Option Explicit
Sub CpyCadre()
Dim lig&: Application.ScreenUpdating = 0
lig = Cells(Rows.Count, 1).End(3).Row + 1
If lig < 28 Then lig = 28
With Cells(lig, 1)
.Value = [B9] 'N° Devis
.Offset(, 1) = [B10] 'STS
.Offset(, 2) = [B11] 'DV Réalisé
.Offset(, 3) = [B12] 'Technicien
.Offset(, 4) = [B13] 'Client
.Offset(, 5) = [B14] 'Objet
End With
'efface les données initiales du cadre
[B9:C15].ClearContents
'désélectionne le bouton bleu :
ActiveCell.Select
End Sub
j'ai dû m'absenter presque toute la journée, et je viens de lire ton post #9.
merci pour ton retour ! 😊 pour le cadre, j'espère que tu as remarqué tout ceci :
* il y a plus de place pour écrire l'Objet, car il y a 2 lignes ; avant, sur une seule ligne, la place était beaucoup trop restreinte ! j'ai même été tenté de mettre 3 lignes, mais vu la largeur de la colonne F, et comme tu écris tout le texte en majuscules, je me suis dit que c'est mieux de laisser 2 lignes ; je veux dire qu'avec 3 lignes, le texte en majuscules n'aurait pas tenu en entier en F28 ou au dessous ; si jamais tu préfères quand même 3 lignes, je peux te faire une autre version. 🙂 c'est pas seulement la présentation du cadre qu'il faudra changer : c'est aussi des instructions VBA.
* voici toutes les fusions que j'ai faites : B9:C9 ; B10:C10 ; B11:C11 ; B12:C12 ; B13:C13 ; B14:C15.
oui, c'est fait dans la nouvelle version du fichier joint dans ce post.
oui, c'est avec une macro ; cette macro est écrite en VBA, qui est le langage de programmation d'Excel ; plus exactement toutes les applications Office utilisent VBA, et VBA est le sigle de Visual Basic for Applications.
dans VBA, il y a une base commune à toutes les applications, qu'on peut appeler le « noyau » de VBA (en anglais : kernel) ; en plus de cette base commune, il y a des ajouts particuliers pour prendre en compte les spécificités de l'application ; exemples : avec Excel, il faut gérer les feuilles de calcul, les autres feuilles comme les feuilles graphiques, les cellules... ; avec Word, il faut gérer le texte, les paragraphes, les styles de police et les styles de paragraphe... ; avec PowerPoint, il faut gérer les présentations graphiques, les diapositives... ; avec Access, il faut gérer les tables de données, les requêtes, les formulaires, les états...
nouveau code VBA de Module2avec effacement
des données du cadre après la copie (20 lignes) :
VB:
Option Explicit
Sub CpyCadre()
Dim lig&: Application.ScreenUpdating = 0
lig = Cells(Rows.Count, 1).End(3).Row + 1
If lig < 28 Then lig = 28
With Cells(lig, 1)
.Value = [B9] 'N° Devis
.Offset(, 1) = [B10] 'STS
.Offset(, 2) = [B11] 'DV Réalisé
.Offset(, 3) = [B12] 'Technicien
.Offset(, 4) = [B13] 'Client
.Offset(, 5) = [B14] 'Objet
End With
'efface les données initiales du cadre
[B9:C15].ClearContents
'désélectionne le bouton bleu :
ActiveCell.Select
End Sub
Que dire à part que c'est parfait ! je te remercie mille fois c'est exactement ce dont j'avais besoin, merci à tous, vous êtes super et ça se voit que vous êtes des passionnés
selon ton info en MP, j'ai ajouté une colonne A vide.
➯ nouveau fichier, avec nouveau code VBA. 🙂
(même utilisation que précédemment)
VB:
Option Explicit
Sub CpyCadre()
Dim lig&: Application.ScreenUpdating = 0
lig = Cells(Rows.Count, 2).End(3).Row + 1
If lig < 28 Then lig = 28
With Cells(lig, 2)
.Value = [C9] 'N° Devis
.Offset(, 1) = [C10] 'STS
.Offset(, 2) = [C11] 'DV Réalisé
.Offset(, 3) = [C12] 'Technicien
.Offset(, 4) = [C13] 'Client
.Offset(, 5) = [C14] 'Objet
End With
'efface les données initiales du cadre
[C9:D15].ClearContents
'désélectionne le bouton bleu :
ActiveCell.Select
End Sub
- 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