Test Macro Excel - gestion de taches

Rag02700, Je confirme le code de JP règle le problème de formule. Là j'ai un autre problème

Erreur d'execution 1004 a pris le relaiet là j'ai aucune idée de la cause. Tu peux le tester sur l'échantillon "fichier 3" que j'ai posté hier si besoin.

Voici ton code que j'utilise avec une petite modification.

Sub Contenu_regroupe()

Dim L_Ligne As Long

Dim Col_Resume As Byte, Row_ET As Byte

Dim Rg_Res As Range

Dim Resultat_txt As String, Le_Resume As String

Dim i As Long

Col_Resume = 1

Row_ET = 1

L_Ligne = Sheets(1).Cells(Rows.Count, Col_Resume).End(xlUp).Row

Set Rg_Res = Sheets(1).Range("A2")

With Sheets(1)

    For i = Row_ET + 1 To L_Ligne

        Le_Resume = .Cells(i, Col_Resume)

        Select Case Le_Resume

            Case Is <> ""

                Resultat_txt = Resultat_txt & Le_Resume & " "

        End Select

    Next i

End With

Sheets(1).Range("A3:A").ClearContents

Rg_Res = Resultat_txt

Set Rg_Res = Nothing

End Sub

Hello,

Quelle erreur !!!!!!!

Sheets(1).Range("A3:A").ClearContents

Salut,

Petit rappel sur le nommage des variables.

  • Le type de variable en première partie et en minuscule ex: str; bol; obj; lst; lgn; dbl; etc.... ou s; b; .. pour ma part je préfère trois lettres
  • Deuxième partie le nom de la variable avec la première lettre de chaque mot en majuscule strFilePath, pour ma part je privilégie l'anglais qui est plus court et plus concis.
  • les constantes seront quand à elles en majuscules avec un underscore entre les mots ex: FULL_PATH_APPLICATION devant lesquelles on peu ajouter le type.

Et maintenant les questions.

  1. Pourquoi ajouter 1 à Row_ET dans le For - Next alors que tu l'a initialisé juste plus haut ? Row_ET = 1
  2. Pourquoi faire un Select Case avec juste une entrée un simple If serait suffisant.
  3. Pourquoi définir un objet Range pour une seule utilisation ? Set Rg_Res = Sheets(1).Range("A2")

Donc en plus concis ça donnerait :

Sub test()
Dim lngLigne As Long
Dim strResultat As String
Dim i As Long
Dim sh As Worksheet
Set sh = ActiveSheet ' // On peut aussi nommer la feuille sh = WorkSheets("Accueil")

    With sh
        lngLigne = Range("A" & .Rows.Count).End(xlUp).Row
        For i = 2 To lngLigne
            If .Range("A" & i) <> "" Then strResultat = strResultat & .Range("A" & i) & " "
        Next
        .Range("A3:A" & lngLigne).ClearContents
        .Range("A2") = Trim(strResultat)
    End With
End Sub

Et si tu es sur de ne pas avoir de lignes vides alors :

Sub test1()
Dim sh As Worksheet
    Set sh = ActiveSheet
    With sh
        .Range("A2") = Join(Application.Transpose(.Range("A3:A" & .Range("A" & .Rows.Count).End(xlUp).Row)), " ")
    End With
End Sub

Et pour finir ne colles pas ton code directement dans le message on ne peut rien en faire tu as un outils adapter dans la barre d'outils

ps: les codes cités sont juste une approche personnelle

Salut Jean- Paul,

Vu que je suis visé implicitement et non explicitement (ce qui est dommage )

Les réponses :

Pourquoi ajouter 1 à Row_ET dans le For - Next alors que tu l'a initialisé juste plus haut ? Row_ET = 1

==> je trouve ça + parlant d'affecter la valeur de la ligne d'en tête et de faire + 1 après. quand tu as 3 lignes de code ok tu peux commencer dans ton for par la ligne +1 mais quand tu as une + grosse appli je m'y retrouve + avec cette manière

Pourquoi faire un Select Case avec juste une entrée un simple If serait suffisant.

Oui pourquoi pas, je devais avoir envie d'utiliser un case ce coup si

Pourquoi définir un objet Range pour une seule utilisation ? Set Rg_Res = Sheets(1).Range("A2")

Je préfère travailler avec des variables je trouve ça + propre même avec une seule utilisation c'est grave docteur ?

