[VBA] Récupération de valeurs variables

Résolu
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. 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. 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. 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. 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
    1. 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
      1. 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
        1. 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
          1. Sa s'arrete a la 36eme valeur (alors qu'il y en a plus) et sa n'écris que la derniere (la 36eme)
            0
            1. 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
              1. Sheets(2).Cells(i-27,1).Value = Sheets(1).Cells(i,1).Value 
                0
                1. Le cells(i-27,1) (le -27) créé une erreur..
                  0
                  1. 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
                    1. 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
                      1. Excuse moi, le copier coller me fais default: remplace ton L par un i
                        0
                        1. 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
                          1. 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
                            1. Modérateur
                              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
                              1. 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