VBA : Lecture d'une feuille ligne par ligne ?

NoirCafe Messages postés 10 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 23 juin 2011 - 7 juin 2011 à 14:43
NoirCafe Messages postés 10 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 23 juin 2011 - 14 juin 2011 à 14:37
Bonjour le forum

Je viens de me lancer sur le VBA ( débutant donc ) et je peine sur mon programme .

Mon objectif est de reussir à "copier" les mots d'une feuille (FeuilCible)( et uniquement les mots )par une lecture de cette feuille ligne par ligne , et de les placer dans une autre feuille dédiée (FeuilRecepteur )et ce dans une unique colonne .

Apres avoir titillé le net , j'ai obtenu ceci :


Sub CopierColler

j = 1
For i = 1 To 65536

If Application.Worksheets("FeuilleCible").Range("A" & i) = vbString Then
Application.Worksheets("FeuilleRecepteur").Range("A1" & "A" & i).Value = Application.Worksheets("FeuilleCible").Range("A" & i & "T" & i).Value

j = j + 1

End If
Next i

End Sub

Seulement celà ne marche pas , j'ai un message d'erreur "Erreur définie par l'application ou par l'objet "

Je remercie d'avance toutes les personnes qui se pencheront sur mon problème .

Tchuss , NoirCafe .

16 réponses

NoirCafe Messages postés 10 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 23 juin 2011
7 juin 2011 à 15:05
Bon j'ai reussi a comprendre d'ou provenait le message d'erreur , j'avait oublié de faire des " : " entre mes cellules , cependant le code ne fonctionne pas , j'ai seulement obtenu une colonne entière de 8 .
Donc je continue a chercher , mais toute aide est la bienvenue , cela fait plus de 3 jours que je suis dessus ^^ .

ps : J'ai trouvé en partie grace au forum , il est génial .
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 juin 2011 à 15:15
Bonjour,
1) Il te suffisait d'afficher ceci :
i = 3
 MsgBox "A1" & "A" & i

pour comprendre ton erreur
2) à quoi te sert j dans ton code ?
3) du même genre que 1)



____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
7 juin 2011 à 15:17
titille un peu moins le net et un peu plus ce que tu as en toi-même (des neurones, entre autres) et tout commencera probablement à aller mille fois mieux

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
NoirCafe Messages postés 10 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 23 juin 2011
7 juin 2011 à 17:22
Le j ne sert a rien , oublié de l'enlever avant de poster .

J'essaie souvent de faire par moi-même mais pour ce cas là , je me prend totalement la tête , les aprem sont pas folichons ^^ .
En tout cas , je te remercie dejà d'avoir posté , je manque pas mal de méthodes .

Cependant mon code ne répond pas a mes attentes cad que j'aimerais pouvoir avancer case par case dans le sens de la ligne et qu'a chaque mot rencontré ( et seulement les mots ) je puisse les copier-coller un a un , dans une unique colonne dans une autre feuille , et ainsi de suite jusqu'a la fin de la feuille .

Dans mon code actuel , ci dessus ( le " : " corrigé bien entendu ) , le problème de la condition se pose , car j'aimerais pouvoir vérifier que la valeur n'est pas numérique or je ne vois pas comment placer un , par exemple " If Not IsNumeric(Range("A1")) Then " dans l'Application.Worksheet .

De plus mon code me retourne toujours la même valeur en boucle dans ma colonne .

Si quelq'un a un peu de temps pour m'aiguiller ou me proposer un code , je lui serait très reconnaissant car je ne voit vraiment pas du tout comment faire .


Désolé pour le pavé .

NoirCafe
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NoirCafe Messages postés 10 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 23 juin 2011
8 juin 2011 à 17:06
Personne n'a une petite idée , ne serait ce que pour me donner une piste pour démarrer ?
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 juin 2011 à 18:25
Je veux bien tenter de t'aider, mais il va te falloir être très précis.

cad que j'aimerais pouvoir avancer case par case dans le sens de la ligne et qu'a chaque mot rencontré ( et seulement les mots ) je puisse les copier-coller un a un , dans une unique colonne dans une autre feuille , et ainsi de suite jusqu'a la fin de la feuille .

- Qu'entends-tu par "seulement les mots" ? donne une définition très précise de cette exigence.
tu dis plus bas :
car j'aimerais pouvoir vérifier
que la valeur n'est pas numérique

