× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Bureautique
 selectionner des cellules dans une macro
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
gdaniel28
  Posté le 13/03/2008 @ 22:50 
Aller en bas de la page 
Petit astucien

bonjour,

je souhaite selectionner plusieurs cellules dans une macro pour les copier dans une autre feuille

comment puis-je sélectionner les lignes l'une après l'autre tout en gardant les memes colonnes ?

en clair, comment sélectionner un groupe de cellules dont le n° de ligne sera augmenté d'une unité à chaque fois

Publicité
fth
 Posté le 13/03/2008 à 23:22 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour,

Plusieurs possibilités, tout dépend de la condition qui fera que ces lignes devront être copiées ?

Les lignes se suivent ? (3, 4, 5, 6, 7, etc...)

Ou sont elles alléatoires selon une condition x ? (2, 7, 45, 46, 52, 75, ...) ?

Elles devront se copier les unes à la suite des autres ?

Enfin...tout ça pour dire que ta question est un peu trop vague pour permettre d'apporter une réponse appropriée

gdaniel28
 Posté le 14/03/2008 à 07:36 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

bonjour, fth et merci de tes questions

les lignes se suivent

il faut seulement que je choisisse avec la souris la premiere

c'est à dire que la premiere sera sous condition mais que les autres se suivront

ensuite, je devrai choisir des elements de cette ligne un par un pour les copier dans une autre feuille du classeur, mais ça je pense pouvoir y arriver

