Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

Copier/Coller sous condition en code VBA

  • Initiateur de la discussion Initiateur de la discussion Erplast
  • Date de début Date de début

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 !

E

Erplast

Guest
Bonsoir,

Je suis en train de créer un programme VBA sur Excel. J'arrive à un point bloquant et j'ai besoin d'aide.

Au moment ou je suis dans mon code VBA, je concatène 4 valeurs en cellule K4. Les valeurs de la ligne K sont générées automatiquement par Excel. La liste situé sous la ligne K est la liste complète de mon programme, elle est donc figé.
Je souhaiterais que mon code VBA, selectionne la ligne 4 et la copie dans la liste en dessous à l'endroit ou la colonne 4 corresponds à la valeur de K4. (je pense que la pièce jointe est parlante).

Est ce qu'une personne peut bien m'aiguiller sur un code VBA ?

Merci énormément de votre aide.
 

Pièces jointes

Re : Copier/Coller sous condition en code VBA

Bonsoir.
Ça dépend. Si la manœuvre est assez sporadique vous pouvez utiliser Application.Match avec mêmes paramètres que EQUIV pour obtenir le numéro relatif de la ligne, ou bien la méthode Find pour tomber sur la cellule de la bonne ligne. S'il y en a beaucoup à faire il pourrait être plus intéressant de ranger les numéros de lignes dans un Dictionary.
 
Re : Copier/Coller sous condition en code VBA

Bonjour Dranreb,

Merci pour cette réponse rapide.

C'est une opération très courante par conséquent j'espère trouver un code bien "huilé". Je ne connais pas du tout la fonction Dictionary ? Peux tu m'en dire plus ?

Merci d'avance.
 
Re : Copier/Coller sous condition en code VBA

Bonjour.
Ce n'est pas une fonction mais un type d'objet.
Beaucoup l’utilisent via une variable de type Object car il existe l'expression CreateObject("Scripting.Dictionary") qui représente une nouvelle instance de cet objet. Mais c'est sans assistance par la suite à la programmation de son utilisation, et avec liaisons tardives (retardées jusqu'au moment de l'exécution) aux méthodes et propriétés de l'objet.
Je conseille donc plutôt de cocher "Microsoft Scripting Runtime" parmi les références disponibles de menu Outils, Références…
De cette façon vous pourrez déclarer un MonDico As Dictionary, faire avant de l'utiliser Set MonDico = New Dictionary, et vous aurez des liaisons anticipées (résolues dès la compilation) à ses propriétés ou méthodes Add, Key, Keys, Item, Items, Exists et Count, lesquelle vous sont suggérées dans une liste dès la frappe d'un point derrière le nom de votre variable Dictionary ainsi que les paramètres qu'ils leur faut ensuite.
 
Dernière édition:
Re : Copier/Coller sous condition en code VBA

Bonjour,

Peut être à cause de mon inexpérience, je ne comprends pas grand chose à votre explication. Pouvez vous me montrer un exemple sur ma pièce jointe ?
 
Re : Copier/Coller sous condition en code VBA

Soit, mais pourquoi comprendriez vous mieux l'exemple ? Vous disiez vouloir être "aiguillé", alors pourquoi ne cherchez vous pas à assimiler le jargon en me demandant des explications sur le sens des mots, c'est la clé pour tout comprendre par la suite, y compris les aides d'Excel et de VBA.

Dans la liste des références disponibles, menus Outils, Références… de VBE, cherchez et cochez "Microsoft Scripting Runtime".
Mettez le code suivant dans le module Feuil1 (Feuil1) de la rubrique Microsoft Excel Objets
VB:
Option Explicit
Dim Dico As Dictionary

Private Sub Worksheet_SelectionChange(ByVal Target As Range)
Dim T() As Variant, L As Long
If Target.Address <> "$K$4" Then Exit Sub
If Dico Is Nothing Then
   Set Dico = New Dictionary
   T = Range(Feuil1.[K5], Feuil1.[K65536].End(xlUp)).Value
   For L = 1 To UBound(T): Dico.Add T(L, 1), L: Next L: End If
If Not Dico.Exists(Target.Value) Then MsgBox """" & Target.Value _
   & """ n'existe pas.", vbCritical, "Selection K4": Exit Sub
Feuil1.[E4:J4].Offset(Dico(Target.Value)).Value = Feuil1.[E4:J4].Value
End Sub
Le report de E4:J4 vers la bonne ligne de E:J se produira ainsi lors d'une sélection de la cellule K4.
 
Dernière édition:
- 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
Assurez vous de marquer un message comme solution pour une meilleure transparence.

Discussions similaires

Réponses
10
Affichages
1 K
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…