Ecrire dans la cellule d'en dessous vba excel [Résolu]

erti1711 75 Messages postés samedi 2 avril 2005Date d'inscription 16 juin 2006 Dernière intervention - 22 juin 2005 à 15:12 - Dernière réponse : erti1711 75 Messages postés samedi 2 avril 2005Date d'inscription 16 juin 2006 Dernière intervention
- 23 juin 2005 à 18:55
bonjour,
j'ai fais une macro qui simule un copier coller sous excel.En faite quand j'importe des données trop longue,il faut que ca puisse ecrire lotre partie du texte dans la cellule de dessous.
Ex:
"Le chat s'est fait mangé par la souris!!!" cela donne aprè importation:
ligne1 |Le chat s'est fait mangé|
ligne2 |par la souris |

J'ai essayé ce code mais cela coupe souvent les mots:
j'ai d'abord limité le nombre de caractères par lignes a 85

Do While Len(varText) > 85
If Len(varText) > 85 then
TaCellule.Value = Mid(varText, 1, 85)
varText = Mid(varText, 86, Len(varText) - 85)
End If
Loop

kelkun a une solution SVP
Afficher la suite 

12 réponses

ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 23 juin 2005 à 17:21
+3
Utile
Oui, en effet, tu as raison... Je me suis trompé !!! Ca arrive... désolé



Donc, après vérifications sous Excel, voici le code à écrire :



'A mettre au tout début de la procédure "Test"

Dim design2 As String




j2 = j

Do While Len(design) > 85

If Len(design) > 85 Then

design2 = Mid(design, 1, 85)

varTxt = Mid(design2, 1, InStrRev(design2, " "))

design = Mid(design, Len(varTxt), Len(design) - Len(varTxt))

Cells(j2, 5).Value = varTxt

End If

j2 = j2 + 1

Loop

If design <> "" Then Cells(j2, 5).Value = design

Next j





Par contre, le problème que tu risques d'avoir c'est que, puisque tu
inscris le contenu d'UNE SEULE LIGNE sur PLUSIEURS (en dessous donc),
si ces dernières (celles en dessous) contiennent du texte, ben il sera
purement et simplement effacé tu comprends ???



Voilà, maintenant, dit moi si chez toi ça fonctionne correctement car chez moi, y'a pas de problème...

(et encore désolé de pas avoir eut le temps de tester les conneries que je te raccontais...)



Problème résolu [si c'est bien le cas, n'oubli pas de cliquer sur le bouton "Accepter" hein !]





Enjoy
Cette réponse vous a-t-elle aidé ?  
morickno 117 Messages postés vendredi 22 avril 2005Date d'inscription 26 juin 2007 Dernière intervention - 22 juin 2005 à 15:42
0
Utile
pour que le text ne soit pas coupé, tu peut peut etre tester a partir du caractere 85 tout les caractères précédent un par un jusqu'a ce que tu rencontre un espace, alors tu pourra couper ta phrase à ce caractère et non plus au 85 eme
erti1711 75 Messages postés samedi 2 avril 2005Date d'inscription 16 juin 2006 Dernière intervention - 22 juin 2005 à 16:19
0
Utile
Merci pour ton idée,je vais essayer d'écrire le code,j'ai bien dit essayer
mrdep1978 402 Messages postés jeudi 25 novembre 2004Date d'inscription 7 juin 2009 Dernière intervention - 22 juin 2005 à 16:54
0
Utile
Je l'ai fait en utilisant la fonction Split.
Ca marche bien dans le cas général, mais le découpage se fait mal quand j'ai plusieurs espaces consécutifs.

Public Sub test()
Dim ls_phrase As String
Dim ls_Mots() As String
Dim i As Integer, j As Integer
Dim li_longueur As Integer
Dim li_Ligne As Integer
Dim ls_Var As String
Dim lb_TpLong As Boolean
Dim li_max As Integer
li_Ligne = 1
ls_phrase = "Le chat s'est fait manger par cette foutue saloperie de souris!!!"
ls_phrase = "Le chat s'est fait manger par cette foutue saloperie de souris!!!"
While ls_phrase <> ""
ls_Mots = Split(ls_phrase, " ")
i = 0
li_longueur = 0
lb_TpLong = False
ls_Var = ""
While i <= UBound(ls_Mots) And Not lb_TpLong
If Trim(ls_Mots(i)) <> "" Then If li_longueur + Len(Trim(ls_Mots(i))) + 1 >30 Or i UBound(ls_Mots) Then
If i = UBound(ls_Mots) Then
ls_phrase = ""
li_max = i
Else
ls_phrase = Trim(Right(ls_phrase, Len(ls_phrase) - li_longueur))
li_max = i - 1
End If
For j = 0 To li_max
ls_Var = ls_Var & Trim(ls_Mots(j)) & " "
Next j
Cells(li_Ligne, 1).Value = Trim(ls_Var)
li_Ligne = li_Ligne + 1
lb_TpLong = True
End If
End If
li_longueur = li_longueur + Len(Trim(ls_Mots(i))) + 1
i = i + 1
Wend
Wend
End Sub
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 22 juin 2005 à 17:19
0
Utile
Oui, et tu peux t'aider de certaines fonctions du VB comme InStr, InStrRev, Mid, ...



