Problème code VBA

Signaler
Messages postés
10
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
1 mars 2011
-
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
-
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

Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
95
Date d'inscription
vendredi 7 février 2003
Statut
Membre
Dernière intervention
28 novembre 2017

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
Messages postés
10
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
1 mars 2011

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
Messages postés
10
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
1 mars 2011

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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
10
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
1 mars 2011

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
Messages postés
10
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
1 mars 2011

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.
Messages postés
10
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
1 mars 2011

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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.
Messages postés
10
Date d'inscription
mercredi 23 février 2011
Statut
Membre
Dernière intervention
1 mars 2011

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
Messages postés
2065
Date d'inscription
lundi 11 avril 2005
Statut
Membre
Dernière intervention
14 mars 2016
8
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.