Voila, maintenant les questions

Le type de variable en première partie et en minuscule ex: str; bol; obj; lst; lgn; dbl; etc.... ou s; b; .. pour ma part je préfère trois lettres

Sauf erreur de ma part ce n'est pas toujours respecté, Pourquoi ?

Dim i As Long
Dim sh As Worksheet

Deuxième partie le nom de la variable avec la première lettre de chaque mot en majuscule strFilePath, pour ma part je privilégie l'anglais qui est plus court et plus concis.

Sauf erreur de ma part ce n'est pas toujours respecté, Pourquoi ?

Dim lngLigne As Long
Dim strResultat As String

Je vais m'arrêter là ...

Je veux bien que tu fasses de la pédagogie mais il faut appliquer ce qu'on transmet aux autres et non "Fait ce que je dis mais pas ce que je fait" ...

et dernière as tu testé la vitesse d'exécution entre nos 2 codes ?

Salut Rag,

Désolé si je t'ai offensé, ce n'était pas mon but, j'ai même pas fais cas que c'était ton code.

Si j'ai pas formaté tout le code c'était en parti pour garder ses noms de variables. Et bien entendu ce n'est pas grave d'utiliser des variables, je l'encourage même.

et comme je dis en fin de post ce ne sont que des appréciations personnelles.

Concernant la vitesse je t’avouerais que je n'ai pas vérifié.

Pas de soucis

++

Je l'avais vu celle-là après coup, Rag02700

Sheets(1).Range("A3:A").ClearContents

Jean-Paul, merci pour le tips des codes, je me demandais pourquoi ça n'avait pas la même forme

Par contre au bout, de 4000 mots le code ne recupère pas en compte le reste des mots

PS : Merci les gars pour vos contributions, je suis un peu embarrassé meme si c'est des échanges créatives.

ci-joint le fichier brut pour test

Salut à tous,

Bon Tidio à mon avis ton problème vient du fait que tu concatène la valeur de tes cellules dans la cellule A2. Il-y-a certaines limites a Excel que tu peux voir su la documentation de Microsoft.

Donc quand tu fais Resultat_txt = Resultat_txt & Le_Resume & " " et Rg_Res = Resultat_txt tu ajoutes à chaque fois la valeur des cellules comptabilisées

J'ai fais une petite macro pour que tu puisses t'en rendre compte. Pour le coup j'ai supprimé les formules qui pouvaient poser problèmes

Si ton but n'est pas la concaténation alors tu dois nous expliquer en détail tes souhaits.

Salut,

Jean-Paul, mon objectif c'est justement la concaténation. Mais je veux être sur de pouvoir prendre la totalité du contenu et le mettre sur la cellule A2 et delà je peux dérouler la macro (Sub_Split de Rag02700) qui va me permettre de faire un renvoi à la cellule après chaque virgule et un renvoi à la ligne après chaque point virgule. L'objectif final c'est de mettre en forme le doc comme sur le fichier échantillon ci-joint. Comme on dit tous les chemins mènent à Rome. S'il y a autre façon de faire pour contourner cette limite de 33 183 caractères au niveau de la ligne 618, je suis preneur

17echantillon.xlsx (25.20 Ko)

Salut à tous,

Bon là j'ai besoin d'explications j'ai ouvert ton fichier source Brut.cvs bon ok 62268 lignes mais tu veux en faire quoi en définitif de ce fichier ?

C'est là que je me perds dans ta démarche, donc dis moi quelle est la finalité ....

En gros le fichier à la fin il est censé se presenter proprement aussi bien que l'échantillon que j'ai envoyé lors du precedent post. La structure du fichier est tellement improbable ( je te mets en detail toute la démarche que j'essaie de mettre en place). Moi je le traite plus ou moins facilement depuis Notepad mais je ne sais comment le faire avec une macro Excel.

Bonjour,

Un petit feedback, c'est un peu plus clair là sinon je reste dispo pour infos complémentaires.

Bonjour Rag02700 et Jean-Paul,

Voici un fichier doc ci joint qui recense ma démarche et les macros que j'utilisent par sequence. C'est la macro 6 (Contenu_regroupe) qui marche pas et de ce fait la macro 7 (Split_txt) ne peut être tester. Sinon les autres sont ok. Mais j'envoie tout histoire de voir si on peut traiter le sujet d'une autre façon.

Rechercher des sujets similaires à "test macro gestion taches"