erti1711
Messages postés75Date d'inscriptionsamedi 2 avril 2005StatutMembreDernière intervention16 juin 2006
-
22 juin 2005 à 15:12
erti1711
Messages postés75Date d'inscriptionsamedi 2 avril 2005StatutMembreDernière intervention16 juin 2006
-
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
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 !]
morickno
Messages postés117Date d'inscriptionvendredi 22 avril 2005StatutMembreDernière intervention26 juin 2007 22 juin 2005 à 15:42
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
mrdep1978
Messages postés402Date d'inscriptionjeudi 25 novembre 2004StatutMembreDernière intervention 7 juin 20097 22 juin 2005 à 16:54
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
Vous n’avez pas trouvé la réponse que vous recherchez ?
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"...
erti1711
Messages postés75Date d'inscriptionsamedi 2 avril 2005StatutMembreDernière intervention16 juin 20061 22 juin 2005 à 17:52
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
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 22 juin 2005 à 18:21
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...
erti1711
Messages postés75Date d'inscriptionsamedi 2 avril 2005StatutMembreDernière intervention16 juin 20061 22 juin 2005 à 18:44
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
Messages postés1488Date d'inscriptionmercredi 5 février 2003StatutMembreDernière intervention 3 décembre 200724 22 juin 2005 à 19:42
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 :
erti1711
Messages postés75Date d'inscriptionsamedi 2 avril 2005StatutMembreDernière intervention16 juin 20061 23 juin 2005 à 09:42
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
Messages postés75Date d'inscriptionsamedi 2 avril 2005StatutMembreDernière intervention16 juin 20061 23 juin 2005 à 18:55
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.