[VBA] Récupération de valeurs variables

Résolu
digsaw_- Messages postés 537 Statut Membre -  
trankill076 Messages postés 83 Statut Membre -
Bonjour,

Voila j'ai une boucle qui récupère dans la feuille1, colonne A les valeurs des cellules, et qui les écris ensuite sur la feuille2 colonne A jusqu'a ce qu'il n'y ai plus de valeurs:

C'est à dire colonne A feuille 1 si elle contient 46 lignes, dans la feuille2 il y aura 46 lignes..

Le problème est les valeurs des cellules.. J'aimerais récupérer les valeurs de chaques cellules pour les mettre dans la feuille2. Par exemple si la feuille 1 contient dans 1 cellule la valeur 123456 et dans la deuxieme cellule : 654321

Dans la deuxieme feuille sa sera la meme chose.. seulement ma boucle inscrit qu'il y ai 10 lignes ou 46 lignes la derniere valeur trouvée...

sachant que le nombre de lignes ne peut etre défini..

merci de votre aide !



--
Digsaw
'Avoir une section fumer dans un restaurant, c'est comme avoir une section pisseur dans une piscine !'

16 réponses

  1. Ctesias Messages postés 786 Statut Membre 36
     
    Salut!

    Je n'ai pas trop compris ca :

    Dans la deuxieme feuille sa sera la meme chose.. seulement ma boucle inscrit qu'il y ai 10 lignes ou 46 lignes la derniere valeur trouvée...

    Peut-tu poster ton fichier, ou un semblant de fichier sur ?

    www.cijoint.fr
    0
    1. digsaw_- Messages postés 537 Statut Membre 58
       
      Non je suis désolé je travaille a distance sur ce fichier.. pour faire un semblant je vais essayer en attendant jessaye de te réexpliquer : Ma boucle parcour la colonne A de la feuille1, qu'il y ai 10 lignes (avec des valeurs différentes) ou 45 lignes (de valeurs différentes aussi), ma boucle parcour ces lignes et inscrit les valeurs dans la feuille2 . Le problème est que ma boucle lorsqu'elle inscrit les valeurs dans la feuille2 elle n'inscrit que la derniere valeur trouvée dans la colonne A de la feuille 1 ! et j'aimerais que sa copie chaques valeur comme elle ne sont pas les mêmes..

      Je vais essayer de te donner un fichier similaire.

      Merci pour ton aide
      0
    2. Ctesias Messages postés 786 Statut Membre 36
       
      Link moi ton code, je pense que tu as fait une petite erreur au niveau de ta boucle ;).
      Tu n'as pas du placer correctement ta copie ;)
      0
  2. digsaw_- Messages postés 537 Statut Membre 58
     
    Dim derniereLigne3 As Integer
    Dim monTexte3 As String
    
    derniereLigne3 = Sheets(1).Range("a27").End(xlDown).Row - 27
    
    For l = 1 To derniereLigne3
        monTexte3 = Sheets(1).Range("a" & l).Value
    
    
        For i = 1 To derniereLigne3
            Sheets(2).Range("C1").Offset(i, 0).Value = monTexte3
        Next
    
    Next
    
    
    0
  3. Ctesias Messages postés 786 Statut Membre 36
     
    Tu ne peux pas tenter cela?

    Dim derniereLigne3 As Integer 
    Dim monTexte3 As String 
    
    derniereLigne3 = Sheets(1).Range("a27").End(xlDown).Row - 27 
    
    For l = 1 To derniereLigne3 
        Sheets(2).Range("C1").Offset(i, 0).Value = Sheets(1).Range("a" & l).Value 
    Next


    ou bien :

    Dim derniereLigne3 As Integer 
    Dim monTexte3 As String 
    
    derniereLigne3 = Sheets(1).Range("a27").End(xlDown).Row - 27 
    
    For l = 1 To derniereLigne3 
        Sheets(2).Cells(i,1).Value = Sheets(1).Cells(i,1).Value 
    Next
    0
  4. digsaw_- Messages postés 537 Statut Membre 58
     
    Alors la premiere refais comme la mienne.. sauf que la sa n'écris qu'une seule fois la derniere valeur de la colonne A feuille1

    Et la deuxieme récupère bien les valeur MAIS (car il y en a toujours 1 ^^ ) elle l'écris dans la colonne A de la feuille 2 au lieu de la C bon sa c'est changeable mais sa ne supprime plus les 27 ignes Vides qu'il y a au dessus d'ou le : Row - 27 qu'il y a dans ma boucle..
    0
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. Ctesias Messages postés 786 Statut Membre 36
     
    Dim derniereLigne3 As Integer 
    Dim monTexte3 As String 
    
    derniereLigne3 = Sheets(1).Range("a27").End(xlDown).Row - 27 
    
    For l = 27 To derniereLigne3 
        Sheets(2).Cells(i,1).Value = Sheets(1).Cells(i,1).Value 
    Next


    et comme ca? Si tu commence ta boucle à la ligne 27?
    0
  7. digsaw_- Messages postés 537 Statut Membre 58
     
    Sa s'arrete a la 36eme valeur (alors qu'il y en a plus) et sa n'écris que la derniere (la 36eme)
    0
  8. digsaw_- Messages postés 537 Statut Membre 58
     
    J'ai trouvé poyurquoi sa s'arrétais on a fait une érreur toute pourrie c'est la variable i = 1 to derniereLigne on avait laissé L..

    Mainteant sa marche je récupère bien les valeurs ! Mais il les inscrits avec les caces vides qu'il y a au dessus.. 25 lignes ici..
    0
  9. Ctesias Messages postés 786 Statut Membre 36
     
    Sheets(2).Cells(i-27,1).Value = Sheets(1).Cells(i,1).Value 
    0
  10. digsaw_- Messages postés 537 Statut Membre 58
     
    Le cells(i-27,1) (le -27) créé une erreur..
    0
  11. Ctesias Messages postés 786 Statut Membre 36
     
    Huhuh... pas pensé... mais 27 - 27, ca fait 0...

    Essai avec un -26

    et si ca ne marche pas , essai:

    For l = 27 To derniereLigne3 
        i = i - 26
        Sheets(2).Cells(i,1).Value = Sheets(1).Cells(i,1).Value 
    Next
    0
  12. digsaw_- Messages postés 537 Statut Membre 58
     
    Je veux bien essayer mais a quoi sert le l = 27 To derniereLigne3 ? Car le l ne réapparait pas..

    Et le - 26 marche seulement sa me bouffe la premeire ligne qui est le libellé de la colonne
    0
  13. Ctesias Messages postés 786 Statut Membre 36
     
    Excuse moi, le copier coller me fais default: remplace ton L par un i
    0
  14. digsaw_- Messages postés 537 Statut Membre 58
     
    Ne t'excuse pas c'est pas grave =)

    j'ai donc ceci

    For i = 27 To derniereLigne3
    i = i - 26
    Sheets(2).Cells(i, 3).Value = Sheets(1).Cells(i, 1).Value
    Next

    Et sa me met une erreure..
    0
  15. digsaw_- Messages postés 537 Statut Membre 58
     
    Oui bah je suis con... j'ai mis - 25 au lieu de - 26 carje t'ai dis que le - 26 me bouffais le libellé... -_-

    des fois c'eszt en face de nous et on le vois pas ! ^^

    Merci beaucou pour ton aide !
    0
  16. pijaku Messages postés 13513 Date d'inscription   Statut Modérateur Dernière intervention   2 773
     
    Bonjour,
    1- suis surpris que ceci fonctionne :
    For i = 27 To derniereLigne3 
    i = i - 26 
    Sheets(2).Cells(i, 3).Value = Sheets(1).Cells(i, 1).Value 
    Next 

    Mais si tu le dis...

    2- la déclaration des variables est très importante lorsque l'on parle de code VBA. Il faut déclarer toutes les variables, et leur donner un nom explicite d'au moins 3 caractères. Les i et autres l sont à prohiber, vous en aveze eu la preuve à patauger au début de cette discussion.
    A titre d'exemple :
    1- une boucle sur les lignes
    Dim Lign As Integer
    For Lign = 1 To 20
        Cells(Lign, 1) = "Toto" & Lign
    Next
    est immédiatement explicite. Non?
    2- Sur les colonnes?
    Dim Col As Integer
    For Col = 1 To 20
        Cells(2, Col) = "Toto" & Col
    Next

    3- La dernière ligne non vide de la colonne A :
    Dim DernLign As Long
    DernLign = Sheets("Feuil1").Columns(1).Find("*", , , , xlByColumns, xlPrevious).Row

    0
  17. trankill076 Messages postés 83 Statut Membre 22
     
    Ou plus simplement avec un While

    i = 1
    While Feuil1.Cells(i, 1) <> ""
      Feuil2.Cells(i, 1) = Feuil1.Cells(i, 1)
      i = i + 1
    Wend


    La boucle copie chaque cellule de la première colonne de la première feuille dans la cellule correspondante de la feuille 2 et s'arrête dès qu'elle trouve une cellule vide

    Je suis d'accord avec pijaku en ce qui concerne les noms des variables
    0