Problème code VBA

cs_johndi Messages postés 10 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 1 mars 2011 - 1 mars 2011 à 14:07
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 - 1 mars 2011 à 22:04
Bonjour a tous,

Je souhaiterai obetnir de l'aide concernant ce code.
Dim k As Integer
Dim a As Integer

a = 1
For i = 10357 To 2 Step -1
k = 2
Do While k < 10357
If Cells(i, 1).Value = Cells(i - 1, 1) Then
Cells(i - 1, 1).EntireRow.Insert
Cells(i - 1, 1).Value = Cells(k, 1).Value
Cells(i - 1, 2).Value = Cells(k, 2).Value
Cells(i - 1, 3).Value = Cells(k, 3).Value
Cells(i - 1, 6).Value = Cells(k, 6).Value
Cells(i - 1, 7).Value = Cells(k, 7).Value
Cells(i - 1, 8).Value = Cells(k, 8).Value
Cells(i - 1, 21).Value = "OT:" & Cells(k, 2).Value
a = a + 1
End If
k = i + 1
a = 1

Loop
Next

je que je souhaiterai faire s'est dès que la cellule 1 est identique à celle de dessus elle me copie les cellule dont j'ai besoin.

mais là est le souci.

elle reste au meme endroit donc pour moi je ne comprend.

J'ai essayé de manipuler un peu mais sa fais maintenant 4h que je suis dessus et il faut que j'avance.

merci pour votre aide a tous.

Johndi

13 réponses

us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
1 mars 2011 à 18:09
Bonjour,

C'est brouillon !

A quoi sert la variable "a" ? Non réponds pas, je sais... à rien...

Ensuite si tu expliques mieux ce que veut faire.
la cellule 1 est identique à celle de dessus elle me copie les cellule dont j'ai besoin


La cellule 1 ?!? peut-être la cellule A10357 = A10356 ?
Tu veux en faire la recopie où ?

Une chose est sur la variable k semble également superflu...

Amicalement,
Us.
0
AlKatou Messages postés 95 Date d'inscription vendredi 7 février 2003 Statut Membre Dernière intervention 28 novembre 2017
1 mars 2011 à 18:24
salut,

us_30 expose exactement ce qui nous parait très flou.

Mais nous aurions besoin de plus de précision. Entre autre avoir un exemple (une présentation super rapide) de ton tableau du style :

Col_A    Col_B   Col_C
 inf1    AAjks   dfpl
 inf2    dqâm    ...
 inf2    ...
 inf3
 ...


Et nous indiquer un exemple de résultat voulu.

J'espère ne pas être flou


Sinon la raison pour laquelle ton code reste au "même endroit", c'est dû à ton instruction (k i + 1). En gardant ton code, tu aurais du mettre k k + 1.


Alka
0
cs_johndi Messages postés 10 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 1 mars 2011
1 mars 2011 à 19:24
MERCI pour vos réponses:

ce que j'ai dans mon fichier:

col_A | Col_B | col_C
A | AB | AB1
A | AA | AA2
C | CB | CB1
C | CA | CB2
B | AB | AB1
B | AE | AE1

ce que je voudrais:

col_A | col_B | col_C
A | AB | AB1 (ligne à insérer)
A | AB | AB1
A | AA | AA2 (ligne à insérer)
A | AA | AA2
C | CB | CB1 (ligne à insérer)
C | CB | CB1
C | CA | CB2 (ligne à insérer)
C | CA | CB2
B | AB | AB1 (ligne à insérer)
B | AB | AB1
B | AE | AE1 (ligne à insérer)
B | AE | AE1

Je m'explique:
Si cellule a egale cellule(a-1) du dessus alors il me copie les cellules
en colonne B et en colonne C.

voila j'espère que c'est plus compréhensible.


Pour les variables je galère un peu. je suis débutant en VBA.

merci encore pour votre aide.

JO
0
cs_johndi Messages postés 10 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 1 mars 2011
1 mars 2011 à 19:41
je me relie et s'est la galère . bref je recommence

je pense que je dois commencer en fin de fichier:

si cell A30 est égale à A 29 donc j'insère une ligne en dessus de celle de A30.
donc la cellule A30 deviendra A 31 et la ligne insérer deviendra la ligne A30 puis je copie la cellule A31 , B31 , C31 en A30, B30, C30.

au total j'ai plus de 10000 lignes donc ce code me rendrait vraiment service.

jo
0

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

Posez votre question
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
1 mars 2011 à 20:03
Sub Macro2()

dernier = Feuil1.UsedRange.Rows.Count + Feuil1.UsedRange.Row - 1

For t = 1 To 2 * dernier Step 2
    Rows(t & ":" & t).Copy
    Rows(t + 1 & ":" & t + 1).Insert Shift:=xlDown
Next t

End Sub


Le code réalise ce que tu donnes en résultat. Il reste à l'adapter à ton tableau (n° ligne, nom feuille, etc)

Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
1 mars 2011 à 20:05
oups... je n'avais pas vu ton message précédent (pb rafraichissemment)

A tout à l'heure, je dois y aller pour l'instant..

Amicalement,
Us.
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
1 mars 2011 à 20:10
Tu sais que tu n'es pas clair !... Je vois il faut rajouter un test pour savoir si les lignes sont identiques... mais on comprends pas comment dans ce cas, on arrive à ton résultat ?

En effet, pour les 3ere lignes du départ :

1 > A | AB | AB1
2 > A | AA | AA2
3 > C | CB | CB1

Tu regardes quoi ??

