Trouver la dernière cellule pleine d'une ligne

olivowitch

XLDnaute Junior
Bonjour,

J'ai un problème simple dont je ne vois pas la solution. Je n'ai trouvé aucune info dans les forums pour m'aider.
Je suis sous excel 2007 et de niveau débutant.

Ma macro commence par 2 cellules, A1 et A2, dans lesquelles j'ai mis des phrases.
Je souhaite récupérer que certains mots de ces phrases. Pour cela, j'ai trouvé une formule permettant de mettre un mot de ces phrases par cellules dans les lignes 1 et 2.
Pour le moment c'est bon. Je dois juste cliquer 2fois pour lancer ma macro.ça vient je pense de l'enregistrement autofill pour étirer suffisamment la formule en horizontal et vertical.

Le problème vient là :
Je souhaite copier le mot de la dernière cellule de la ligne 2 pour la coller dans une autre cellule.
J'ai une erreur 1004 : erreur définie par l'application ou par l'objet.

Voici la macro :
Sub test()
'La formule pour séparer les mots d'une même cellule dans différentes cellules.
ActiveCell.FormulaR1C1 = _
"=IF(COLUMN()=2,IF(RC1="""","""",IF(LEN(RC1)-LEN(SUBSTITUTE(RC1,"" "",""""))="""",RC1,LEFT(RC1,FIND("" "",RC1,2)))),IF(LEN(RC1)-LEN(SUBSTITUTE(RC1,"" "",""""))<COLUMN()-2,"""",MID(RC1,FIND(""µ"",SUBSTITUTE(RC1&"" "","" "",""µ"",COLUMN()-2),1)+1,FIND(""µ"",SUBSTITUTE(RC1&"" "","" "",""µ"",COLUMN()-1),1)-FIND(""µ"",SUBSTITUTE(RC1,"" "",""µ"",COLUMN()-2),1)-1)))"
'J'ai fait un copier-coller de macro enregistrer de l'Autofill pour étendre la sélection sur un nombre de cases suffisants pour qu'il y ait tout les mots dans des cases différentes.
Range("B1").Select
Selection.AutoFill Destination:=Range("B1:Z1"), Type:=xlFillDefault
Range("B1:Z1").Select
Selection.AutoFill Destination:=Range("B1:Z4"), Type:=xlFillDefault
'Le problème est là :
'Je veux copier le dernier mot de la ligne 2 dans la cellule (11,6)
Sheets("PMC").Cells(11, 6) = Sheets("PMC").Cells(2, 256).End(xlLeft).Value
End Sub

Merci et n'hésitez pas si il y a un manque d'informations.
Vous trouverez en pièce jointe un doc excel avec la macro.

Bonne journée
 

Pièces jointes

  • test.xlsm
    16.7 KB · Affichages: 90
  • test.xlsm
    16.7 KB · Affichages: 95
  • test.xlsm
    16.7 KB · Affichages: 96

Modeste

XLDnaute Barbatruc
Re : Trouver la dernière cellule pleine d'une ligne

Bonjour olivowitch,

