× Aidez la recherche contre le COVID-19 avec votre ordi ! Rejoignez l'équipe PC Astuces Folding@home
 > Tous les forums > Forum Bureautique
 excel 2013, déplacement de cellulesSujet résolu
Ajouter un message à la discussion
Page : [1] 
Page 1 sur 1
prosper34
  Posté le 12/03/2017 @ 18:21 
Aller en bas de la page 
Astucien

bonjour,

j'ai des tableaux sous cette forme :

et je veux obtenir ceci automatiquement :

c'est à dire : si cA et cB vides déplacer la ligne à la suite de la précédente (plusieurs milliers de lignes)

une formule ou macro, quelque chose de facile à mettre en œuvre car je suis nul.

merci d'avance

Publicité
ferrand
 Posté le 13/03/2017 à 03:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonjour,

Si tu peux fournir un classeur modèle comme support, ce sera bien...

Cordialement.

Debrief
 Posté le 13/03/2017 à 05:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Slt,

C'est sûr que "si cA et cB vides" s'apparente à est une nouvelle technique de référence aux cellules

Je pense que prosper34 veut dire que si Ax et Bx sont vides, il faut déplacer Cx et Dx en Gx-1 et Hx-1 (sur la base des données affichées)

Questions:

- Combien de lignes consécutives possibles où Ax et Bx sont vides ? 1 seule maximum ? Si plusieurs, où placer Cx et Dx ?
- Que faire si seulement Ax ou Bx est vide ? Ignorer la valeur non vide ? Ça n'arrive jamais ?
- Que faire si A1 et B1 sont vides ? Ça n'arrive jamais ?

Cordialement,
D.

ferrand
 Posté le 13/03/2017 à 07:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Salut Debrief !

C'est bien pour ça qu'une illustration permet de faire le tour des variantes, voir les mises en forme à rétablir, etc.

Et ça permet d'écrire du code en situation...

Bonne journée.

prosper34
 Posté le 13/03/2017 à 08:51 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Debrief a écrit :

Slt,

C'est sûr que "si cA et cB vides" s'apparente à est une nouvelle technique de référence aux cellules

Je pense que prosper34 veut dire que si Ax et Bx sont vides, il faut déplacer Cx et Dx en Gx-1 et Hx-1 (sur la base des données affichées)

c'est exactement ça

Questions:

- Combien de lignes consécutives possibles où Ax et Bx sont vides ? 1 seule maximum ? Si plusieurs, où placer Cx et Dx ?
- Que faire si seulement Ax ou Bx est vide ? Ignorer la valeur non vide ? Ça n'arrive jamais ?
- Que faire si A1 et B1 sont vides ? Ça n'arrive jamais ?

Cordialement,
D.

bonjour et merci de ta réponse,

très bien tes questions à choix multiple

Anonyme a écrit :

il faut déplacer Cx et Dx en Gx-1 et Hx-1

Non pas -1 car il y a une suppression de ligne pour chaque report.

merci de ta réponse

la suppression de ligne pourra se faire en tri.



Modifié par prosper34 le 13/03/2017 08:54
Debrief
 Posté le 13/03/2017 à 11:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

il faut déplacer Cx et Dx en Gx-1 et Hx-1

Non pas -1 car il y a une suppression de ligne pour chaque report.

Dans l'exemple :

La ligne 2 va sur la ligne 1

La ligne 4 va sur la ligne 2

La ligne 6 va sur la ligne 3

Euh, non mais oui... car quelle que soit la méthode de suppression (au fur à mesure ou au final), le déplacement est bien une opération qui porte sur la ligne x et la ligne x-1 (voir la formule)
Ce n'est qu'après la 2ème opération de suppression de la ligne x que les lignes 3 et 4 apparaissent en ligne 2, 5 et 6 en ligne 3 etc..

Maintenant si tu veux faire cette suppression avec un tri ultérieur tu ne vas que renvoyer ces lignes vers le bas sans les supprimer réellement.

En G1 -> =SI(ET(A2="";B2="";C2<>"");C2;"")
En H1 -> =SI(ET(A2="";B2="";D2<>"");D2;"")

Puis étirer (ou copier) la formule jusqu'en bas de la liste.
Reste à faire le tri inverse et la suppression des lignes rejetées en bas de liste par le tri inverse.

Sinon, une petite macro qui fait tout, facile à programmer possible si tu veux.

Cordialement,
D.

prosper34
 Posté le 13/03/2017 à 11:56 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

re,

Sinon, une petite macro qui fait tout, facile à programmer possible si tu veux.

Oh ! oui, avec plaisir, merci