Si ligne 1 contient A et ligne 2 contient aussi A, alors on duplique la ligne 1 ?
Puis, si ligne 2 contient A est différent de la ligne 3 qui contient B, on fait quoi ?

Bref, toujours pas clair

Amicalement,
Us.
0
cs_johndi Messages postés 10 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 1 mars 2011
1 mars 2011 à 20:31
Sub insert()

dernier = Feuil1.UsedRange.Rows.Count + Feuil1.UsedRange.Row - 1

For t = 100 To 2 * dernier Step 2
Rows(t & ":" & t).Copy
Rows(t - 1 & ":" & t - 1).Insert Shift:=xlDown

If Cells(t, 1).Value = Cells(t - 1, 1) Then
Cells(t - 1, 1).EntireRow.Insert
Cells(t - 1, 1).Value = Cells(t, 1).Value
Cells(t - 1, 2).Value = Cells(t, 2).Value
Cells(t - 1, 3).Value = Cells(t, 3).Value
Cells(t - 1, 6).Value = Cells(t, 6).Value
Cells(t - 1, 7).Value = Cells(t, 7).Value
Cells(t - 1, 8).Value = Cells(t, 8).Value
Cells(t - 1, 21).Value = "OT:" & Cells(t, 2).Value
End If
Next t
End Sub

je suis dsl je ne comprend pas ton code.
De plus il duplique la ligne et ensuite il insere une ligne et me colle ce que je veux et le code commence a la ligne que je veux mais ne remonte pas jusqu'a la première ligne.

pourrais tu m'en dire plus STP?

merci pour ton aide.

JO
0
cs_johndi Messages postés 10 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 1 mars 2011
1 mars 2011 à 20:36
ok

le cellule qu'il faut regarder est la cllule de la colonne A.

Exemple: Si A3 est identique à A2 donc j'insère une ligne au dessus de A3 et je colle ce que je veux sur cette ligne . dans ce cas c'est les cellules de l'ancienne ligne de A3, qui est devenue ligne 4 car j'ai inséré une ligne en dessus.

merci.
0
cs_johndi Messages postés 10 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 1 mars 2011
1 mars 2011 à 20:50
bon je comprend un peu ton code.

cepndant , je ne peux pas faire du copier coller directement de ligne a ligne car je souhaite dans une cellule faire un concatener.
avec ton code je serai obliger de reprendre toute mes lignes pour rectifier la cellule.

enfin voila

jo
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
1 mars 2011 à 21:07
Ce que tu veux est contradictoire !

Si tu veux reprendre par le bas, en reprenant ta partie de code qui recopie les lignes, cela donne :

Sub Macro2()

dernier = Feuil1.UsedRange.Rows.Count + Feuil1.UsedRange.Row - 1

For t = 2 * dernier To 1 Step -2

If Cells(t, 1).Value = Cells(t - 1, 1) Then
    Cells(t - 1, 1).EntireRow.Insert
    Cells(t - 1, 1).Value = Cells(t, 1).Value
    Cells(t - 1, 2).Value = Cells(t, 2).Value
    Cells(t - 1, 3).Value = Cells(t, 3).Value
    Cells(t - 1, 6).Value = Cells(t, 6).Value
    Cells(t - 1, 7).Value = Cells(t, 7).Value
    Cells(t - 1, 8).Value = Cells(t, 8).Value
    Cells(t - 1, 21).Value = "OT:" & Cells(t, 2).Value
End If

Next t

End Sub


Et tu trouveras pas exactement le résultat que tu disais, pour une raison simple. Quand tu fais le test entre la ligne 3 et 2, tu n'as pas la même valeur dans la colonne A, donc tu n'insère pas de ligne... fort logiquement ! mais toi, il me semble que tu veux la recopier aussi, d'après ce que tu as écris... Donc tu n'es pas logique sur ce point, c'est ce qui me pose problème... non pas de programmation, mais de compréhension.

Amicalement,
Us.
0
cs_johndi Messages postés 10 Date d'inscription mercredi 23 février 2011 Statut Membre Dernière intervention 1 mars 2011
1 mars 2011 à 21:34
Sub nn()

dernier = Feuil1.UsedRange.Rows.Count + Feuil1.UsedRange.Row - 1

For t = 9820 To 2 Step -1

If Cells(t - 1, 1).Value = Cells(t, 1).Value Then

Rows(t).Copy
Rows(t - 1).Insert Shift:=xlDown
Cells(t, 1).Value = Cells(t, 1).Value
Cells(t, 2).Value = Cells(t, 2).Value
Cells(t, 3).Value = Cells(t, 3).Value
Cells(t, 6).Value = Cells(t, 6).Value
Cells(t, 7).Value = Cells(t, 7).Value
Cells(t, 8).Value = Cells(t, 8).Value
Cells(t, 21).Value = "OT:" & Cells(t, 2).Value
End If

Next t
End Sub

voici le code qui fonctionne maintenant.

merci beaucoup pour ton aide et pour ta disponibilité.

cordialement,

Johndi
0
us_30 Messages postés 2065 Date d'inscription lundi 11 avril 2005 Statut Membre Dernière intervention 14 mars 2016 10
1 mars 2011 à 22:04
de rien,

La ligne
dernier = Feuil1.UsedRange.Rows.Count + Feuil1.UsedRange.Row - 1
n'est pas nécessaire dans ton cas, maintenant puisque que tu as codé en "dur" le numero de ligne...

mais bon...

Amicalement,
Us.
0
Rejoignez-nous