Macro pour copier/coller selon critère

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 !

penelope

XLDnaute Nouveau
Bonjour à tous,
Je suis en train de me créer un petit programme pour le suivi des résultats des chevaux d'une écurie de course... Et je bloque complétement sur l'élaboration d'une macro... car je l'avoue, je débute.
Voici les données: (Pour simplifier, j'ai mis toutes mes feuilles dans le même classeur... bien que ça ne m'arrange pas forcément)
Sur la feuille 1 ("saisie") je souhaite entrer les données (Dans la ligne 16) puis en cliquant sur mon bouton "Enregistrer", la macro intervient pour:
a) selon le nom du cheval entré en A16, elle copie la ligne de donnée et la colle dans la feuille du cheval correspondant ("détails" xx), bien sûr dans les même colonnes (les feuilles détails sont faîtes sur le même modèle que la feuille "saisie" sauf qu'il n'y a pas la colonne NOM), à la suite des autres lignes déjà enregistrées
b) enregistrer
c) vider les données de la feuille "saisie" afin d'en entrer des nouvelles.

Donc j'ai mis mon fichier en pièce jointe avec ma macro qui ne fonctionne pas.
Quelqu'un peut-il me donner un coup de pouce? MERCI d'avance!

Ma macro:

Sub ENREGISTREMENT_QuandClic()


If A16 = "BLUE DAMASK" Then
ActiveSheet.Range("B16:L16").Copy_
destination: Worksheets(4).Range ("A4:K4")
expression.Save
ActiveSheet.Empty (A16 - L16)
End If


If A16 = "AILTON" Then
ActiveSheet.Range("B16:L16").Copy_
destination: Worksheets(2).Range ("A4:K4")
expression.Save
ActiveSheet.Empty (A16 - L16)
End If


If A16 = "FIGHTING" Then
ActiveSheet.Range("B16:L16").Copy_
destination: Worksheets(8).Range ("A4:K4")
expression.Save
ActiveSheet.Empty (A16 - L16)
End If


If A16 = "MAJOR" Then
ActiveSheet.Range("B16:L16").Copy_
destination: Worksheets(18).Range ("A4:K4")
expression.Save
ActiveSheet.Empty (A16 - L16)
End If


If A16 = "GABALDEN" Then
ActiveSheet.Range("B16:L16").Copy_
destination: Worksheets(10).Range ("A4:K4")
expression.Save
ActiveSheet.Empty (A16 - L16)
End If


If A16 = "GANIMETTE" Then
ActiveSheet.Range("B16:L16").Copy_
destination: Worksheets(12).Range ("A4:K4")
expression.Save
ActiveSheet.Empty (A16 - L16)
End If


If A16 = "DEBBY" Then
ActiveSheet.Range("B16:L16").Copy_
destination: Worksheets(6).Range ("A4:K4")
expression.Save
ActiveSheet.Empty (A16 - L16)
End If


If A16 = "LUMISSON" Then
ActiveSheet.Range("B16:L16").Copy_
destination: Worksheets(14).Range ("A4:K4")
expression.Save
ActiveSheet.Empty (A16 - L16)
End If


If A16 = "SAHARA" Then
ActiveSheet.Range("B16:L16").Copy_
destination: Worksheets(22).Range ("A4:K4")
expression.Save
ActiveSheet.Empty (A16 - L16)
End If


If A16 = "MOPSOS" Then
ActiveSheet.Range("B16:L16").Copy_
destination: Worksheets(20).Range ("A4:K4")
expression.Save
ActiveSheet.Empty (A16 - L16)
End If


If A16 = "MAINTOP" Then
ActiveSheet.Range("B16:L16").Copy_
destination: Worksheets(16).Range ("A4:K4")
expression.Save
ActiveSheet.Empty (A16 - L16)
End If


If A16 = "ZAFEERELI" Then
ActiveSheet.Range("B16:L16").Copy_
destination: Worksheets(24).Range ("A4:K4")
expression.Save
ActiveSheet.Empty (A16 - L16)
End If