le souci, c'est bien de partir d'un point choisi par la souris et d'incrémenter ensuite d'une ligne sur la feuille de départ et d'une ligne sur la feuille d'arrivée (le point de départ de la feuille d'arrivée sera toujours le meme)

j'aurai au maximum une douzaine de lignes à traiter, donc je peux faire des macro simples et repetitives

cdt

fth
 Posté le 14/03/2008 à 16:00 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Là où cela reste encore un peu vague dans mon esprit c'est :

je devrai choisir des elements de cette ligne un par un pour les copier dans une autre feuille du classeur

euuh ?

le souci, c'est bien de partir d'un point choisi par la souris et d'incrémenter ensuite d'une ligne

incrémenter et copier toutes les lignes depuis le point de départ sélectionné jusqu'à la fin de la colonne ? ou simplement incrémenter d'une ligne et s'arrêter là ?

gdaniel28
 Posté le 14/03/2008 à 23:10 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

chaque cellule de depart ira se copier dans une cellule d'arrivee

toutes les cellules de la colonne x du depart iront dans les cellules de la colonne y de l'arrivee, toutes le cellules de la colonne h iront dans les cellules de la colonne T, soit en tout 5 colonnes de départ qui iront dans 5 colonnes d'arrivee

c'est à dire qu'à part les lignes qui seront incrementees (au départ et à l'arrivee) les colonnes seront toujours les memes

par exemple, A2 ira dans d6 arrivee, et B2 ira dans g6 arrivee

et A3 ira dans d7 arrivée, et B3 ira dans g7 arrivee

A4 ira dans d8 arrivée, et B4 ira dans g8 arrivee

la lecture se fera toujours du haut vers le bas, au pas de 1 ligne

elle doit pouvoir commencer avec une ligne quelconque (choisie par un clic de la souris toujours dans la colonne A)

et se terminera dès que la valeur dans une cellule de la colonne A sera différente des précédentes valeurs (il peut y avoir 1, 2 ou plusieurs lignes identiques dans la colonne A)

exemple :

je clique sur A2

la macro copie la valeur de A2 dans la cellule H20 d'arrivée, puis c2 dans d20, puis b2 dans c20, d2 dans e20 et enfin g2 dans f20

ensuite elle copie A3 dans H21, c3 dans d21, b3 dans c21, d3 dans e21, g3 dans f21

puis A4 dans h22, c4 dans d22, b4 dans c22, d4 dans e22, g4 dans f22

puis la macro s'arrete car A5 est different de A4 (A2 = A3 =A4)

alors, la macro imprime la feuille d'arrivée et efface ensuite toutes les valeurs qui ont été copiées dans cette feuille, en attendant un autre clic sur la feuille de départ (dans l'exemple sur A5 pour démarrer une autre série)

j'espère que ces données sont plus claires que les précédentes

plus que la solution du probleme, ce sont les macros et les commandes employées qui m'interessent pour comprendre le cheminement et pouvoir etre autonome un jour

encore merci d'avance de tes conseils

fth
 Posté le 15/03/2008 à 00:49 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Voilà, si j'ai bien compris, par exemple feuille de départ = feuille 1 et feuille d'arrivée = feuille 2, cela devrait ressembler à...

Sub test()
Dim i%, x%

'si sélection hors colonne A alors ne rien faire
If target.Column <> 1 Then
MsgBox "Veuillez sélectionner une cellule dans la colonne A"
Exit Sub
End If

x = Sheets(2).Cells(Rows.Count).End(xlUp)(2).Row '<-- première ligne vide colonne A feuille 2

With Selection
.Copy Sheets(2).Cells(x, 8) '<-- A(cellule sélectionnée) vers H
.Offset(0, 1).Copy Sheets(2).Cells(x, 3) '<-- B vers C
.Offset(0, 2).Copy Sheets(2).Cells(x, 4) '<-- C vers D
.Offset(0, 3).Copy Sheets(2).Cells(x, 5) '<-- D vers E
.Offset(0, 6).Copy Sheets(2).Cells(x, 6) '<-- G vers F
End With

For i = Selection.Row + 1 To Cells(Rows.Count, 1).End(xlUp).Row '<-- depuis la ligne sous la sélection jusqu'à la dernière ligne occupée
x = x + 1
If Cells(i, 1).Value = Selection.Value Then '<-- si cellule ligne suivante = cellule sélectionnée
Cells(i, 1).Copy Sheets(2).Cells(x, 8) '<-- A vers H
Cells(i, 2).Copy Sheets(2).Cells(x, 3) '<-- B vers C
Cells(i, 3).Copy Sheets(2).Cells(x, 4) '<-- C vers D
Cells(i, 4).Copy Sheets(2).Cells(x, 5) '<-- D vers E
Cells(i, 7).Copy Sheets(2).Cells(x, 6) '<-- G vers F
End If
Next

End Sub

Je n'ai pas eu le courage d'encoder une feuille de données pour tester, tu peux faire ça pour moi stp.



Modifié par fth le 15/03/2008 00:50
gdaniel28
 Posté le 15/03/2008 à 07:35 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

oui, bien sur, et c'est ce que je souhaite : apprendre et non recevoir tout pret

merci pour les commentaires, c'est ça qui va m'aider

je vais essayer de mettre tout ça et je te tiens au courant si je m...

à bientot

fth
 Posté le 15/03/2008 à 17:38 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Petit astucien

Bonjour Daniel,

J'ai codé un peu à la va vite hier soir et ce que je t'ai proposé n'est pas très au point.

Je vais coller ci-dessous quelques remarques judicieuses que l'ami Galopin à eu la discretion de m'envoyer en MP

Remarque : Target n'existe pas (c'est un paramètre des évènementielles)

Pour la route, petit cours d'optimisation de ta soluce : Eviter les offset.

De toute façon tu vas interroger VBA (plus bas) pour connaitre selection.row tu vas même le faire dans les pires conditions car à chaque tour de boucle For tu vas lui poser la même question For i = selection.row... Et à chaque fois VBA va rechercher selection.row et tu ne connaîtra jamais la réponse...

Si tu avais posé ta variable dès le départ tu aurais su que i = Selection.Row et tu n'avais pas besoin d'obliger VBA à calculer des Offset ni à réévaluer i à chaque tour de boucle For...

ça aurait donc donné :

Sub test()
Dim i%, x%, z

If Selection.Column <> 1 Then
MsgBox "Veuillez sélectionner une cellule dans la colonne A"
Exit Sub
End If

x = Sheets(2).Cells(Rows.Count).End(xlUp)(2).Row
i = Selection.Row
z= Selection.Value

