VBA Problème de décalage et copie colle de colonne
Bonjour le forum,
Je vous sollicite car après plusieurs tentatives et recherche je ne m'en sors pas, j'explique :
Je cherche à faire décaler sur une même ligne vers la droite ma sélection tant que la valeur qui est dans la cellule n'est pas égale à la valeur dans ma combobox.
Une fois que la valeur de la cellule est égale à celle de la combobox, cette cellule reste sélectionnée, puis en restant sur cette colonne on descend d'une case afin de copier à partir de cette case là jusque la 1000 ème par exemple, puis coller tout sur une autre feuille en cellule F15.
Je vous met un extrait de mon code :
Dim Nom_CE As String
Nom_CE = Sheets("Feuil1").ComboBox1.Value
Worksheets("Recap_stock").Select
Sheets("Recap_stock").Range("i3:i4").Select
While Nom_CE <> ActiveCell.Value
ActiveCell.Offset(0, 1).Select
Wend
ActiveCell.Offset(1, 0).Select
Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(1000, 0)).Select
Worksheets("Feuil1").Select
Sheets("Feuil1").Range("f15").Select
ActiveSheet.PasteJe ne comprend pas pourquoi à cette étape cela ne fonctionne pas :
Range(ActiveCell.Offset(0, 0), ActiveCell.Offset(1000, 0)).SelectJ'ai un message d'erreur : erreur 1004, erreur définie par l'application ou par l'objet.
Pour moi le code est juste, j'ai alors copié collé cette ligne sur un autre module et là, il fonctionne sans soucis...
Aider moi à comprendre pourquoi je n'y arrive pas dans ma feuille
Merci pour votre aide bien précieuse !
Bonsoir La Taupe,
Pour commencer en code on doit absolument éviter les "Select"
Ensuite avec un fichier joint (comme vous devriez le savoir) la compréhension est toujours plus facile
A+
Bonjour Bruno,
Merci pour ton retour je pensais que peut être le code suffirait,
Donc voici le fichier anonymisé,
Je t'explique cela se passe sur la feuille 1 je veux que mes cellules soient copiés collé d'une feuille à une autre en fonction de mes combobox lorsque j'appuie sur le bouton test.
Mon soucis est que je n'arrive pas à faire marché le bouton de commande test sur la feuille 1 j'ai alors essayé en insérant une forme et dans sa macro lui indiqué mon code et là ça fonctionne ...
Je ne comprend pas pourquoi sur mon bouton ca ne marche pas alors que sur ma macro ça marche. En plus de ça il me semble que la macro ralenti le programme alors bon c'est pas top ...
Si tu as une explication à tout ça je veux bien
Après le top du top serait que le code se lance lorsque je change la valeur de mes combobox et que je n'ai pas besoin d'appuyer par après sur un bouton mais pareil je n'ai pas réussis à faire ça.
Si tu as des pistes je te remercie,
Bonjour,
Pour moi le bouton "Test" de la feuille 1 fonctionne
Si je clique sur "Débogage"
Cela m'amène sur la ligne
Et là je me dis
On ne pose pas une ligne comme ça... Quand on code, on ne part pas non plus de "ActiveCell' c'est source à ennui
On pense à définir les objets conteneurs, plus simple pour les manipulations par la suite
Voici le code
Private Sub CBtest2_click()
Dim ShtRS As Worksheet ' Pour définir la feuille Récap Stock
Dim ShtD As Worksheet ' Pour définir la feuilel de destination
Dim ColE As Long, ColD As Long, dLig As Long
' Définir la feuille
Set ShtRS = ThisWorkbook.Sheets("Recap_stock")
Set ShtD = ThisWorkbook.Sheets("Feuil1")
' Dernière ligne du tableau
dLig = ShtRS.Range("E" & Rows.Count).End(xlUp).Row
' Numéro de colonne du lieu d'émission
ColE = Range("H5").Column + Sheets("Feuil1").ComboBox1.ListIndex
' Copier coller les valeur
ShtRS.Range(ShtRS.Cells(5, ColE), ShtRS.Cells(dLig, ColE)).Copy Destination:=ShtD.Range("F14")
' Numéro de colonne du lieu de destination
ColD = Range("H5").Column + Sheets("Feuil1").ComboBox2.ListIndex
' Copier coller les valeur
ShtRS.Range(ShtRS.Cells(5, ColD), ShtRS.Cells(dLig, ColD)).Copy Destination:=ShtD.Range("G14")
End SubA+
Olala, merci à toi,
Je sais pas comment vous faites pour comprendre si bien ce langage, et faire les choses en 2 minutes alors que pour moi il me faut une aprem,
Je dois reconnaitre la satisfaction que procure un code qui marche, mais alors quand tu passes une journée à comprendre une erreur dont tu ne sais pas à quoi elle est dû, la frustration elle est plus grande
Ca marche nickel merci,
J'aurais (juste
Je ne comprend pas ce code :
dLig = ShtRS.Range("E" & Rows.Count).End(xlUp).Row1) Enfaite la tu pars de la colonne E et après ? Ca va jusqu'à la dernière ligne non vide c'est ça ?
Parce que si je viens à rajouter des articles dans la liste ça les prendra bien en compte c'est ça ?
Ensuite, je ne comprend pas :
ColE = Range("H5").Column + Sheets("Feuil1").ComboBox1.ListIndex2) Le range H5 c'est d'où part le code pour aller vers la droite et s'arrêter quand correspond la valeur mais je ne comprend pas à quel moment c'est dit.
Pour moi là tu prends la colonne H à partir de la ligne 5 mais après le + je ne comprend pas. Et je ne comprend pas le .Listindex qu'est-ce qu'il effectue ?
Une dernière chose que j'ai oublié de te demander avant :
3) Je peux rajouter des lieux de stockage, bon je n'ai pas encore créer le bouton pour, mais, si dans la feuille données tu mets à la suite du tableau en dessous un texte il apparait dans les combobox, seulement il apparait pas tout de suite,
Je dois fermer excel puis réouvrir le fichier et la ça a fait la mise à jour dans ma combobox,
Est-ce qu'il y a moyen que la combobox se mettent à jour toute seul sans que je quitte le fichier ou autre ?
4) Pour en revenir au code du bouton, le code fonctionne en appuyant sur le bouton, mais est-ce qu'il est possible que le code se lance automatiquement dès qu'on change la valeur dans la combobox ou c'est impossible ?
Je te remercie pour ton retour,
Et désolé pour toutes ces questions
Re,
Je sais pas comment vous faites pour comprendre si bien ce langage, et faire les choses en 2 minutes alors que pour moi il me faut une aprem,
Because i speak very well VBA
Je ne comprend pas ce code :
dLig = ShtRS.Range("E" & Rows.Count).End(xlUp).Row
1) En fait tu pars de la colonne E et après ? Ca va jusqu'à la dernière ligne non vide c'est ça ?
Parce que si je viens à rajouter des articles dans la liste ça les prendra bien en compte c'est ça ?
Oui, on part de la dernière ligne de la feuille, on remonte vers le haut pour avoir la dernière remplie
Ensuite, je ne comprend pas :
ColE = Range("H5").Column + Sheets("Feuil1").ComboBox1.ListIndex
2) Le range H5 c'est d'où part le code pour aller vers la droite et s'arrêter quand correspond la valeur mais je ne comprend pas à quel moment c'est dit.
Pour moi là tu prends la colonne H à partir de la ligne 5 mais après le + je ne comprend pas. Et je ne comprend pas le .Listindex qu'est-ce qu'il effectue ?
Une Combox à une propriété nommée ListIndex, qui permet de trouver qu'elle ligne à été sélectionnée
ListIndex = -1 => Aucune / ListIndex = 0 => 1ère ligne
Donc dans le tableau Stock, la première colonne de stockage se trouve en H
Je calcul donc la colonne à prendre en fonction du choix
Exemple : Range("H5").Column = 8 + ListIndex (Lieu de stockage 3) = 2 cela donne la colonne 10 à prendre
Je peux rajouter des lieux de stockage, bon je n'ai pas encore créer le bouton pour, mais, si dans la feuille données tu mets à la suite du tableau en dessous un texte il apparait dans les combobox, seulement il apparait pas tout de suite,
Je dois fermer excel puis réouvrir le fichier et la ça a fait la mise à jour dans ma combobox,
Est-ce qu'il y a moyen que la combobox se mettent à jour toute seul sans que je quitte le fichier ou autre ?
1) je n'utiliserai pas des Combox dans une feuille, mais dans un Userform
Ensuite les combo sont liées au nom "ListeChefsEquipe"... Original
Qui fait référence à =DECALER(Données!$B$3;1;0;NBVAL(Données!$B$4:$B$26079);1)
Je ne vois pas de mise à jour de cette feuille nul part
4) Pour en revenir au code du bouton, le code fonctionne en appuyant sur le bouton, mais est-ce qu'il est possible que le code se lance automatiquement dès qu'on change la valeur dans la combobox ou c'est impossible ?
Oui tout à fait, mais je le redis, je ne mettrais pas des combo sur une feuille (pas pro) mais dans un USF
Et il faut utiliser l'évènement "Change"
Perso, j'arrêterai là je pense en avoir déjà trop fait... un développeur ça se paye
Bon courage
C'est top merci beaucoup pour ton aide et tes explications,
Je vais continuer tout ça
Bonjour à tous, et bonjour à toi Bruno, je ne sais pas si tu voudras bien m'aider encore une fois
Voila, donc j'ai avancé sur mon fichier et je me retrouve à une étape où il faut que je fasse l'étape inverse de celle d'avant,
j'explique :
Il faut que en feuille 1 mes données surlignés en jaune soit copié puis collé dans mon tableau sur la feuille récap stock mais dans la colonne correspondante à la valeur de ma combobox 1 et 2. Sur la feuille 1 la colonne L correspond à la combobox 1 et la colonne M correspond à la combobox 2,
Je vous joint mon fichier, celui-ci n'est pas mon fichier mais la même version que la dernière fois pour des raisons d'anonymisation des données,
Donc rassurer vous, il ne ressemble plus à ça et j'ai bien avancer depuis
J'ai essayer de reprendre le code de Bruno et de l'adapter dans mon cas mais je n'y arrive pas, je bloque à la ligne :
'ShtA.Range(ShtA.Cells(5, ColE), ShtRS.Cells(dLig, ColE)).Copy Destination:=ShtA.Range("K14")Ne sachant pas comment rentrer le code après "destination :" puisqu'il ne s'agit pas d'une cellule fixe mais une plage de cellule qui doit correspondre à une combobox ...
Ou alors je m'y prend mal et il faut pas repartir de la base d'avant ?
Je suis un peu perdu
Si quelqu'un peut me venir en aide ou me mettre sur la piste je suis preneur
Persuadé que vous auriez une solution plus rapidement que moi,
Merci beaucouuuup
Bonjour La Taupe
Quand je lis
Voila, donc j'ai avancé sur mon fichier
Je me réjouis, mais quelle déception quand j'ouvre le fichier
Je ne retrouve absolument pas le code donné ici
https://forum.excel-pratique.com/s/goto/1042382
Why ?
Bonjour Bruno,
Excuse moi de mon retour tardif,
Je suis désolé, mais j'ai avancé sur mon fichier, le fichier que j'ai joint est celui que j'avais joint la dernière fois sans aucune modif depuis,
Car mon fichier a des données confidentiel et je ne voulais pas m'embêter à l'anonymiser une nouvelle fois
Maintenant si vraiment tu le souhaites je peux le faire mais je te cache pas que j'arriverais pas à le faire tout de suite.
Ceci étant le fichier que j'ai joint comprend la partie sur laquelle je bloque, je devrais juste l'adapter après avec mes colonnes etc mais sinon le principe sur lequel je bloque est bien présent dans mon fichier.
Ce qui explique que je n'ai pas repris ta correction de la dernière fois sur ce fichier mais ne t'en fais pas j'en ai tenu compte sur mon fichier sur lequel je travail et ça marche à merveille !
Je te remercie
Bonne journée à toi,