End Sub
 

Pièces jointes

Re : Macro pour copier/coller selon critère

Salut penelope et le forum
Bienvenue
J'ai un peu modifié ton fichier

Il faut refaire une feuille avec chaque nom de cheval dans l'onglet (seul le premier est conservé, pour passer en PJ)

Cellule jaune : liste de validation (Menu Données>>Validation)

Le bouton est issu de la barre "Boîte à outils contrôle"
Clic-droit dessus => Menu contextuel
- Propriété
- Visualiser le code
A+
 

Pièces jointes

Re : Macro pour copier/coller selon critère

Bonjour Gorfael
Je te remercie pour ta réponse.
Effectivement, en pratique, ta macro effectue exactement ce que je cherchait. Je suis impressionnée! Cependant, comme ça n'a plus rien à voir avec ma macro qui ne fonctionnait pas (j'imagine ton ilharité en la parcourant!) Je suis un peu perdue pour comprendre comment fonctionne la tienne... Le "un peu" n'est peut-être pas le terme exact, mais j'ai ma fierté!
En résumé, je serais bien incapable de la reproduire pour ouvrir d'autres onglets pour chacun des chevaux et que ça marche.
HELP!
 
Re : Macro pour copier/coller selon critère

Salut penelope et le forum
Contrairement à ce que pense les gens, ceux qui navigue facilement sur les codes, ont tous débuté.
Ceux qui déclenchent mes rires sont plutôt du côté de ceux qui pleurent, pas de ceux qui essaient.
En résumé, je serais bien incapable de la reproduire pour ouvrir d'autres onglets pour chacun des chevaux
Tu fais une copie de la feuille "AILTON" (je crois que c'est celle-ci que j'ai laissé), et tu la renommes, avec un des noms qui apparaissent en plage A2:A15 de la feuille qui contient le bouton. Puis tu procèdes de même pour avoir un onglet par cheval, avec le nom du cheval pour nom de la feuille.
Clic-droit sur "AILTON" (le nom de l'onglet) => Menu contextuel >>Déplacer ou copier...
Tu coches "Créer une copie"
Tu sélectionnes "en dernier"
Tu double-cliques sur AILTON (2) ou Clic-Droit dessus>>Renommer et tu mets le nom d'un autre cheval.

Une seule feuille pour saisir, les autres pour recevoir les données correspondant à chaque cheval.
C'est la seule qui contienne quelque chose

Les cellules en jaune : Tu en sélectionnes une, puis tu vas dans le menu Données>>Validation => comment on met un menu déroulant limité aux cellules sources.

Menu affichage>>Barre d'outils>>Boîte à outils contrôles
Première icone (équerre) :
Fond bleu : Passage en mode création => le fond devient orange
Clic-Droit sur le bouton>>Visualiser le code
Tu as accès au code de la macro. Tu mets un point d'arrêt sur la ligne de titre
Fond Orange : Désactiver le mode création => le fond devient bleu, tu peux actionner le bouton
Tu te retrouves dans la macro, à ton point d'arrêt
<F8> te fera avancer d'instruction en instruction, et à chaque fois, tu peux regarder sur les feuilles concernées ce qui se passe, en revenant à la feuille du bouton, sinon tu auras des erreurs.

Fucius, qui étant loin d'être con, disait :
Il n'est pas grave d'avoir des lacunes. Ce qui l'est, c'est de ne pas chercher à les combler qui l'est.

Donner un code qui ne fait pas exactement ce qu'on veut, en demandant de l'améliorer est une démarche qu'ont sans doute fait tous les dépanneurs de ce forum. C'est comme ça qu'on évolue.
J'aurais du reprendre ta macro, en l'améliorant, mais... je suis un grand fainéant ! Au lieu de faire toutes les étapes, je suis allé directement au résultat final. Enfin à un des résultats donnant une solution à ton problème.
Code:
Sub ENREGISTREMENT_QuandClic()

Select Case [A16]
    case "BLUE DAMASK"
        Range("B16:L16").Copy destination:    Worksheets(4).Range ("A4:K4")
        [A16:L16].clearcontents
    case "AILTON"
        Range("B16:L16").Copy destination:    Worksheets(2).Range ("A4:K4")
        [A16:L16].clearcontents
    case...
end select
End sub
aurait donné une partie de la réponse, etc...
Je suis allé au plus court, en attendant des questions sur ce que tu ne comprends pas.
A+
 
Re : Macro pour copier/coller selon critère

Bonjour Gorfael et le forum,
Ta dernière réponse a fait surgir un EUREKA en moi...🙂
Bon j'avais déjà pas mal avancé en attendant une potentielle réponse. Càd que j'ai réussi toute seule (oui oui!) à recopier mes onglets en leur attribuant le nom des chevaux - sauf que je n'ai pas pu simplement "renommer" mes feuilles... il fallait modifier le nom dans "propriété" de la barre d'outils... sinon, il refusait. Bref, opération accomplie. Me voilà avec 16 onglets, y compris la feuille de base (saisie). Oui, je sais, j'en ai profité pour rajouter quelques "chevaux", mais j'ai pris soins de les ajouter aussi dans le menu déroulant. Ca aussi, j'avais réussi à comprendre par moi-même... Faut bien que je m'envoie quelque fleurs pour me soutenir!
Puis je me suis penchée sur ton code...
Petite parenthèse: Tu as écrit dans ton dernier message:
Menu affichage>>Barre d'outils>>Boîte à outils contrôles
Première icone (équerre) :
Fond bleu : Passage en mode création => le fond devient orange
Clic-Droit sur le bouton>>Visualiser le code
Tu as accès au code de la macro. Tu mets un point d'arrêt sur la ligne de titre
Fond Orange : Désactiver le mode création => le fond devient bleu, tu peux actionner le bouton
Tu te retrouves dans la macro, à ton point d'arrêt
<F8> te fera avancer d'instruction en instruction, et à chaque fois, tu peux regarder sur les feuilles concernées ce qui se passe, en revenant à la feuille du bouton, sinon tu auras des erreurs.
__ J'arrive à ouvir le code... mais j'ai pas compris le bleu et l'orange...ni le point d'arrêt (j'ai un message d'erreur...) <F8> fonctionne, mais je vois rien bouger sur ma feuille...
Je ferme la parenthèse.
Sur le premier code, je comprends pas déjà le départ:
Dim F As Worksheet
Dim X As Long
D'où viennent F et X?????

Le deuxième code de ton dernier message m'a beaucoup plus inspirée, et je l'ai compris tout de suite. Donc, très fière de moi, j'ai voulu l'appliquer... Alors il me met un message d'erreur par rapport à ma méthode Copy...Destination...
Pourtant, (ok je l'avoue) j'ai copier/coller ton code et modifier les cellules et pris soins de mettre le bon numéro Worksheets pour que ça renvoie à la bonne feuille. Opération effectuée 14 fois, vu que j'ai 14 chevaux. Donc, après réflexion et comparaison des deux codes, j'ai l'impression qu'il me manque quelque chose... Et je me demande si la clé n'est pas justement dans ma première interrogation (Dim...As.../ F et X)
Cela dit, il y a autre chose qui m'échappe: En écrivant un code, n'y a-t-il pas moyen, au lieu d'écrire les plages ou cellules concernées, de les séléctionner dans la feuille directement et que ça se transcrive dans le code? Un peu comme quand on écrit une formules et qu'on séléctionne les plages des données en traitillés...?
Parce qu'en fin de compte, j'écris mon code, et au final, il a l'air de rien comprendre par rapport aux cellules/feuilles concernées.
Je me démonte pas, je vais y arriver. Le bonheur de l'aboutissement sera à la hauteur du travail et des acquis.
A +
 
Re : Macro pour copier/coller selon critère

Salut penelope et le forum
Petite parenthèse: Tu as écrit dans ton dernier message:
Menu affichage>>Barre d'outils>>Boîte à outils contrôles
................
Je t'ai donné une méthodologie, mais pour Excel 2003, pas pour les version suivantes.
mais j'ai pas compris le bleu et l'orange
C'est dans la feuille de calcul sur la barre d'outils "boîte à outils contrôles"
ni le point d'arrêt
Là, c'est sur VBA, regarde dans le menu "déboggage", mais sur V2003 😀 Si tu ne vois rien bouger, c'est parce que tu restes sur la feuille du bouton.
Sur le premier code, je comprends pas déjà le départ:
Dim F As Worksheet
Dim X As Long
D'où viennent F et X?????
C'est de la programmation 😀
Bon, en étant plus sérieux, j'informe VBA que je vais avoir besoin de variables :
- Une que j'appelle X qui sera un nombre entier codé sur 4 octets pouvant aller de -2147483648 à +2147483647, qui me servira pour les lignes
- Une que j'appelle F est qui contiendra une feuille
VBA réserve en RAM des octet pour servir à ces variables.
Ne pas les déclarer est possible aussi, mais j'ai coché, chez moi, l'option qui oblige à les déclarer, et je m'impose à le faire dans le type que je vais utiliser : ça me prévient si la variable que je charge n'est pas du bon type ou que VBA en trouve une qui n'est pas déclarée, suite un une erreur de frappe.
pris soins de mettre le bon numéro Worksheets pour que ça renvoie à la bonne feuille
C'est une question d'habitude : Worksheets(1) : c'est la première feuille dans le classeur. Mais le coder en "dur" dans une macro, j'aime pas. Des fois, pour de multiples raisons indépendantes de ma volonté, les feuilles changent de place (surtout si on est plusieurs à utiliser le même fichier), et la feuille 1 peut se retrouver en place 2 ou 10 => Dans mes codes j'utilise le nom de l'onglet

Si tu as une erreur, ça vient vraisemblablement d'une mauvaise adaptation du code. Pour un dépannage, il faut le but de la macro (on l'a déjà), une idée des données (que tu as fourni avec ton fichier exemple) et le code que tu as fait (c'est ce qu'il manque ^^, mets-le sur un poste)

comme j'ai déclaré un variable feuille, je l'ai chargé, pour pouvoir l'utiliser. C'est une instruction du type
Code:
[COLOR=Red]Set F[/COLOR] = Sheets("machin")
Après, chaque instruction qui contient
- Range(plage) veut dire que ça concerne la feuille active, puisque la feuille n'est pas mentionnée et que par défaut c'est la feuille active.
- F.Range(plage) concerne la feuille qui est dans la variable F
En écrivant un code, n'y a-t-il pas moyen, au lieu d'écrire les plages ou cellules concernées, de les séléctionner dans la feuille directement
On peut le faire : la/les plage(s) sélectionnée(s) sont entrées par VBA dans la variable Selection. de même, on peut utiliser dans le code ActiveCell, ActiveSheet ou ActiveWorkBook. Mais il faut être sûr de ce qu'on fait, et quand tu cliques sur un bouton...
Je me démonte pas, je vais y arriver. Le bonheur de l'aboutissement sera à la hauteur du travail et des acquis.
Et comment tu crois que ceux qui dépannent ont appris ? Un cours c'est bien (et cher), un livre aussi, mais... tous les exemples qu'on donne te sont fournis avec une méthode... plus ou moins efficace.

Ce qui est intéressant, c'est d'être confronté à un problème concret et trouver une méthode pour le résoudre, et avec le forum, soit de l'optimisée, soit de découvrir d'autres méthodes.
Plus tu galères sur une solution, plus tu apprends/comprends comment il faut raisonner et ce qu'il faut faire. Il vaut mieux trouver une méthodologie sur de petits programmes, que de se lancer sur une usine à gaz.
A+
 
Re : Macro pour copier/coller selon critère

Bonjour Gorfael et le forum.
Ci joint, ma feuille saisie avec la macro (qui bug toujours😕)...
Il n'y a que la feuille "saisie" car ça faisait un trop gros fichier en pièce jointe... Mais les autres feuilles sont les mêmes que dans mon 1er poste et on peut les imaginer via la macro...
Y a un truc qui m'échappe, mais je ne trouve pas quoi. Et le "débogage" ne m'aide pas.
J'ai pourtant l'impression d'avoir fait juste cette fois-ci🙁
Peux-tu jeter un oeil et m'éclaircir???
J'ai fait peut-être trop simple... J'ai abandonné F et X... Mais j'ai changé tous mes Worksheets pour les nommer.
Je me suis peut-être attaqué à trop gros, mais comme j'ai besoins de ça comme ça...
C'est venu spontanément!😱
Merci à +
 

Pièces jointes

Re : Macro pour copier/coller selon critère

Salut penelope et le forum
J'ai récupéré ta feuille de saisie, mais... pas ton code. Mets to code dans un poste, ainsi que deux ou trois noms de tes onglets.
Et le "débogage" ne m'aide pas.
Comme tous les outils : faut apprendre à s'en servir pour qu'ils deviennent utiles.
Si tu te retrouves avec une ligne lors du débogage, ça signifie qu'en exécutant cette ligne, Excel rencontre une erreur de fonctionnement. En règle générale, c'est du à une erreur de variable (son contenu n'est pas ce que tu avais prévu) : il faut donc vérifier chaque variable à cette ligne.
A+
 
Re : Macro pour copier/coller selon critère

re-bonjour Gorfael et le forum,
Je suis d'accord pour le déboggage... j'ai compris par rapport aux lignes correspondantes qu'il y avait erreur... mais les erreurs possibles qu'il me soumet sont soit en chinois, soit ne conviennent pas, soit tout paraît juste... pour les variables, j'ai bien vérifier aussi!😛
Je remet un fichier joint et la copie de mon code si dessous...

Sub ENREGISTREMENT_QuandClic()

Select Case [A24]
Case "BLUE DAMASK"
Range("B24:L24").copy destination: Worksheets("détails Blue").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents

Case "AILTON"
Range("B24:L24").copy destination: Worksheets("détails Ailton").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "DEBBY"
Range("B24:L24").copy destination: Worksheets("détails Debby").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "FIGHTING"
Range("B24:L24").copy destination: Worksheets("détails Fighting").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "MAJOR"
Range("B24:L24").copy destination: Worksheets("détails Major").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "GABALDEN"
Range("B24:L24").copy destination: Worksheets("détails Gabalden").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "Ganimette"
Range("B24:L24").copy destination: Worksheets("détails Ganimette").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "LUMISSON"
Range("B24:L24").copy destination: Worksheets("détails Lumisson").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "SAHARA"
Range("B24:L24").copy destination: Worksheets("détails Sahara").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "MAINTOP"
Range("B24:L24").copy destination: Worksheets("détails Maintop").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "MOPSOS"
Range("B24:L24").copy destination: Worksheets("détails Mopsos").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "ZAFEERELI"
Range("B24:L24").copy destination: Worksheets("détails Zafeereli").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "GANIMETTE HAIES"
Range("B24:L24").copy destination: Worksheets("détails Ganimette haies").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "GANIMETTE STEEPLE"
Range("B24:L24").copy destination: Worksheets("détails Ganimette steeple").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "DEBBY HAIES"
Range("B24:L24").copy destination: Worksheets("détails Debby haies").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "FIGHTING HAIES"
Range("B24:L24").copy destination: Worksheets("détails Fighting haies").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "FIGHTING STEEPLE"
Range("B24:L24").copy destination: Worksheets("détails Fighting steeple").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "EDWARD"
Range("B24:L24").copy destination: Worksheets("détails Edward").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "EDWARD HAIES"
Range("B24:L24").copy destination: Worksheets("détails Edward haies").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents


Case "EDWARD STEEPLE"
Range("B24:L24").copy destination: Worksheets("détails Edward Steeple").Range ("A4:K4")
expression.Save
[A24:L24].ClearContents

End Select



End Sub
 

Pièces jointes

Re : Macro pour copier/coller selon critère

Salut penelope et le forum
C'est comme à l'école : quand tu fais une faute de syntaxe, tu es sanctionnée. Excel te donne un code d'erreur, parce qu'il est poli ^^
Destination:sheets(... : Excel y en a pas avoir compris
Expession.save : Excel ne sait pas ce que ça veut dire (et moi non plus) !

Si tu corriges ton code dans ce style :
Code:
Sub ENREGISTREMENT_QuandClic()

Select Case [A24]
    Case "BLUE DAMASK"
        Range("B24:L24").Copy Destination:=Worksheets("détails Blue").cells(rows.count,"A").end(xlup)(2)
        [A24:L24].ClearContents
        
    Case "AILTON"
        Range("B24:L24").Copy Worksheets("détails Ailton").cells(rows.count,"A").end(xlup)(2)
        [A24:L24].ClearContents

'...................
End Select
End Sub
Ça devrait être mieux.
Code:
Range("B24:L24").Copy Destination:Worksheets("détails Blue").Range("A4:K4")
N'est pas la bonne syntaxe : il manque le "=" (comme dans le code au-dessus. Moi, étant feignant, je le supprime : Excel comprend qu'après le.Copy, c'est la destination.

Deux choses : quand tu copies une plage, ne donne pas la plage d'arrivée. Si, comme là, elle est fixe, c'est pas grave. Mais si elle est variable...
Donne juste la cellule à partir de laquelle il va coller. Sauf quand tu as une ligne( par exemple) que tu veux coller plusieurs fois.

La cellule d'arrivée : tu ne peux pas la fixer en "dur", comme tu l'as fait. Il faut qu'excel calcule où il doit coller. Avec Excel, toujours moult solutions, mais la plus simple c'est
Cells(rows.count,"A").end(xlup) pour trouver la dernière cellule non-vide (.End) de A, en partant de la dernière ligne de la feuille (rows.count) et en remontant (xlUp).
Comme c'est la cellule juste après qui nous intéresse (première cellule vide), on devrait faire un .Offset(1,0), qui est remplaçable par "(2)".

Expression.save : Je ne sait pas ce que tu cherches à faire. Explique
A+
 
Re : Macro pour copier/coller selon critère

Salut

voir si cela correspond à ce que tu veux :
Code:
Sub ENREGISTREMENT_QuandClic()
 
  With Sheets("détails " & [A24])
    Range("B24:L24").Copy .Range("A" &  .Cells(Rows.Count, 1).End(xlUp).Row + 1)
  End With
  'je ne connais pas :  expression.Save
  [A24:L24].ClearContents

End Sub

Attention aux noms des onglets !
 

Pièces jointes

Dernière édition:
Re : Macro pour copier/coller selon critère

Bonsoir Gorfael, Si... et le forum,
Merci pour vos réponse.
Avant tout, excusez moi du manque de temps accordé pour le moment à vos réponses, je vais m'y mettre plus intensément ce week-end... Mais j'ai déjà regardé un petit peu:
Pour Si: Ton code pour faire apparaître les onglets est incroyable. Je me suis pas encore penchée dessus, mais ça m'intrigue, car j'ai passé pas mal de temps (niveau excel oblige...) pour créer tous mes onglets... Bon cela dit, j'en ai encore d'autres que je n'ai pas fait figuré, qui contiendront les résumés des onglets détails avec des formules de calculs... mais ça, c'est une autre histoire et un problème après l'autre...
Pour le code, j'ai regardé, mais quelque chose m'échappe:


With Sheets("détails " & [A24])
Range("B24:L24").Copy .Range("A" & .Cells(Rows.Count, 1).End(xlUp).Row + 1)
End With

Tu fais ça pour chaque cheval (resp. onglet)?

Row + 1) === autre méthode que Gorfael pour coller dans la ligne suivante?

Pour Gorfael: (MERCI!!! je sais, ça nourrit pas, mais quand même)
Ton explication est super claire et j'ai même compris!🙄
Donc comme dit plus haut, je regarde ce weekend et te redis.
Expression.save est ce qu'Excel m'a proposé de mettre dans mon code pour l'enregistrement des données... Car je souhaiterais que tout s'enregistre automatiquement, dès la ligne copiée..., vu qu'en principe, je ne vais pas aller sur ces onglets systématiquement, et utiliser uniquement la feuille "saisie".
A +
 
Re : Macro pour copier/coller selon critère

Bonsoir


Pour moi, une raison essentielle de la création d’une macro est d’éviter les répétitions de tâches. Tu en as 2 exemples ici.


Je n’avais pas l’intention de créer et nommer les feuilles une par une donc je suis passé par la première macro. Elle a pour autre avantage d’avoir des noms d’onglet similaires : « détail (nom du cheval) » et ceci est très important pour la macro d’enregistrement qui doit « viser » la bonne feuille.

Cette seconde procédure n’a pas de garde-fou pour l’erreur si [A24] est vide !

Je ne l’ai pas commentée (elle me semblait basique). Je le fais donc maintenant.

Sub ENREGISTREMENT_QuandClic()

On vise l’onglet dont le nom est "détail (contenu de la cellule A24)"
With Sheets("détails " & [A24]) 'erreur si [A24] est vide et pas d’onglet nommé « détails »

On copie la plage B24 :L24 à partir de la première cellule non vide de la colonne A de la cible
Range("B24:L24").Copy .Range("A" & .Cells(Rows.Count, 1).End(xlUp).Row + 1)

On pourrait écrire (proposition de Gorfael)
Range("B24:L24").Copy .Range("A" & .Cells(Rows.Count, 1).End(xlUp).Row).Offset(1,0)


End With

On efface la plage (les listes de validation restent quand même).
[A24:L24].ClearContents

End Sub

Dernières remarques :
- attention aux points dans la ligne :
Range("B24:L24").Copy .Range("A" & .Cells(Rows.Count, 1).End(xlUp).Row + 1).

- Copy fait une copie intégrale (contenus, formules et formats).
Si on ne veut que les valeurs, on passera plutôt par :
Code:
    Dim Dli as Long  
    With Sheets("détails " & [A24])  
        Dli = .Cells(Rows.Count, 1).End(xlUp).Row + 1
        .Range("A" & Dli & ": K" & Dli) = Range("B24:L24") .Value
    End With

On a donc une macro simple qui traite tous les cas, un par un, selon leur choix en A24.

Pour la sauvegarde, il y a de nombreuses possibilités, à toi de voir celle qui te conviendra le mieux.
 
Re : Macro pour copier/coller selon critère

Bonsoir Si... et le forum,

Je te remercie pour tes explications. En effet, c'est plus clair pour moi... car ce qui est "basique" pour toi, ne l'est pas forcément pour moi...
Tout ça va m'être très utile, et il me tarde de le "tester" et de faire des erreurs 🙂cool🙂 pour en savoir plus!!!
J'ai juste une question sur ton premier code (celui qui détermine la création des onglets en fonction de la liste de validation): où (cellules?) place tu la macro? moi j'avais créer un bouton qui renvoyait au code. (le deuxième, pour copier/coller)...
A +
 
- 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
4
Affichages
517
Réponses
2
Affichages
628
Réponses
6
Affichages
767
Retour