Debrief
 Posté le 13/03/2017 à 12:31 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Il faut que tu renommes ton fichier .xlsx en .xlsm et ajoutes ce code dans les macros, puis ajoute un raccourci clavier (ex. Ctrl + w) pour l'exécuter.
Si tu ne sais pas faire ça, je t'envoie un fichier dans lequel tu devras copier tes données.

Sub MoveAndDelete()

Const colonneNum1 = "A"
Const colonneNum2 = "B"
Const colonneNom1 = "C"
Const colonneNom2 = "D"
Const colonneNom3 = "G"
Const colonneNom4 = "H"

Dim nbLig, iLig As Integer

'Nombre de lignes à traiter (si pas de nom vide dans la liste des noms en 1ère position)
nbLig = Application.WorksheetFunction.CountA(ActiveWorkbook.ActiveSheet.Range(colonneNom1 & ":" & colonneNom1))
'MsgBox nbLig

'Inhibe l'affichage pour aller plus vite
Application.ScreenUpdating = False

iLig = 1

While iLig < nbLig
If IsEmpty(ActiveSheet.Range(colonneNum1 & iLig + 1)) _
And IsEmpty(ActiveSheet.Range(colonneNum2 & iLig + 1)) _
Then
'Copie du 1er nom avec ses attributs
ActiveSheet.Range(colonneNom1 & iLig + 1).Select
Selection.Copy
ActiveSheet.Range(colonneNom3 & iLig).Select
ActiveSheet.Paste

'Copie du 2ème nom avec ses attributs
ActiveSheet.Range(colonneNom2 & iLig + 1).Select
Selection.Copy
ActiveSheet.Range(colonneNom4 & iLig).Select
ActiveSheet.Paste

'Delete de la ligne
ActiveSheet.Rows(iLig + 1 & ":" & iLig + 1).Select
Selection.Delete Shift:=xlUp
nbLig = nbLig - 1
End If

iLig = iLig + 1
Wend

'Désinhibe l'affichage
Application.ScreenUpdating = True

'Positionne la sélection en A1
ActiveSheet.Range("A1").Select

End Sub

Au besoin je rajoute le fichier http://www.cjoint.com/c/GCnmYXJW1KW



Modifié par Debrief le 13/03/2017 13:54
prosper34
 Posté le 13/03/2017 à 14:06 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

merci Debrief,

merci à toi, je me penche sur le truc et te tiens au courant (mon neurone est fatigué et je n'aime pas faire quelque chose que je n'ai pas compris).

Publicité
ferrand
 Posté le 13/03/2017 à 22:13 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

Bonsoir,

Ma préférence irait à un travail entièrement sur tableau, sans copie. On compose le tableau souhaité en VBA et on l'affecte à la fin, cela devrait être légèrement plus rapide.

Cordialement.

Debrief
 Posté le 13/03/2017 à 23:18 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Slt Ferrand,

Tu ferais comment pour composer ce tableau ? En mémoire ? S'il y a des milliers de lignes tu ne crains pas de saturer ?

Ici c'est vrai que le "select copy" + "select paste" ça prend du temps. Une affectation "xxx.value = " (comme j'avais initialement fait) ça va beaucoup plus vite mais on ne prend pas les attributs de la cellule source dont je ne pouvais présumer ne sachant rien du tableau réel. Ceci dit, on n'est pas obligé de copier ces attributs qui peuvent faire partie de la définition du tableau final... quand on sait exactement comment il est fait !

De même pour le delete des lignes on peut le sortir et faire une boucle dédiée pour sélectionner toutes les lignes à supprimer pour ne faire qu'un seul delete.

D.

prosper34
 Posté le 14/03/2017 à 00:15 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

merci à vous mais ça fonctionne très bien comme ça :

En G1 -> =SI(ET(A2="";B2="";C2<>"");C2;"")
En H1 -> =SI(ET(A2="";B2="";D2<>"");D2;"")

le reste dépasse mon domaine de compétence

@+jp

ferrand
 Posté le 14/03/2017 à 00:32 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

A quelques milliers de lignes on ne devrait pas saturer... au-delà ? C'est effectivement l'interaction en écriture avec la feuille qui bouffe du temps.

Si tu l'évites, à la fin tu peux effacer en bloc (Clear pour supprimer les mises en forme). Tu réaffectes et tu remets en forme...

Mais bel effort (sans fichier) !

Remarque pour les suppressions de lignes, tu pouvais te contenter de l'effacement d'une cellule (sur la colonne en jaune par exemple) pour faire une suppression globale à la fin avec : colonne.SpecialCells(xlCellTypeBlanks).EntireRow.Delete