Remplacer end(xlLeft) par end(xlToLeft) en avant-dernière ligne, devrait supprimer le message d'erreur 1004.
Cependant, suite à ton instruction 'AutoFill', les formules en colonne Z ne représentent pas nécessairement le dernier mot de la phrase!!
Tu as déjà essayé Données >> Convertir (quitte à utiliser l'enregistreur de macros, si tu dois vraiment travailler de cette façon)
 

Softmama

XLDnaute Accro
Re : Trouver la dernière cellule pleine d'une ligne

Bonjour olivowitch, Bonjour Modeste,

Je me permets de proposer une autre approche, plus rapide (ici la phrase en A1, les mots collés en ligne 2, à adapter) :

VB:
Sub DécomposerMots()
    T = Split(Range("A1"), " ") 'Met ts les mots de A1 dans un tableau T
    Range("A2").Resize(, UBound(T) + 1) = T 'qu'on recopie en ligne 2
    Cells(11, 6) = Range("IV2").End(xlToLeft) 'Dernier mot ds la cellule 11,6
End Sub
 
Dernière édition:

olivowitch

XLDnaute Junior
Re : Trouver la dernière cellule pleine d'une ligne

Salut Modeste et Merci

J'ai essayé avec Données->convertir. Je ne connaissais pas et c'est pratique.
ça aurait pu marcher mais les phrases que je mettrai en A1 et A2 seront différentes. Donc si j'enregistre une VBA à partir d'une phrase, ça coupera comme il faut cette phrase, mais si j'utilise le code obtenu pour une autre phrase, ça coupera au milieu des mots.

Si je remplace end(xlLeft) par end(xlToLeft), ça ne bugg plus mais il y a toujours un problème :
Pour Sheets("PMC").Cells(11, 7) = Sheets("PMC").Cells(2, nombre).End(xlToLeft).Value
nombre est une valeur comprise entre 1<nombre<26 (avec 26 limite de l'autofill en horizontal) ==> j'obtient en (11, 7) la valeur de la 1ere cellule de la ligne

nombre >26 je n'obtient rien en (11, 7)

Je pourrai donc étirer l'autofill plus loin dans le cas où mes phrases sont plus longues. Mais ça n'arrive toujours pas à sélectionner la dernière cellule pleine de la ligne (à droite)
 

olivowitch

XLDnaute Junior
Re : Trouver la dernière cellule pleine d'une ligne

Merci softmama,
la décomposition de la phrase marche très bien.
En revanche, je n'obtiens toujours pas le mot de la dernière cellule pleine de la ligne en cellule (11, 6)
ça ne peut pas venir d'une option à activer que je n'aurais pas fait?
 

Modeste

XLDnaute Barbatruc
Re : Trouver la dernière cellule pleine d'une ligne

re,

Si je puis me permettre, à mon tour :) ... tu as peut-être encore des formules recopiées avec ton AutoFill, dans les colonnes au-delà de celle qui contient le dernier mot ... Testée sur un fichier dont les colonnes 2 et suivantes ont été effacées, la macro de Softmama fonctionne.
 

olivowitch

XLDnaute Junior
Re : Trouver la dernière cellule pleine d'une ligne

re,

j'ai essayé Modeste, de même avec la macro de Softmama dans un nouveau classeur mais la dernière ligne ne fonctionne pas.
C'est pour ça que je me disais que le problème pouvait venir d'une option ou particularité de excel2007 à activer ou désactiver.
 

Modeste

XLDnaute Barbatruc
Re : Trouver la dernière cellule pleine d'une ligne

Bonsoir (pour varier),

C'est pour ça que je me disais que le problème pouvait venir d'une option ou particularité de excel2007 à activer ou désactiver.
Si c'était le cas, je ne vois vraiment pas laquelle :rolleyes: J'ai testé sous 2007 ... ça fonctionne toujours
Tu parles d'un fichier vierge ... tu y as ré-encodé la phrase? Ou tu as fait un copier-coller? Peux-tu déposer le fichier sur lequel tu viens de faire le test? ... on finira bien par trouver!
 

Staple1600

XLDnaute Barbatruc
Re : Trouver la dernière cellule pleine d'une ligne

Bonsoir à tous

Pour honorer mes endives
Pour le plaisir de croiser Softmama (entre autres ;) )
Pour rappeler que l'espace est le séparateur par défaut de Split

Code:
Sub xDécomposerMots()
With [A2]
  .Resize(, UBound(Split([A1])) + 1) = Split([A1])
  .Offset(9, 5) = [IV2].End(-4159)
End With
End Sub
 

Discussions similaires

Statistiques des forums

Discussions
312 472
Messages
2 088 709
Membres
103 928
dernier inscrit
MIKETUAU