> 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).

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 participer à la discussion.
Cliquez ici pour vous identifier.

Vous n'avez pas de compte ? Créez-en un gratuitement !
Recevoir PC Astuces par e-mail


La Lettre quotidienne +226 000 inscrits
Avec l'actu, des logiciels, des applis, des astuces, des bons plans, ...

Les bonnes affaires
Une fois par semaine, un récap des meilleurs offres.

Les fonds d'écran
De jolies photos pour personnaliser votre bureau. Une fois par semaine.

Les nouveaux Bons Plans
Des notifications pour ne pas rater les bons plans publiés sur le site.

Les bons plans du moment PC Astuces

Tous les Bons Plans
45,90 €SSD Gigabyte 512 Go (M.2, 1700 Mo/s) à 45,90 €
Valable jusqu'au 26 Janvier

RueDuCommerce fait une promotion sur le SSD Gigabyte 512 Go M.2 2280 à 45,90 € au lieu de 66 € ailleurs. Ce SSD offre des vitesses de lecture/écriture séquentielle allant jusqu’à 1700/ 1 555 Mo/s. Il est garanti 5 ans.

Compatible avec la boite à outils SSD de Gigabyte, application qui aide les utilisateurs à surveiller l'état du SSD, fournit des informations générales telles que le nom du modèle, la version FW, l'état de santé, l'optimisation du lecteur et détecte également la température du capteur. De plus, les utilisateurs peuvent effacer toutes les données avec la fonction Secure Erase. Vous pourrez télécharger la boîte à outils SSD depuis le support.


> Voir l'offre
699,99 €Ultraportable 15 pouces Asus Vivobook S533UA (OLED FHD, R5 5500U, 8 Go, SSD 512 Go) à 699,99 €
Valable jusqu'au 27 Janvier

RueDuCommerce fait une promotion sur l'ultraportable Asus Vivobook S533UA-L1216T qui passe à 699,99 € au lieu de 799 €. Cet ordinateur dispose d'un superbe écran 15 pouces OLED FHD, d'un processeur AMD Ryzen 5 5500U (6 coeurs) avec chip Radeon Vega 7 intégré, 8 Go de RAM, un SSD NVMe de 512 Go et tourne sous Windows 10 que vous pouvez mettre à jour pour Windows 11. Il ne pèse que 1,8 kg et propose une autonomie réelle de 7h30.


> Voir l'offre
-10 €10 € de réduction dès 70 € d'achats chez LDLC
Valable jusqu'au 26 Janvier

LDLC offre actuellement 10 € de réduction immédiate dès 70 € d'achats. Saisissez pour cela le code PINATA dans votre panier.


> 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