VBA problème de copier-coller
Résolu/Fermé
ori05
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
-
26 août 2009 à 16:23
ori05 Messages postés 56 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 7 septembre 2009 - 27 août 2009 à 10:51
ori05 Messages postés 56 Date d'inscription lundi 13 juillet 2009 Statut Membre Dernière intervention 7 septembre 2009 - 27 août 2009 à 10:51
A voir également:
- VBA problème de copier-coller
- Copier coller pdf - Guide
- Copier-coller - Accueil - Windows
- Historique copier-coller android - Guide
- Symbole clavier copier coller - Guide
- Copier une vidéo youtube - Guide
9 réponses
ori05
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
3
26 août 2009 à 16:46
26 août 2009 à 16:46
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 :-)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
26 août 2009 à 16:38
26 août 2009 à 16:38
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
ori05
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
3
26 août 2009 à 16:56
26 août 2009 à 16:56
Ok mais moi j'ai besoin de la première cellule vide à partir de A35...
merci :-)
merci :-)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
26 août 2009 à 16:59
26 août 2009 à 16:59
Milles excuses.... La voici :
Range("A35").End(xlDown).Offset(1, 0)
Range("A35").End(xlDown).Offset(1, 0)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
>
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
26 août 2009 à 17:02
26 août 2009 à 17:02
Attention, petite précision importante : Range("A35").End(xlDown).Offset(1, 0) ne fonctionne que si A35 est non vide. Il vaux donc mieux indiquer (Si A35 est non vide bien sur) : Range("A34").End(xlDown).Offset(1, 0)
ori05
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
3
26 août 2009 à 17:06
26 août 2009 à 17:06
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
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
27 août 2009 à 09:29
27 août 2009 à 09:29
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
ori05
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
3
27 août 2009 à 09:48
27 août 2009 à 09:48
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 !!!
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
27 août 2009 à 09:51
27 août 2009 à 09:51
oups!! décidément j'aurais pas du "sauter" le café ce matin....
Sheets("EQUIPMENT CHARACTERISTICS").Select 'suffit car tu as déjà sélectionner la bonne cellule juste avant.....
désolé
Sheets("EQUIPMENT CHARACTERISTICS").Select 'suffit car tu as déjà sélectionner la bonne cellule juste avant.....
désolé
ori05
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
3
27 août 2009 à 09:57
27 août 2009 à 09:57
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 !!! :-)
pijaku
Messages postés
12263
Date d'inscription
jeudi 15 mai 2008
Statut
Modérateur
Dernière intervention
4 janvier 2024
2 751
27 août 2009 à 10:00
27 août 2009 à 10:00
oui parce que l'on "insère". Tu pourrais faire ta macro en insérant d'abord le nombre de lignes voulues et ensuite en copiant collant toutes tes lignes en 1 fois...
ori05
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
3
27 août 2009 à 10:09
27 août 2009 à 10:09
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 ! :-)
ori05
Messages postés
56
Date d'inscription
lundi 13 juillet 2009
Statut
Membre
Dernière intervention
7 septembre 2009
3
27 août 2009 à 10:51
27 août 2009 à 10:51
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 !!
26 août 2009 à 16:50
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.