Par exemple :



Do While Len(varText) > 85

If Len(varText) > 85 then

TaCellule.Value = Mid(varText, 1,
Len(varText) - InStrRev(varText, " "))
varText = Mid(varText, Len(TaCellule.Value), Len(varText) - Len(TaCellule.Value))

End If

Loop



Voili voilou... la souris est dans le trou! Teste voir si ça fonctionne
et dit-le moi STP car j'ai fait ça de tête sans tester de mon coté (la
flemme ;-)... Par contre, c'est du VB6 !!! Et toi, tu utilises quel VB
(6, .Net, VBA) ???



Enjoy



(Nota: Ne t'avais-je pas déjà répondu ???)



Si la réponse vous convient, cliquez sur le bouton "Accepter"...
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 22 juin 2005 à 17:23
0
Utile
Excuse, nos messages se sont croisés... En effet, Split marche aussi très bien...



Utilise Trim (ou RTrim/LTrim si cela te dérrange!!!) pour tronquer ta chaine...



Avec mon code ça donnerais :




Do While Len(varText) > 85
If Len(varText) > 85 then
TaCellule.Value = Trim(Mid(varText, 1,
Len(varText) - InStrRev(varText, " ")))
varText = Trim(Mid(varText, Len(TaCellule.Value), Len(varText) - Len(TaCellule.Value)))

End If
Loop
erti1711 75 Messages postés samedi 2 avril 2005Date d'inscription 16 juin 2006 Dernière intervention - 22 juin 2005 à 17:52
0
Utile
Merci a vous,
ScSami tu m'avais déjà répondu en me donnant cette solution:

Do While Len(varText) > 85
If Len(varText) > 85 then
TaCellule.Value = Mid(varText, 1, 85)
varText = Mid(varText, 86, Len(varText) - 85)
End If
Loop

Le problème après c'est que assez souvent ça coupe les chaines.Et depuis j'avais pas trouver de solution.
Je vais tester vos nouvelles propositions et je vous tiendrait au courant.
Merci
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 22 juin 2005 à 18:21
0
Utile
Oui, en effet, ce que je devais être fatigué le jour où je t'ai donné cette solution !!!



Mais dit moi un truc... N'as-tu pas la MSDN (l'aide du VB) ???

Pi redit nous, tu codes bien en VB6, pas en .NET ou en VBA ???
(précise-le toujours dans tes message ça... c'est important pour qu'on
puisse bien t'aider!!! Y'en a marre à la longue de devoir toujours
poser la question... Même si avec ton code je devine que tu codes en
VB6...)



Pi n'oubli pas non plus d' "Accepter" les réponses bonnes...



Alors, ça fonctionne ou pas ??? ()
erti1711 75 Messages postés samedi 2 avril 2005Date d'inscription 16 juin 2006 Dernière intervention - 22 juin 2005 à 18:44
0
Utile
Je codes en VBA sur excel.J'ai essayer ton code ScSami mais ça ne marche pas.



Voici un bout de mon code:

Sub On_Click()
Dim ligne As Integer
Dim j As Integer
Dim px As String
Dim ref As String
Dim design, d2, d3 As String
Dim Hauteur As Single
Dim VarDeb As String

