[VBA] Récupération de valeurs variables

Résolu
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   -  
trankill076 Messages postés 74 Date d'inscription   Statut Membre Dernière intervention   -
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 !



16 réponses

Ctesias Messages postés 724 Date d'inscription   Statut Membre Dernière intervention   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
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   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
Ctesias Messages postés 724 Date d'inscription   Statut Membre Dernière intervention   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
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   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
Ctesias Messages postés 724 Date d'inscription   Statut Membre Dernière intervention   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
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   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

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Ctesias Messages postés 724 Date d'inscription   Statut Membre Dernière intervention   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
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   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
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   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
Ctesias Messages postés 724 Date d'inscription   Statut Membre Dernière intervention   36
 
Sheets(2).Cells(i-27,1).Value = Sheets(1).Cells(i,1).Value 
0
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   58
 
Le cells(i-27,1) (le -27) créé une erreur..
0
Ctesias Messages postés 724 Date d'inscription   Statut Membre Dernière intervention   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
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   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
Ctesias Messages postés 724 Date d'inscription   Statut Membre Dernière intervention   36
 
Excuse moi, le copier coller me fais default: remplace ton L par un i
0
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   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
digsaw_- Messages postés 489 Date d'inscription   Statut Membre Dernière intervention   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
pijaku Messages postés 12263 Date d'inscription   Statut Modérateur Dernière intervention   2 761
 
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
trankill076 Messages postés 74 Date d'inscription   Statut Membre Dernière intervention   21
 
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