VBA problème de copier-coller
Résolu
ori05
Messages postés
57
Statut
Membre
-
ori05 Messages postés 57 Statut Membre -
ori05 Messages postés 57 Statut Membre -
Bonjour,
j'ai un petit problème avec le code suivant :
Sub macro1()
For i = 1 To 18 Step 1
If Sheets("EQUIPMENT CHARACTERISTICS").Range("nb" & i) <> "" Then
Range("A35").Select
Nbligne = 0
Do While ActiveCell <> ""
Selection.Offset(1, 0).Select
Nbligne = Nbligne + 1
Loop
Sheets("Data").Range("plage" & i).Copy
Sheets("EQUIPMENT CHARACTERISTICS").Rows(35 + Nbligne).Select
Selection.Insert Shift:=xlDown
End If
Next i
End Sub
En fait je voudrais copier des plages de cellules (allant de 1 à 18) venant de ma feuille data et les coller dans "equipment characteristic". Le problème est que il me colle bien les plages mais en ordre décroissant. En premier j'ai par exemple la plage18 ensuite la plage17.... alors que je voudrais la plage1 ensuite la plage2....
Je ne comprends pas du tout pourquoi ca me fait ça alors que je compte bien le nombre de cellule non vide avant et que je colle à partir de la première cellule vide !
En fait j'ai l'impression que Nbligne reste toujours à 0. et je ne vois pas pourquoi !!
Pourriez vous m'aider ???
merci beaucoup :-)
j'ai un petit problème avec le code suivant :
Sub macro1()
For i = 1 To 18 Step 1
If Sheets("EQUIPMENT CHARACTERISTICS").Range("nb" & i) <> "" Then
Range("A35").Select
Nbligne = 0
Do While ActiveCell <> ""
Selection.Offset(1, 0).Select
Nbligne = Nbligne + 1
Loop
Sheets("Data").Range("plage" & i).Copy
Sheets("EQUIPMENT CHARACTERISTICS").Rows(35 + Nbligne).Select
Selection.Insert Shift:=xlDown
End If
Next i
End Sub
En fait je voudrais copier des plages de cellules (allant de 1 à 18) venant de ma feuille data et les coller dans "equipment characteristic". Le problème est que il me colle bien les plages mais en ordre décroissant. En premier j'ai par exemple la plage18 ensuite la plage17.... alors que je voudrais la plage1 ensuite la plage2....
Je ne comprends pas du tout pourquoi ca me fait ça alors que je compte bien le nombre de cellule non vide avant et que je colle à partir de la première cellule vide !
En fait j'ai l'impression que Nbligne reste toujours à 0. et je ne vois pas pourquoi !!
Pourriez vous m'aider ???
merci beaucoup :-)
A voir également:
- VBA problème de copier-coller
- Historique copier coller - Guide
- Copier-coller - Accueil - Informatique
- Copier coller pdf - Guide
- Style d'écriture a copier coller - Guide
- Arobase copier coller - Forum Windows 10
9 réponses
En fait je veux coller mes plages à partir de la cellule A35 (avant il y a autre chose). Le truc c'est que l'utilisateur choisit ce qu'il veut coller, c'est pour cela que à chaque fois je suis obligée de compter le nombre de ligne non vide à partir de la cellule A35 pour que mes plages se collent bien les une à la suite des autres.
Je ne comprend pas très bien ce que fait cette commande :
Sheets("EQUIPMENT CHARACTERISTICS").Range("A65536").End(xlUp)
Merci :-)
Je ne comprend pas très bien ce que fait cette commande :
Sheets("EQUIPMENT CHARACTERISTICS").Range("A65536").End(xlUp)
Merci :-)
Bonjour,
Ta macro m'a l'air très complexe pour un simple copier coller.
Tu veux coller tes plages (de la feuille data) sur la première ligne non vide de la feuille EQUIPMENT CHARACTERISTICS colonne A?
Sub macro1()
For i = 1 To 18 Step 1
If Sheets("EQUIPMENT CHARACTERISTICS").Range("nb" & i) <> "" Then
Sheets("Data").Range("plage" & i).Copy Sheets("EQUIPMENT CHARACTERISTICS").Range("A65536").End(xlUp)
End If
Next
Ta macro m'a l'air très complexe pour un simple copier coller.
Tu veux coller tes plages (de la feuille data) sur la première ligne non vide de la feuille EQUIPMENT CHARACTERISTICS colonne A?
Sub macro1()
For i = 1 To 18 Step 1
If Sheets("EQUIPMENT CHARACTERISTICS").Range("nb" & i) <> "" Then
Sheets("Data").Range("plage" & i).Copy Sheets("EQUIPMENT CHARACTERISTICS").Range("A65536").End(xlUp)
End If
Next
Ok mais moi j'ai besoin de la première cellule vide à partir de A35...
merci :-)
merci :-)
Désolée, je dois être un peu nulle... mais je ne vois pas comment l'utiliser....
merci pour ton aide !!
merci pour ton aide !!
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Salut,
Reprenons depuis le début. Tu as fait ceci :
Sub macro1()
For i = 1 To 18 Step 1 '-----> boucle de 1 à 18
If Sheets("EQUIPMENT CHARACTERISTICS").Range("nb" & i) <> "" Then '---> Si la cellule nb(1 à 18) est non vide
Range("A35").Select '-----> d'ici
Nbligne = 0
Do While ActiveCell <> ""
Selection.Offset(1, 0).Select
Nbligne = Nbligne + 1
Loop ' ----------------------> à ici tu cherches la 1ère cellule vide en dessous de A35
Sheets("Data").Range("plage" & i).Copy '-----> tu copies ce qui t'intéresse
Sheets("EQUIPMENT CHARACTERISTICS").Rows(35 + Nbligne).Select '----> sélectionne la cellule ou coller
Selection.Insert Shift:=xlDown ' --------> tu l'insères
End If
Next i '------> et hop au suivant
End Sub
La première partie de ta macro peux être simplifiée (en italique ce qui ne change pas):
Sub macro1()
For i = 1 To 18 Step 1 '-----> boucle de 1 à 18
If Sheets("EQUIPMENT CHARACTERISTICS").Range("nb" & i) <> "" Then
'la procédure qui suit évite de sélectionner "pas à pas" toutes les cellules jusqu'à trouver la 1ère vide
If Sheets("EQUIPMENT CHARACTERISTICS").Range("A35") <> "" Then
If Sheets("EQUIPMENT CHARACTERISTICS").Range("A36") <> "" Then
Range("A35").End(xlDown).Offset(1, 0).Select
Else
Range("A36").Select
End If
Else
Range("A35").Select
End if
Sheets("Data").Range("plage" & i).Copy
Sheets("EQUIPMENT CHARACTERISTICS").Rows(35 + Nbligne).Select
Selection.Insert Shift:=xlDown
End If
Next i
End Sub
En fait, en macro il faut éviter au maximum les "select". C'est pour cela qu'une boucle comme tu avais fait :
Do While ActiveCell <> ""
Selection.Offset(1, 0).Select
Nbligne = Nbligne + 1
Loop
doit être évitée au maximum.
Bon courage
Reprenons depuis le début. Tu as fait ceci :
Sub macro1()
For i = 1 To 18 Step 1 '-----> boucle de 1 à 18
If Sheets("EQUIPMENT CHARACTERISTICS").Range("nb" & i) <> "" Then '---> Si la cellule nb(1 à 18) est non vide
Range("A35").Select '-----> d'ici
Nbligne = 0
Do While ActiveCell <> ""
Selection.Offset(1, 0).Select
Nbligne = Nbligne + 1
Loop ' ----------------------> à ici tu cherches la 1ère cellule vide en dessous de A35
Sheets("Data").Range("plage" & i).Copy '-----> tu copies ce qui t'intéresse
Sheets("EQUIPMENT CHARACTERISTICS").Rows(35 + Nbligne).Select '----> sélectionne la cellule ou coller
Selection.Insert Shift:=xlDown ' --------> tu l'insères
End If
Next i '------> et hop au suivant
End Sub
La première partie de ta macro peux être simplifiée (en italique ce qui ne change pas):
Sub macro1()
For i = 1 To 18 Step 1 '-----> boucle de 1 à 18
If Sheets("EQUIPMENT CHARACTERISTICS").Range("nb" & i) <> "" Then
'la procédure qui suit évite de sélectionner "pas à pas" toutes les cellules jusqu'à trouver la 1ère vide
If Sheets("EQUIPMENT CHARACTERISTICS").Range("A35") <> "" Then
If Sheets("EQUIPMENT CHARACTERISTICS").Range("A36") <> "" Then
Range("A35").End(xlDown).Offset(1, 0).Select
Else
Range("A36").Select
End If
Else
Range("A35").Select
End if
Sheets("Data").Range("plage" & i).Copy
Sheets("EQUIPMENT CHARACTERISTICS").Rows(35 + Nbligne).Select
Selection.Insert Shift:=xlDown
End If
Next i
End Sub
En fait, en macro il faut éviter au maximum les "select". C'est pour cela qu'une boucle comme tu avais fait :
Do While ActiveCell <> ""
Selection.Offset(1, 0).Select
Nbligne = Nbligne + 1
Loop
doit être évitée au maximum.
Bon courage
Merci bien je vais essayer avec ça. par contre tu as laissé :
Sheets("EQUIPMENT CHARACTERISTICS").Rows(35 + Nbligne).Select
Or je n'ai plus Nbligne mais je ne vois pas comment que peux selectionner avec tout ce qui a été fait avant la première cellule vide a partir de A35 pour insérer au bon endroit.
Merci !!!
Sheets("EQUIPMENT CHARACTERISTICS").Rows(35 + Nbligne).Select
Or je n'ai plus Nbligne mais je ne vois pas comment que peux selectionner avec tout ce qui a été fait avant la première cellule vide a partir de A35 pour insérer au bon endroit.
Merci !!!
Bon ça marche mais malheureusement ça donne exactement la même chose que ma première macro !
ça colle les plages de la 18 à la 1 et non de la 1 à la 18 !!!
Comment faire ?
merci beaucoup !!! :-)
ça colle les plages de la 18 à la 1 et non de la 1 à la 18 !!!
Comment faire ?
merci beaucoup !!! :-)
Ba alors la je ne comprends vraiment pas, le code est fait pour qu'il insère à la première cellule vide ! Il doit donc mettre les plages les unes à la suite des autres ! Je vais insérer les lignes d'abord alors ....
Merci beaucoup pour ton aide ! :-)
Merci beaucoup pour ton aide ! :-)
Bon finalement pour éviter d'avoir à insérer le nombre de ligne nécessaire j'ai fait ma boucle dans l'autre sens, et là ça donne le résultat escompté.
Sub macro1()
For i = 18 To 1 Step -1
If Sheets("EQUIPMENT CHARACTERISTICS").Range("nb" & i) <> "" Then
Sheets("Data").Range("plage" & i).Copy
Sheets("EQUIPMENT CHARACTERISTICS").Rows(35).Select
Selection.Insert Shift:=xlDown
End If
Next i
End Sub
Et le code est beaucoup plus simple !
Mais je ne comprends toujours pas pourquoi celui du début ne marchait pas comme je voulais !
Merci beaucoup pour ton aide !!
Sub macro1()
For i = 18 To 1 Step -1
If Sheets("EQUIPMENT CHARACTERISTICS").Range("nb" & i) <> "" Then
Sheets("Data").Range("plage" & i).Copy
Sheets("EQUIPMENT CHARACTERISTICS").Rows(35).Select
Selection.Insert Shift:=xlDown
End If
Next i
End Sub
Et le code est beaucoup plus simple !
Mais je ne comprends toujours pas pourquoi celui du début ne marchait pas comme je voulais !
Merci beaucoup pour ton aide !!
Range("A65536").End(xlUp) c'est tout simplement la dernière cellule non vide de la colonne A.
Donc je me suis planté... Il te convient d'écrire :
Sheets("gnagnagna").Range("A65536").End(xlUp).Offset(1, 0) pour obtenir la première cellule vide de la colonne A.
Toutes mes excuses.