ligne = ActiveCell.Row 'numéro de la ligne sélectionnée
ActiveSheet.Select 'sélection de la page active
Range("C" & ligne).Select
ref = Cells(ligne, "B") 'affectation
If (Range("B" & ligne).MergeCells = True) Then
design = Cells(ligne, "C") + Cells(ligne + 1, "C")
Else
design = Cells(ligne, "C")
End If
px = Cells(ligne, "D") 'affectation
Selection.Copy 'copie de la ligne
Sheets("DEVIS").Select 'sélection automatique de la feuille DEVIS
For j = 26 To 64 If (Cells(j, "B") "" And Cells(j, "E") "") Then 'si les cellules sont vide
Range("B" & j).Select
Cells(j, "B") = ref 'réaffectation
With Cells(j, "B") 'pour la référence
.Font.Size = 8 'taille de la police
.Font.Name = "Arial" 'style de police
.Font.Bold = False 'pas de bordure
.Font.Color = black 'couleur de la police
.HorizontalAlignment = xlHAlignLeft 'aligné à gauche horizontalement
.VerticalAlignment = xlVAlignJustify 'justifié verticalement
.WrapText = True 'renvoie à la ligne
End With
MsgBox Len(design) 'C'est pour m'aider le MsgBox

Ici ca marche pas:
Do While Len(design) > 85
If Len(design) > 85 Then
Cells(j, "E").Value = Mid(design, 1, Len(design) - InStrRev(design, " "))
design = Mid(design, Len(Cells(j, "E").Value), Len(design) - Len(Cells(j, "E").Value))
Cells(j + 1, "E").Value = design
End If
Loop


With Cells(j, "E") 'pour la désignation
.Font.Size = 8 'taille de la police
.Font.Name = "Arial" 'style de police
.Font.Bold = False 'pas de bordure
.Font.Color = black 'couleur de la police
.HorizontalAlignment = xlHAlignLeft 'aligné à gauche horizontalement
.VerticalAlignment = xlVAlignTop 'aligné en haut verticalement
.Orientation = xlHorizontal 'orientation horizontal du texte
End With
Cells(j, "W") = 1 'quantité=1 par défaut
Cells(j, "W").HorizontalAlignment = xlHAlignCenter
Cells(j, "W").VerticalAlignment = xlVAlignJustify
'pour prix unitaire
Cells(j, "Z") = px 'réaffectation
Cells(j, "Z").HorizontalAlignment = xlHAlignRight
Cells(j, "Z").VerticalAlignment = xlVAlignJustify
'pour montant TTC
Cells(j, "AD").HorizontalAlignment = xlHAlignRight
Cells(j, "AD").VerticalAlignment = xlVAlignJustify
Exit For
End If
Next j
End Sub
ScSami 1490 Messages postés mercredi 5 février 2003Date d'inscription 3 décembre 2007 Dernière intervention - 22 juin 2005 à 19:42
0
Utile
Bon, alors, déjà, quand ça marche pas, outre de se
demander pourquoi avant de poster, on note le message d'erreur (qui
sont d'ailleurs fait pour ça !!!) pour aider les pauvres VBFranciens
qui veulent bien t'aider... d'accord ???

C'est bien !



Donc, si ça ne fonctionne pas, à mon avis, c'est tout con... Cells(x,y)
s'utilise avec des chiffres alors que Range("A1") s'utilise avec une
chaine de caractères !!! Encore que je dis peut-être une connerie!!!
Parce qu'autrement, y'aurait plein d'erreurs dans ton code...



Donc, re teste avec ça et dis moi si y'a encore une erreur :





j2 = j




Do While Len(design) > 85

If Len(design) > 85 Then


Cells(j2, 5).Value = Mid(design, 1, Len(design) - InStrRev(design, " "))


design = Mid(design, Len(Cells(j2, 5).Value), Len(design) -
Len(Cells(j2, 5).Value))

End If


j2 = j2 + 1


Loop


If
design<>"" Then
Cells(j2, 5).Value = design



J'attends de voir si ça fonctionne maintenant... Et sinon, essaye
d'obtenir la ligne et le numéro d'erreur s'il y en a une d'accord !



Enjoy quand même et déséspère pas
erti1711 75 Messages postés samedi 2 avril 2005Date d'inscription 16 juin 2006 Dernière intervention - 23 juin 2005 à 09:42
0
Utile
Bonjour ScSami j'ai essayer ton code,les problèmes rencontrés sont:
_ça écrit un ou deux mots par lignes si la chaine ne tient pas dans la cellule (désignation)
_si ça tient,pas de problème
_Message d'erreur: Erreur d'ééxécution '5'
Argument ou appel de procédure incorrect
erti1711 75 Messages postés samedi 2 avril 2005Date d'inscription 16 juin 2006 Dernière intervention - 23 juin 2005 à 18:55
0
Utile
Merci ScSami ca marche,ya juste un pti truc a régler.
A chaque fois que j'importe ca efface la dernière lettre de la phrase ( ca ne l'affiche pas) et sinon souvent le contenu déborde de la cellule.
Merci beaucoup.

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.