Ya un gain, mais moins qu'avec les Array... Expérience faite par Galopin (sur une construction de tableau que j'avais trouvé laborieuse, élément par élément, je pensais être plus rapide avec SpecialCells, et au chronométrage quelques millisecondes dans la vue au profit du tableau...)

A+

Debrief
 Posté le 14/03/2017 à 01:28 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Ok pour le tableau, et les instructions un peu "sioux" comme celle que tu proposes <colonne>.SpecialCells(xlCellTypeBlanks).EntireRow.Delete ne me viennent pas encore naturellement

Debrief
 Posté le 14/03/2017 à 08:57 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
Astucien

Ferrand, un dernier point... Comment tu penses faire pour affecter les valeurs du tableau aux cellules de la feuille ?

ferrand
 Posté le 14/03/2017 à 13:24 
Aller en bas de la page Revenir au message précédent Revenir en haut de la page
  Astucien

plage(dimensionnée).Value = tablo

Bonne journée

ne me viennent pas encore naturellement

Ne me venaient pas naturellement il y a 20 ans...



Modifié par ferrand le 14/03/2017 13:26
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
25,99 €Carte mémoire SDXC UHS-I U3 SanDisk Extreme Plus 128 Go (jusqu'à 170 Mo/s) à 25,99 €
Valable jusqu'au 26 Septembre

Amazon fait une superbe promotion sur la carte mémoire SDXC UHS-I U3 SanDisk Extreme Plus d'une capacité de 128 Go qui passe à 25,99 € alors qu'on trouve la carte ailleurs à partir de 45 €. Cette carte mémoire offre des vitesses jusqu'à 170 Mo/s en lecture et 90 Mo/s en écriture et intègre des mécanismes afin de gérer l'usure des cellules de la carte et augmenter ainsi sa durée de vie. Une valeur sûre pour les plus exigeants. Elle résiste aux températures extrêmes, à l'eau, aux chocs et aux rayons X. La carte est fournie avec le logiciel de récupération de données RescuePRO Deluxe qui facilite la récupération des fichiers qui ont été effacés accidentellement. 


> Voir l'offre
99,99 €Ecouteurs intra-auriculaires sans fil Bluetooth Jabra Elite 65t à 99,99 €
Valable jusqu'au 25 Septembre

Amazon fait une superbe promotion sur les écouteurs intra-auriculaires sans fil Bluetooth Jabra Elite 65t qui passent à 99,99 € livrés gratuitement. On les trouve ailleurs à partir de 150 €. Pensés pour vous permettre de vivre votre musique comme vous l'entendez et pour assurer des conversations d'une grande clarté, les écouteurs Jabra Elite 65t ont tout pour vous séduire ! Côté son, l'égaliseur personnalisable vous permet d'ajuster le rendu sonore tandis que la technologie avancée à quatre microphones supprime les bruits de fond lors des appels pour des conversations limpides. Au quotidien, ces écouteurs Jabra restent parfaitement en place et proposent même une fonction de commande vocale simplifiée. Enfin, vous apprécierez les 5 heures d'autonomie avec une seule charge, qui se transforment en 15 heures avec l'étui de recharge compact.  Le Jabra Elite 65t est certifié IP55 et offre une garantie de 2 ans contre l’humidité et la poussière. Où que vous soyez et quelle que soit votre activité, vous profitez d’une liberté absolue pour les appels et la musique. 


> Voir l'offre
76,99 €Taille-haie sans-fil Tacklife GHT1B (lame 55 cm, 40V, Li-ion 2.5 Ah) à 76,99 € avec le code NRJUZO58
Valable jusqu'au 25 Septembre

Amazon fait une promotion sur le taille-haie sans-fil électrique Tacklife GHT1B avec sa batterie Li-ion 40V 2.5 Ah et son chargeur à 76,99 € avec le code promo NRJUZO58 au lieu de 109 €. Ce taille-haie offre une lame de coupe de 55 cm avec un espacement 20 mm entre les dents. La livraison est gratuite.


> Voir l'offre

Sujets relatifs
Office Etudiant 2013 Excel, problème avec mes cellules
[Excel 2013] Fusion personnalisée de cellules
EXCEL déplacement des cellules...OFFICE 2002 PRO.
cellules sélectionnées à tort excel 2007
Excel - selection cellules non adjacentes
Excel (2013) un bien étrange phénomène
Faire le bon choix excel 2013
excel 2013
ALT + Entrée résulte en ligne supplémentaire dans Excel 2013
Enregistrer les modifications Excel 2013
Plus de sujets relatifs à excel 2013, déplacement de cellules
 > Tous les forums > Forum Bureautique