Je ne suis pas un expert Excel et je remercie par avance tous ceux qui pourront m’apporter un soutien.
Lorsque j’en saurai un peu plus alors je pourrais à mon tour transmettre aux autres.
Mon problème et le suivant /
J’ai une feuille excel avec des datas qui débutent en A7 et qui vont jusqu’en AU 115.
Toutes les lignes ne sont pas renseignées, mais devraient l’être plus tard.
Ma première feuille qui porte le nom de 2020 contient des données que je vais devoir copier sur une autre feuille nommée 2021 une autre 2022 …
J’ai besoin d’une macro qui va intégrer d’abord de 2020 a7:au115 à 2021 puis de 2021 à 2022… tout ça automatiquement avec plusieurs critères :
Ma cellule 2020 g7 contient une date qui devra être strictement supérieur à la date contenue dans la cellule $L$3 de 2021 OU que la cellule 2020 k7 est aussi strictement > $L$3 pour copier la ligne dans 2021
Pour la feuille 2022 on fait la même chose mais avec les cellule 2021 vers 2022.
Jai commencé un VBA mais il ne fonctionne qu’à moité, il recopie bien mais sur les cellules à partir de a1 sur 2021.
Sub copie_2021()
Dim plage As Range, cel As Range, derlig, derlig1
'fige ecran
Application.ScreenUpdating = False
With Worksheets("2020")
'derniere cellule non vide colonne A
derlig = .Range("A7" & Rows.Count).End(xlUp).Row
'mise en memoire plage donnees
Set plage = .Range("g7" & derlig)
'boucle test cellule Gx > $L3
For Each cel In plage
If cel > "$l3" Then
'premiere cellule vide colonne A
'derlig1 = Worksheets("2021").Range("A" & Rows.Count).End(xlUp).Row + 1
'copy donnees
.Range("A7" & cel.Row & ":AU" & cel.Row).Copy Worksheets("2021").Range("A" & derlig1 & ":AU" & derlig1)
End If
Next cel
End With
Application.ScreenUpdating = True
End Sub
SI une petite main peut me venir en aide ce serait top.
Si tu mets A7 que vient faire le cel.row qui suit ?
C’est ou « A7 » ou « A » & cel.row mais certainement pas « A7 » & cel.Row
Cel.row est l’instruction qui détermine l’indice à associer à A si celui-ci est déjà associer à 7 le Cel.row est en trop
Maintenant je ne sait si cela va résoudre ta problématique n’ayant pas ton fichier pour tester
J’ai adapté ton code
Tout d’abord les seules cellules à recopier sont les cellules des colonne A à K
Celles des colonnes L à AU sont automatiquement alimentées par des formules donc ne doivent pas être incluses dans la recopie
Pour déterminer la 1° ligne disponible dans l’onglet de destination tu utilises cette ligne :
qui serait parfaite si en colonne A à partir de la ligne 125 onglet par exemple 2021 il n’y avait pas de données
Cette ligne de code fonctionne dans une colonne qui n’a pas d’autre données que celles à recopier dans les lignes qui suivent sinon elle ne peut être utilisée
Dans ton fichier il faut démarrer la recopie à partir de la ligne 7 or quelques lignes à partir de la ligne 125 en colonne A sont occupée
Pour donc utiliser cet instruction il faudrait libérer la colonne A à partir de la ligne 7
Ne sachant pas si je pouvais le faire j’ai opté pour une variable derlig1 fixe à la valeur 7 initiale que je fais évoluer à chaque recopie par une ligne de code rajoutée :
derlig1 = derlig1 + 1
A toi de voir si l’on maintien cette solution ou si tu nettoies la colonne A pour reprendre la ligne de code mis en place au départ (se nettoyage doit être réalisé sur tout les onglets cible)
J’ai apporté une évolution dans ton traitement qui effectue l’ensemble des recopies de tous les onglets concernés avec cette macro unique que j’ai renommé en conséquence de « copie_2020 » à « copie »
Tous les onglets « 2020 » « 2021 » « 2022 » sont ainsi alimentés
Si tu rajoutes des onglets « 2023 » « 2024 » « 2025 » etc.… il faut adapter la ligne de code en début suivante :
listeonglets = « 2021/2022 »
et mettre :
listeonglets = « 2021/2022/2023/2024/2025 »
Je n’ai pas mis d’instruction pour vider chaque onglet cible si le traitement devait être rejoué
Maintenant il redémarrera à partir de la ligne 7 de chacun et donc remplacera les données existantes mais n’effacera pas celles qui seraient en trop si moins de ligne à recopier
« En fait tu ré-écrit sur les cellules déjà existantes quand on lance à nouveau la macro ? »
Je remplis les cellules de l annee cible des donnees de l année source si la condition date est valide ni plus ni moins
« Comment mettre un bouton « actualiser » dans le menu qui lance la macro ? »
Donc Menu devellopeur icône insérer
Choisir le premier bouton dans les propositions
Cliquer à l endroit où il doit se trouver
Relier le bouton à la macro
Puis saisir un nom
Ajuster sa mise en place
Cliquer sur n importe quelle cellule pour le rendre opérationnel
« Comment aussi choisir en fait dans la recopie que les cellules a,b,c,d,e,h,i,j de façon à laisser les calculs se faire. »
J avoue ne pas comprendre ta demande
Merci de préciser
Peut être à l appui d un exemple
Dans l attente
Ce que je souhaite recopier dans la feuille 2021 ce sont les valeurs de A, B,C,D,E, H,I et J à partir de la feuille 2020 et pas toutes les cellule de A à K.
J’essaye de décrypter ta macro pour la comprendre et voir comment la modifier et c’est pas simple pour moi…
Je te transmets ton fichier modifié dans cet esprit
Je t’ai rajouté le bouton dans l’onglet 2020
La ligne qui recopie dans les onglets cible les données source c’est celle-ci :
Je me suis aperçu que je l’avait mal paramétré au lieu des colonnes A à K (les autres étant dotées de formules donc non concernées par la recopie et ce dans tous les onglets AAAA) j’avais mis des colonnes A à AK j’ai omis d’enlever le A de AK
Petite coquille
J’ai récupéré à nouveau ton fichier car toutes les formules dans le premier récupéré ont disparu et pour cause
Et oui malgré toutes ses années de programmation les erreurs me tiennent toujours compagnie
Si tu souhaites d’autres explications dans le code n’hésites pas je me ferai un plaisir
Tu peux supprimer à ta convenance les lignes vertes dont tu n’as besoin ces lignes sont au stade commentaire donc inactives
Ton fichier corrigé avec bouton et toutes les formules
A ta dispo
En fait j’avais corrigé par moi-même l’erreur de « AK ».
Pour copier les autres cellules en fait j’ai dupliqué ta formule de copie et j’ai changé les cellules concernées et ça semble marcher.
EN fait je vais être amené à faire un bouton par feuille car je souhaite que la macro n’agisse que sur le passage de 2020 à 2021 au autre bouton pour 2021 à 2022…
Je n’ai encore bien compris comment faire plusieurs macro et mettre un bouton sur chaques feuilles. Je vais voir ce que tu as fait pour comprendre.
Dans cette perspective il est indispensable de déclencher le traitement à partir de l onglet source et que l onglet cible soit existant
Les 2 onglets doivent être nommés sous cette forme :
Onglet source 2020
Onglet cible 2021
Que des chiffres et rien d’autre sinon Bug au niveau de la nouvelle ligne de code qui comporte une addition
Si on active le traitement à partir de boutons correctement mis en place avec des onglets bien nommés tout devrait bien se passer
Retape au clavier les guillemets en les accolant à la donnée :
« et »
ce ne sont pas ceux valide pour le VBA
Pour ajouter une macro à la suite de la mienne tu tapes cette ligne de code :
Sub lenomdelamacro ()
ou
Sub le_nom_de_la_macro
Puis entrée
une ligne de ce type se mettra automatiquement après :
End Sub
Puis entre ces 2 lignes tu mets ton code
Mettre un bouton sur feuille nommée strictement 2020 par exemple sans espace avant et aprés et surtout prévoir la feuille 2021 prête avant toute utilisation du bouton sinon Bug en perspective
Heureusement que tu veilles
Chapeau bas
Je m’incline
Effectivement grosses erreur de ma part
Je l’ai fais sur ma tablette sans tester et voilà la bourde
Cela m’apprendra à être plus prudent
Donc Mimimathy a parfaitement raison mets comme il ou elle le propose cela devrait le faire
Je te transmet un nouveau fichier adapté
Fort de ma terrible mésaventure pour ne pas faire d’autre imper j’ai adapté et testé ce nouveau traitement
Pour m’apercevoir aussi que ton bouton doit impérativement être mis en place dans l’onglet cible à alimenter
Ce fichier ci-joint adapté dans cette esprit avec une 2° macro (j’ai laissé la 1°) appelé Copie2 et un bouton « Copie2 » dans l’onglet cible « 2021 »
En cliquant dessus tu remplis les colonne A à J de cette onglet à partir des données sources de l’onglet 2020 même colonnes et tenant compte des conditions de date
Tu pourras installer un bouton en onglet cible « 2022 » sur cette macro Copie2 pour réaliser la même opération avec l’onglet source « 2021 »
A ta disposition et encore mille excuses pour mes étourderies
Heureusement que j’ai un Ange gardien qui a des doigts magiques