modifier le code

Potentis

XLDnaute Occasionnel
Bonjour,
Sub CollSpec()
'
' Macro enregistrée le 21/06/2006 par Rv
'
' Collage special texte, Création de plan, puis Suppression des lignes vides
'
' Touche de raccourci du clavier: Ctrl+w
'
' Force cette macro dans la feuille "Feuille1" par exemple
' Sheets("Feuille1").Select

maligne = ActiveCell.Row
macolonne = ActiveCell.Column

' Collage special texte via IE
ActiveSheet.PasteSpecial Format:="Texte", Link:=False, DisplayAsIcon:=False

' Collage special texte via Windows
' Selection.PasteSpecial Paste:=xlValues, Operation:=xlNone, SkipBlanks:=False, Transpose:=False
moncollage = ActiveWindow.RangeSelection.Address

SuppLignes

Range(moncollage).EntireRow.Offset(1, 0).Select
Selection.Rows.Group

End Sub
---------------------------------------------------------------------

Sub SuppLignes()
'
' SuppLignes Macro
' Macro enregistrée le 20/05/2006 par Rv
'
' Suppression des lignes vides
'
' Touche de raccourci du clavier: Ctrl+q
'
'désactive le rafraichissement de l'écran
Application.ScreenUpdating = False

m = 0
last_cell = Cells.SpecialCells(xlCellTypeLastCell).Row

For n = ActiveCell.Row To last_cell

If Range("B" & n) = "" Or Range("B" & n).Value = Chr(32) Then
Range("B" & n).Select
Selection.EntireRow.Delete Shift:=xlUp
n = n - 1
m = m + 1
If m = 10 Then Exit For
End If

Next

Application.ScreenUpdating = True

' on peut afficher une petite boite d'info
MsgBox (m & " cellule(s) vide(s) supprimée(s).")

End Sub

Voici les 2 macros de mon classeur et mes quelques questions


est que les 3 lignes suivantes sont vraiment utiles ? :
n = n - 1
m = m + 1
If m = 10 Then Exit For


au début je ne comprends pas ceci :
Collage special texte via IE (avec le code qui suit)

puis ceci
' Collage special texte via Windows (avec le code qui suit)


une fois que le plan se fait, je me retrouve avec un nombre de ligne vide a la fin de se plan, je suppose que c'est a cause de la macro SuppLignes() qui pointe sur la variable last_cell
le nombre de ligne vide supprimée dépends de ce que j'y colle et ca varie a chaque collage.
Comment je pourrais contourner ce défaut ???


je me suis créé un bouton dans ma barre, je ne sais plus comment j'ai fais pour le relier a une macro ET de plus cette macro n'existe plus
je souhaite relier ce bouton a CollSpec ()

Merci d'avance,
 

Papaye

XLDnaute Occasionnel
Re : modifier le code

Re,

2 remarques pour augmenter ses chances d'avoir une réponse à ses questions :
1 - il vaut mieux rester sur le même fil pour un même problème
2 - avec un classeur en exemple qui explique ce que tu veux faire exactement, c'est plus facile de comprendre.