est-ce cela suffit pour répondre à l'exigence ennoncée ? (est-ce que, par exemple, "t4/oto21" serait un "mot" ? Si une cellule contient "titi toto", contient-elle un ou deux "mots" et dans ce cas (si 2 mots) ===>> à copier dans une cellule ou dans deux, et selon quelle principe ?
Voilà !
relis-toi, puis mets-toi dans la peau d'un lecteur, puis fais en sorte qu'il n'ait AUCUNE autre question à te poser. C'est la condition que je mets à l'aide que je t'apporterais. Je cesserai de continuer cette discussion si, tes explications n'étant pas très précises et claires, je devrais te poser une seule question de plus !
Fais assez vite car je pars vers ailleurs demain matin à 8 heures et ne sais pas quand je pourrai revenir sur ce forum
____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 juin 2011 à 18:42
et fais gaffe à ceci, en plus :
....les mots d'une feuille....par une lecture de cette feuille ligne par ligne , et de les placer dans une autre feuille dédiée (FeuilRecepteur )et ce dans une unique colonne

TOUS les "mots" (à définir) de toutes les cellules de chaque ligne ?
il est bien clair que si tel était le cas, tu aurais toutes les chances (puisque tu veux parcourir jusqu'à la ligne 65536 et que l'on suppose donc qu'elles peuvent toutes être remplies), de ne pouvoir ensuite rentrer tous ces "mots" sur une seule colonne de ton autre feuille !

____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
8 juin 2011 à 21:37
Bon : 21h 40 = heure de me mettre au lit pour être prêt à voyager.
A un autre jour, donc, à moins que, tes explications devenant enfin précises, un autre n'ait pu te répondre entre-temps.
Bye


____________________
Vous aimez Codes-Sources ? Il vous aide ? Cliquez ici pour l'aider à continuer
Cliquer sur "Réponse acceptée" en bas d'une solution adéquate est
0
adam525 Messages postés 22 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 10 juin 2011
9 juin 2011 à 01:18
Bonjour,

On suppose que chacune de tes cellules contient uniquement des mots (pas de phrase). Si c'était le cas, tu devrais d'abord spliter ta colonne avec "textTocolumns" pour avoir des mots.
Je pense que ce que tu devrais faire c'est:

1-Copier tes données dans ta feuille récepteur
2-Vérifier ligne par ligne (for each cellule in maplage... où cellule et maplage sont des variables range à définir) qu'il s'agit d'un nombre avec les fonctions excel prévues à cet effet. Soit avec une fonction de type Isnumeric, soit en essayant de convertir la valeur de la cellule en nombre.
3- Si tu obtiens une erreur pour la cellule, cela signifie que c'est du texte. Tu copie la cellule dans une autre feuille ou tu effaces son contenu.
4-dans le cas ou tu as effacé le contenu de la cellule, tu supprime ensuite les lignes vides.

Bon courage

vautMieuxUnQuiTrouveQue100QuiCherchent
0
NoirCafe Messages postés 10 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 23 juin 2011
9 juin 2011 à 14:12
Bonjour le Forum , adam et ucfoutu .

Tout d'abord merci d'avoir répondu , désolé je n'ai pas pu avoir accès a mon PC hier soir .
Je vais essayer de faire simple , j'ai une feuille excel avec des mots , un tableau et des chiffres .
Je veut uniquement copier les mots composé uniquement de lettres .

Je n'ai pas de phrases en effet Adam , donc pas besoin de spliter .

Bon j'ai retouché mon code en essayant autres choses , il ne marche pas mais il n'y a pas de messages d'erreur ( maigre consolation ) .

Voici mon code :



Private Sub CopierColler

    Dim iPD As Long
    Dim iTB As Long
    Dim PD As Worksheet
    Dim TB As Worksheet

    Set PD = Worksheets("Production Data") 'Feuille ou je veut copier
    Set TB = Worksheets("TabTraduction")   'Feuille où je veut coller

    iTB = 2
    For iPD = 2 To 250
        If PD.Cells(2, iPD).Text Like "[a-z]" Then
            PD.Range(iPD & ":" & iPD).Copy TB.Cells(iTB, 1)
            iTB = iTB + 1
    
        End If
    Next
 
End Sub



En esperant que vous avez mieux cerné mon problème .


NoirCafé

PS : Je vais essayer ce que tu m'as conseillé Adam .
0
NoirCafe Messages postés 10 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 23 juin 2011
9 juin 2011 à 14:16
Et je recherche a copier les mots un a un .

ps: On ne peut éditer ses messages ?
0
NoirCafe Messages postés 10 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 23 juin 2011
9 juin 2011 à 15:07
 Private Sub CopierColler

    Dim iPD As Long
    Dim iTB As Long
    Dim PD As Worksheet
    Dim TB As Worksheet

    Set PD = Worksheets("Production Data") 'Feuille ou je veut copier
    Set TB = Worksheets("TabTraduction")   'Feuille où je veut coller

    iTB = 2
    For iPD = 2 To 250
    
    If Not IsNull(PD.Cells(2, iPD).Text) And Not IsNumeric(PD.Cells(2, iPD).Value) Then
 
            PD.Rows(iPD).Copy TB.Cells(iTB, 1)
            
            iTB = iTB + 1
    
        End If
    Next
End Sub



Bon , j'ai réglé mon problème de condition ici , vu que je n'ai pas de mots du style "3aez1" .
Ici le probleme c'est que rien ne se passe , mon code n'a pas l'air de lire la feuille , et ne copie rien ...

Désolé pour les doubles posts , je n'ai pas l'impression qu'on puisse editer .
Merci d'avance

NoirCafé
0
adam525 Messages postés 22 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 10 juin 2011
10 juin 2011 à 15:09
Bonjour,

j'ai regardé le code. Tu copies une ligne dans une colonne. j'ai modifié le code et fait des tests et çà fonctionne chez moi. Pour que çà marche il faut que les données soient dans la feuille production des données sur la ligne 2.

En espérant t'avoir aider.

 Private Sub CopierColler()

 Private Sub CopierColler()

    Dim iPD As Long
    Dim iTB As Long
    Dim PD As Worksheet
    Dim TB As Worksheet

    Set PD = Worksheets("Production Data") 'Feuille ou je veut copier
    Set TB = Worksheets("TabTraduction")   'Feuille où je veut coller

    iTB = 2
    For iPD = 2 To 5
    If Not IsNull(PD.Cells(2, iPD).Text) And Not IsNumeric(PD.Cells(2, iPD).Value) Then
 
            PD.Cells(2, iPD).Copy TB.Cells(iTB, 1)
            
            iTB = iTB + 1
         End If
    Next
End Sub




vautMieuxUnQuiTrouveQue100QuiCherchent
0
NoirCafe Messages postés 10 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 23 juin 2011
10 juin 2011 à 15:48
Salut Adam , merci de t'être penché sur mon problème , en fait j'ai pas mal changé mon code depuis , j'ai me suis rendu compte a terme de mon erreur ^^ .

Et en fait , nos 2 codes sont plus ou moins similaires ( le mien est plus adapté a mes besoins mais ça c'est bien sûr normal ^^ , je ne le met pas car le problème n'est pas là )
Bref , les 2 codes ( que ce soit le tien ou le mien )rencontre la même erreur .

"Impossible de lire la propriété Text de la classe Range " et il selectionne la ligne ci dessous .

If Not IsNull(PD.Cells(2, iPD).Text) And Not IsNumeric(PD.Cells(2, iPD).Value) Then


Je pense que c'est une erreur qui est lié a mes feuilles et pas au code mais je vois pas du tout et j'ai rien trouvé sur le net .


NoirCafé
0
adam525 Messages postés 22 Date d'inscription samedi 26 janvier 2008 Statut Membre Dernière intervention 10 juin 2011
10 juin 2011 à 17:35
Bonjour NoirCafe,

je pense que tu dois changer ta méthode de vérification. Isnull est utilisé pour des variables et dans un contexte particulier. C'est presque un type de valeur en soit. Tu devrais utiliser isEmpty à la place et PD.Cells(2, iPD).Text<>"".

Cordialement


vautMieuxUnQuiTrouveQue100QuiCherchent
0
NoirCafe Messages postés 10 Date d'inscription lundi 6 juin 2011 Statut Membre Dernière intervention 23 juin 2011
14 juin 2011 à 14:37
Ca marche , mon code était bon , il a juste fallut que je reboot mon PC , merci de t'être penché sur mon problème .
0
Rejoignez-nous