While Cells(i, 1).Value = z '<-- si cellule ligne suivante = cellule sélectionnée
Cells(i, 1).Copy Sheets(2).Cells(x, 8) '<-- A vers H
Cells(i, 2).Copy Sheets(2).Cells(x, 3) '<-- B vers C
Cells(i, 3).Copy Sheets(2).Cells(x, 4) '<-- C vers D
Cells(i, 4).Copy Sheets(2).Cells(x, 5) '<-- D vers E
Cells(i, 7).Copy Sheets(2).Cells(x, 6) '<-- G vers F
i=i+1
Wend

End Sub

Il est vraisemble que sur ce cas d'espèce ça n'a aucune importance mais j'ai testé les différentes possibiltés sur 10000 nombres à 8 décimales :

ta soluce 2 minutes environ (comptage de tête )
ma soluce 1'30" environ.

A noter un 3ème possibilté :

...
While Cells(i, 1).Value = z '<-- si cellule ligne suivante = cellule sélectionnée
Sheets(2).Cells(x, 8) = Cells(i, 1) '<-- A vers H
Sheets(2).Cells(x, 3) = Cells(i, 2) '<-- B vers C
Sheets(2).Cells(x, 4) = Cells(i, 3) '<-- C vers D
Sheets(2).Cells(x, 5) = Cells(i, 4) '<-- D vers E
Sheets(2).Cells(x, 6) = Cells(i, 7) '<-- G vers F
i = i + 1
Wend

moins de 5 secondes !

Page : [1] 
Page 1 sur 1

Vous devez être connecté pour poster des messages. Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !


Les bons plans du moment PC Astuces

Tous les Bons Plans
72,10 €Kit de 16 Go (2 x 8 Go) de mémoire DDR4 Corsair Vengeance LPX 3000 MHz à 72,10 € livré
Valable jusqu'au 07 Juin

Amazon Allemagne fait une promotion sur le kit de 16 Go (2x8 Go) de mémoire DDR4 Corsair Vengeance LPX 3000 MHz qui passe à 67,46 € (avec la TVA ajustée). Comptez 4,64 € pour la livraison en France soit un total de 72,10 € livré alors qu'on le trouve ailleurs à plus de 95 €.

Vous pouvez utiliser votre compte Amazon France sur Amazon Allemagne et il n'y a pas de douanes. Si vous êtes perdu en allemand, vous pouvez traduire le site en anglais.


> Voir l'offre
89,99 €Disque dur externe portable Seagate Expansion 4 To USB 3.0 à 89,99 €
Valable jusqu'au 06 Juin

Boulanger fait une promotion sur le disque dur externe portable Seagate Expansion d'une capacité de 4 To à 89,99 € alors qu'on le trouve ailleurs à partir de 120 €. Ce disque dur externe portable au format 2,5 pouces dispose d'une interface USB 3.0 compatible USB 2.0. Une excellente affaire pour ce disque dur qui offre des débits de 115 Mo/s. Il n'est pas soudé et est donc démontable si vous souhaitez le réutiliser ailleurs (console, NAS, PC).


> Voir l'offre
75,09 €Disque dur Toshiba P300 3 To à 75,09 € livré
Valable jusqu'au 09 Juin

Amazon Allemagne propose actuellement le disque dur Toshiba P300 3 To à 69,48 €. Comptez 5,61 € pour la livraison en France soit un total de 75,09 € livré. On le trouve ailleurs à partir de 90 €. Ce disque dur interne de 3 To est SATA 6 Gbps, possède 64Mo de cache et dispose d'une vitesse de rotation de 7200 tpm.

Vous pouvez utiliser votre compte Amazon France sur Amazon Allemagne et il n'y a pas de douanes. Si vous êtes perdu en allemand, vous pouvez traduire le site en anglais.


> Voir l'offre

Sujets relatifs
Ecrir par macro dans des cellules différents
Définir une Plage de cellules dans une macro
Définir 1 plage de cellules dans 1 macro excel
2 pages par feuille dans macro excel
[Extraction dans cellules]
Creation d' une boucle macro dans fichier EXCEL pour impression
Relier des choix à des cellules dans excel
macro afficher masquer lignes tableau dans word 2010
[chemin relatif dans une macro]
Selectionner valeur dans tableau (vba)
Plus de sujets relatifs à selectionner des cellules dans une macro
 > Tous les forums > Forum Bureautique