Ainsi tu aurais pu continuer ce fil (https://www.excel-downloads.com/threads/cellulle-active.65713/.
Concernant tes questions, les réponses dépendent de ce que tu veux faire.
On peut toujours répondre ... mais on a 99% de chance d'avoir une réponse de ta part du genre "Merci pour ton aide. Non, ce n'est pas exactement ce que je voulais faire ! Peux tu ..."
Essayes donc d'être précis dans ta demande, cela fera gagner du temps à tout le monde. Ce ne sont pas des reproches, pas d'animosités non plus ! Prend plutôt cela comme des conseils

Cordialement
 

Potentis

XLDnaute Occasionnel
Re : modifier le code

je suis désolé, tu as tout a fait raison, j'ai pourtant essayé d'etre le + clair possible comme vous répondez a des tas de questions bénévolement, j'imagine que c'est pas toujours simple, la preuve :(

sinon j'ai essayé d'éditer mon 1er post sur la cellllue active pour y mettre [résolu] mais je n'y suis pas parvenu ensuite mes 4 questions ne correspondent pas a cet intitulé, mais bon c'est vrai ca aurait évité un post de +.
--------------------------------------------------------------
pour ce que je veux faire, c'est en majeure partie dans la citation.

il y a 2 macros, (CollSpec) qui fait un collage special au format texte, puis aprés suppréssion des lignes vides fait un plan, (SuppLignes) qui supprime ces lignes vides

la 1ere question c'est pour peaufiner le code
la 2eme c'est une interrogation sur ce que c'est
la 3eme c'est pour résoudre le probleme de ligne vide en plus dans mon plan
la 4eme c'est pour lancer la macro CollSpec() a partir d'un bouton qui est deja attribué a une macro qui n'existe plus
 

Papaye

XLDnaute Occasionnel
Re : modifier le code

Ok,

C'est parti pour les devinettes.
Ce que je comprend de ton code :
Tu récupères le numéro de ligne et le numéro de colonne de ta cellule active.
Question de départ : pourquoi ? Tu ne t'en sers pas dans le reste de ton code.
tu fais un copier-coller depuis IE dans Excel. Pour une raison que j'ignore, tu fais un copier-collage spécial de ces données.
Première question : Est-ce cela ?
Deuxième question : Pourquoi faire ?
Tu récupères ensuite l'adresse de cette plage de cellule. Tu lances une macro (SuppLigne) qui va tester si ta cellule en colonne B est vie ou avec un espace. Si c'est le cas, elle supprime cette ligne ... mais pas plus de 10 lignes sont supprimées (m=10).
Troisième question : Pourquoi cette limite ?
Après tu reviens sur ta première macro et tu sélectionnes la ligne du dessous et tu fais un regroupement.
Dernière question : pourquoi ?

Réponse à la question 1 : pour peaufiner le code, il faudrait avoir une idée de ce que tu veux faire.
Question 2 : je ne comprend pas ta question
Question 3 : idem question 2
Question 4 : tu te positionnes sur ta barre des tâches , tu cliques avec le bouton droit de ta souris et tu choisis personnaliser. Tu cliques après sur ton bouton et tu choisis lui affecter une macro.
 

Potentis

XLDnaute Occasionnel
Re : modifier le code

j'avais pas compris que c'est tout ca que tu avais besoin, comme pas mal de nouveau je m'exprime mal, mais je m'empresse (je ne suis pas préssé, c'est pour toi et le forum) de t'aider a m'aider. lolll

ce que je fais c'est que sur une page internet (un jeu online) je récupére par un copier un ensemble de lignes, je me positionne dans la feuille x et/ou y de mon classeur, je fais un collage special texte, ensuite je teste si 1 ou plusieurs lignes sont vides ou avec 1 espace et je la supprime, puis je selectionne la derniere ligne jusqu'à la 2eme pour faire un plan, le signe + se trouvera au dessus pour conserver la 1ere ligne comme une sorte de titre, voila c'est ca que je fais et ces 2 macros ont été faites par une collegue qui vient de partir en congés.
dans l'ensemble ca fonctionne déjà mais je regle quelques trucs et en meme temps j'essaye d'apprendre, car je suis extremement loin d'arriver a faire un truc comme cela tout seul.

là j'ai répondu a tes 2 premieres et ta derniere questions

pour la limite, c'est pour éviter d'aller tester jusqu'a 65535 et donc si il y a 10 lignes consecutives vides ca veut dire que ca fait 10 lignes que c'etait fini.

mais je me suis demandé si avec la boucle :
For n = ActiveCell.Row To last_cell
ca suffisait car la variable last_cell date d'hier et ActiveCell.Row d'aujourdhui c'est pour cela que je demande si je peux enlever ces 3 lignes suivantes :
n = n - 1
m = m + 1
If m = 10 Then Exit For

j'ai réaffecté mon bouton a cette macro, et je n'aurai pas pû trouver

un grand Merci pour ta patience

[EDIT]
j'ai pas répondu a ta question de départ, et en fait je ne sais pas, mais oui pourquoi pas on peut l'utiliser !
 
Dernière édition:

Papaye

XLDnaute Occasionnel
Re : modifier le code

Bien, on avance ...

Donc tu as à chaque copier coller, ta première ligne qui correspond à un titre et x lignes qui sont ... je ne sais pas ... mais c'est pas grave. Je ne veux même pas savoir !
On peut donc améliorer ta macro ... Juste une question, la macro de ton ami teste si la colonne B est vide "" ou contient simplement un espace.
Dans le cas des dernières lignes y a t-il quelquechose dans les autres colonnes ?


Tu vois que c'est plus simple quand on a des explications.
 

Potentis

XLDnaute Occasionnel
Re : modifier le code

quand je fais ce coller je me positionne toujours a la derniere cellulle libre en colonne B et donc au fur et a mesure mes lignes augmentent c'est pour cela que je crée a chaque fois un plan sur la gauche avec le + en haut pour gagner en lisibilité.

la colonne A je l'utilise pour mettre des calculs simples
la colonne C pour mettre d'éventuel commentaire

j'ai vraiment besoin de laisser 2 macros car SuppLignes je l'utilise telle quelle dans une autre feuille par le raccourci Ctrl + Q

et j'ai demandé a ma collegue d'insérer SuppLignes un peu aprés mon collage special puis de faire faire un plan.

a ta dispo, si tu veux d'autres infos

[EDIT]
encore 1 oubli le test c'est bien si la cellulle en colonne B est vide ou si elle contient 1 espace car selon les copiers que je fais sur le site il y a des lignes non vide avec 1 seul espace et dans Excel j'ai aussi besoin d'enlever ces lignes là
 
Dernière édition:

Papaye

XLDnaute Occasionnel
Re : modifier le code

Bonjour,

Sans aucunes certitudes (un exemple de ton copier-coller aurait été le bienvenue)
PHP:
Public first_cell, last_cell
Sub CollSpec()
ActiveSheet.PasteSpecial Format:="Texte", Link:=False, DisplayAsIcon:=False

moncollage = ActiveWindow.RangeSelection.Address

SuppLignes

new_last_cell = Cells.SpecialCells(xlCellTypeLastCell).Row
Row(CStr(first_cell + 1) & ":" & CStr(new_last_cell)).Select
Selection.Rows.Group

End Sub
Sub SuppLignes()

Application.ScreenUpdating = False
Compteur = 0
first_cell = ActiveCell.Row
last_cell = Cells.SpecialCells(xlCellTypeLastCell).Row
For n = last_cell To first_cell Step -1
  If Range("B" & n) = "" Or Range("B" & n).Value = Chr(32) Then
    Range("B" & n).EntireRow.Delete Shift:=xlUp
    Compteur = Compteur + 1
  End If
Next n

Application.ScreenUpdating = True

MsgBox (Compteur & " cellule(s) vide(s) supprimée(s).")

End Sub

A tester donc
 

Potentis

XLDnaute Occasionnel
Re : modifier le code

Bonjour Papaye, tu es bien matinale

je récupère ce que tu as fait et je le teste dés que possible mais je n'ai pas beaucoup de temps aujourdhui, sinon je teste demain au boulot et je reviens mardi te tenir au courant.
je t'enverrai un copier/coller que je fais sans probleme

encore Merci
bonne journée et bon WE
 

Potentis

XLDnaute Occasionnel
Re : modifier le code

Bonjour Papaye,

ok pour vendredi (pa ni problem) :)

Voici ce qui ne fonctionne pas dans ce que tu as fait Dimanche :
- dans CollSpec() ligne 9 il y a une erreur sur la fonction Row , j'ai testé un tas de truc puis en mettant Rows ca passe (peut-etre une erreur de frappe)
- en executant pas a pas, on voit que les lignes vides se suppriment mais la selection suite au collage special texte ne diminue pas ce qui fait qu'a la fin le plan se fait depuis la valeur de "new_last_cell" qui est égale à la valeur de "last_cell" donc le plan se fait avec les lignes retirés
- le plan se fait aussi depuis "last_cell" jusqu'au début de la feuille et non pas jusqu'a la 2eme ligne de départ

:confused: juste pour voir si je commence un peu a comprendre, est ce que le probleme ne viendrait pas de la ligne suivante ?
Rows(CStr(first_cell + 1) & ":" & CStr(new_last_cell)).Select

car en pas a pas la valeur de first_cell n'est valable que dans la macro SuppLign, car j'ai meme essayé ceci :
new_last_cell = Cells.SpecialCells(xlCellTypeLastCell).Row - Compteur

et idem pour la valeur de Compteur qui ne vaut plus rien au retour dans CollSpec()

PS : j'ai ajouté le classeur avec l'exemple de copier que je fais et quelques explications qui te simplifiront la tache

Merci de ne pas me dire que maintenant c'est beaucoup plus simple pour toi, je fais mon méaculpa :rolleyes:
 

Pièces jointes

  • Classeur1.xls
    21.5 KB · Affichages: 45
  • Classeur1.xls
    21.5 KB · Affichages: 46
  • Classeur1.xls
    21.5 KB · Affichages: 53

Papaye

XLDnaute Occasionnel
Re : modifier le code

Re,

Ok, ok ... je ne dit pas que c'est plus simple pour moi maitenant ... mais presque !

J'avais fait 2 erreurs :
1 - la première sur le rows ... bien vu !
2 - la deuxième sur le new_last_cell. Je pensais qu'excel mettait à jour avec la formule que j'ai employé la valeur de la dernière ligne remplie ... et non ! J'ai modifié le code.
Chez moi tout est ok ! A toi de tester !

PHP:
Public first_cell, last_cell
Sub CollSpec()
ActiveSheet.PasteSpecial Format:="Texte", Link:=False, DisplayAsIcon:=False

moncollage = ActiveWindow.RangeSelection.Address

SuppLignes

new_last_cell = Range("B65536").End(xlUp).Row
Rows(CStr(first_cell + 1) & ":" & CStr(new_last_cell)).Select
Selection.Rows.Group

End Sub
Sub SuppLignes()

Application.ScreenUpdating = False
Compteur = 0
first_cell = ActiveCell.Row
last_cell = Cells.SpecialCells(xlCellTypeLastCell).Row
For n = last_cell To first_cell Step -1
  If Range("B" & n) = "" Or Range("B" & n).Value = Chr(32) Then
    Range("B" & n).EntireRow.Delete Shift:=xlUp
    Compteur = Compteur + 1
  End If
Next n

Application.ScreenUpdating = True

MsgBox (Compteur & " cellule(s) vide(s) supprimée(s).")

End Sub
 

Gorfael

XLDnaute Barbatruc
Re : modifier le code

Salut Potentis, salut Papaye
Je laisse Papaye sur la macro principale, c'est à la macro Supprim que j'e m'attaque
Sub SuppLignes()
Application.ScreenUpdating = False

m = 0
last_cell = Cells.SpecialCells(xlCellTypeLastCell).Row

For n = ActiveCell.Row To last_cell

If Range("B" & n) = "" Or Range("B" & n).Value = Chr(32) Then
Range("B" & n).Select
Selection.EntireRow.Delete Shift:=xlUp
n = n - 1
m = m + 1
If m = 10 Then Exit For
End If
Next
Application.ScreenUpdating = True
End Sub
la question était :

est que les 3 lignes suivantes sont vraiment utiles ? :
n = n - 1
m = m + 1
If m = 10 Then Exit For


Pour expliquer la macro, on va dire que ActiveCell = 10 et Last_Cell = 14
B11 est vide
B10 et B12 ont une valeur autre que "" ou " " et
Les autres cellules sont vides

1er passage dans la boucle
m = 0
n = 10
si B10 = "" ou B10 =" " => FAUX
on passe à next qui renvoie à la ligne FOR

2me passage dans la boucle
n = n+1 (11) => 11 > 14 FAUX => on continue la boucle
si B11 = "" => VRAI alors
selection de B11
supprimer la ligne de la selection
n = n - 1 => n = 10
m = m+1 => m = 1
Si m = 10 => FAUX
on passe à next qui renvoie à la ligne FOR

3me passage dans la boucle
n = n + 1 (10+1=11) 11 > 14 FAUX => on continue la boucle
si B11 = "" ou B11 =" " => FAUX (avant suppression c'était B12)
on passe à next qui renvoie à la ligne FOR

4me passage dans la boucle
n = n+1 (11+1) => 12 > 14 FAUX => on continue la boucle
si B12 = "" => VRAI alors
selection de B12
supprimer la ligne de la selection
n = n - 1 => n = 11
m = m+1 => m = 2
Si m = 10 => FAUX
on passe à next qui renvoie à la ligne FOR

Les passages suivants
on va avoir la même chose qui se reproduira, puisque les lignes sont vides, avec la variable m qui s'incrémentera à chaque passage jusqu'à ce que m = 10 où on sortira de la boucle

Seule modification que j'effectuerai sur cette macro, c'est de remplacer
Range("B" & n).Select
Selection.EntireRow.Delete Shift:=xlUp
par
Rows(n).Delete

J'espère avoir été clair (de lune) dans mes explications
A+
 
Dernière édition:

Statistiques des forums

Discussions
312 672
Messages
2 090 769
Membres
104 661
dernier inscrit
abdelazizasma