[VBA] Récupération de valeurs variables [Résolu/Fermé]

Signaler
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
-
Messages postés
74
Date d'inscription
mercredi 25 mai 2011
Statut
Membre
Dernière intervention
2 juin 2014
-
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

Messages postés
708
Date d'inscription
lundi 16 mai 2011
Statut
Membre
Dernière intervention
1 décembre 2011
35
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
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
47
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
Messages postés
708
Date d'inscription
lundi 16 mai 2011
Statut
Membre
Dernière intervention
1 décembre 2011
35
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 ;)
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
47
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

Messages postés
708
Date d'inscription
lundi 16 mai 2011
Statut
Membre
Dernière intervention
1 décembre 2011
35
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
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
47
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..
Messages postés
708
Date d'inscription
lundi 16 mai 2011
Statut
Membre
Dernière intervention
1 décembre 2011
35
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?
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
47
Sa s'arrete a la 36eme valeur (alors qu'il y en a plus) et sa n'écris que la derniere (la 36eme)
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
47
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..
Messages postés
708
Date d'inscription
lundi 16 mai 2011
Statut
Membre
Dernière intervention
1 décembre 2011
35
Sheets(2).Cells(i-27,1).Value = Sheets(1).Cells(i,1).Value 
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
47
Le cells(i-27,1) (le -27) créé une erreur..
Messages postés
708
Date d'inscription
lundi 16 mai 2011
Statut
Membre
Dernière intervention
1 décembre 2011
35
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
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
47
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
Messages postés
708
Date d'inscription
lundi 16 mai 2011
Statut
Membre
Dernière intervention
1 décembre 2011
35
Excuse moi, le copier coller me fais default: remplace ton L par un i
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
47
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..
Messages postés
489
Date d'inscription
lundi 14 septembre 2009
Statut
Membre
Dernière intervention
24 septembre 2013
47
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 !
Messages postés
12186
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
15 octobre 2020
2 524
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

Messages postés
74
Date d'inscription
mercredi 25 mai 2011
Statut
Membre
Dernière intervention
2 juin 2014
20
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