Code vba

Résolu
Bonjour j'ai ecris ude vba mais qui ne veut pas fonctionner un message apparait "erreur de compilation" quand j affecte la macro elle ne veut pas feoctionner voila le contenu de la vba:
Sub Feuil2()

Dim cl As Range
If [K1] = "" Then Exit Sub
For Each cl In Range("B2:B" & [B1000].End(xlUp).Row)
If cl.Value = [K1] Then
cl.Resize(1, 5).Copy Sheets("Feuil2").Range("B" & Sheets("Feuil3").[B1000].End(xlUp).Row)
End If
MsgBox "OK ", vbOKOnly

Next
End Sub

Pourriez vous m eclairer sur ce probleme Merci

4 réponses

  1. Salut,

    Dis moi ce que tu essayes de faire pour commencer.
    Pourquoi mets-tu des crochets?
    0
    1. Bonjour Pierre1310,

      Voici la raison des crochets : [K1] est une façon abrégée d'écrire Range("K1")
      mais il faut mettre des crochets pour que VBA ne le confonde pas avec un
      nom K1 (nom de variable, d'une constante, ou autre).

      Attention : il y a des cas où l'écriture abrégée avec crochets ne peut pas être
      utilisée ; il faut alors mettre quand même Range("K1").

      Cordialement.  😊
      0
  2. Bonjour Hafidi,

    Pour commencer, je déconseille vivement de nommer une Sub
    avec un nom de feuille, donc pas de Sub Feuil2() ! Choisis un
    autre nom, de préférence plus explicite, mais pas trop long
    quand même ! Exemple : CopyNomsClients()

    Tu n'as pas indiqué sur quelle ligne est ton erreur de compilation !
    Mais je pense que c'est sur ta ligne #5, n'est-ce-pas ? Essaye :

    
    Dim dlig As Long ' dernière ligne
    dlig = Range("B" & Rows.Count).End(xlUp).Row
    
    For Each cl In Range("B2:B" & dlig)
    ...
    Next cl
    
    

    Mais comme l'as noté Pierre1310, ce serait mieux que tu nous
    indique d'abord ce que tu essayes de faire :

    Pour la copie que tu veux faire, précise la source : feuille et plage
    de cellules ; donnes les mêmes précisions pour la destination.

    Est-ce que ta copie doit aussi prendre en compte Feuil3 ?
    Ou l'as-tu mis par erreur au lieu de Feuil2 ?

    Sans savoir ce que tu veux vraiment faire, et sans voir ton classeur
    (organisation de tes données), difficile de déterminer quoi faire !

    De plus, je crois que ton cl.Resize(1, 5) est inutile et complique
    ton code pour rien !

    À te lire, cordialement.  😊
     
    0
    1. Si tu veux vraiment mettre le long à la suite d'une chaîne de caractère (ce qui est impossible dans tous les langages), il faut que tu le stocke au préalable dans une variable de type char (caractère) et seulement la tu pourras mettre ta donnée à la suite d'une chaîne de caractère.

      J’espère que tu as compris ce que je veux dire.
      0
    2. @Pierre1310Si, j'ai bien compris ce que tu veux dire ; mais en fait, c'est inutile de faire
      ce que tu proposes car VBA fait une conversion automatique et implicite
      du nombre dlig en chaîne de caractères afin de pouvoir concaténer celle-
      ci avec "B2:B". Fais l'essai : tu verras qu'il n'y a ni erreur de compilation,
      ni erreur d'exécution, et tu auras le résultat attendu. Cordialement.  😊
      0
  3. Problème résolu merci pour les explications et Bravo pour les conseils Je suis en train de faire mes premiers pas dans le vba (mon souci etait de transferer des données d'une feuille à une atre) j'aurais besoin de vous mon email est le suivant ***@*** à bientôt hafidi
    0
    1. Bonsoir hafidi,

      La règle sur le site CCM est de se tutoyer, dans le respect et la courtoisie.
      Tu peux donc me tutoyer toi aussi.

      Je suis content que mes explications t'ont aidé à résoudre ton problème,
      et que tu as apprécié mes conseils.

      Puisque ton problème est réglé, merci d'aller en haut de page pour cliquer
      sur le lien « Marquer comme résolu ».

      --------------------------------------------------------

      Attention : un forum est comme une place publique où tout le monde peut
      lire tes messages. Aussi, pour des raisons de confidentialité, ton adresse
      mail a été masquée par le système (cela pour tes 2 messages #6 et #7).

      Tu peux poster ton message sur le forum, mais si tu as quelque chose
      de privé et confidentiel à me dire, tu peux cliquer sur mon pseudo, puis
      cliquer sur le bouton bleu « Lui écrire un message ».

      Mais pour que je puisse te répondre, il faut que tu t'inscrive sur le site CCM
      (c'est entièrement gratuit, et sans aucune obligation d'achat). De plus,
      il faudra aussi que la case à cocher suivante soit décochée :

      ☐ Empêcher les autres membres de vous envoyer des messages privés.

      --------------------------------------------------------

      C'est avec plaisir que je t'aiderai pour ce que tu veux me demander,
      si toutefois c'est dans mes compétences.

      Cordialement.  😊
       
      0
  4. mon email est le suivant (***@***)
    0
    1. Poste ici si tu as besoin d'aide.
      0
    2. Bonsoir hafidi, j'ai bien vu tes 2 messages #6 et #7, et tu peux
      aller lire mon message #9 ; à te lire, cordialement.  😊
      0