Test Macro Excel - gestion de taches

Salut le fil ...

Pour l'exemple 1 tu peux faire aussi :

Worksheets("Résultat attendu 1").Range("A3").Value = _
    Replace(Join(Application.Transpose(Worksheets("Exemple 1").Range("A2:A" & _
    Worksheets("Exemple 1").[A500].End(xlUp).Row)), " "), "  ", " ")

Bien entendu il faut adapter.

pour le deuxième faut voir c'est à étudier

Salut le fil ...

Bon moi je vais partir sur le fait qu'une chaine est toujours là "Travailler sur", en partant de là tu peux tester ce bout de code dans la même idée que ma première proposition.

Sub Test()
Dim a As String, b As Long, i As Long, j As Integer, strTemp As String, tabTemp As Variant
    'a = "travailler sur; Excel VBA; en cours; c'est tendu; faut se grouiller; travailler sur; SAP; à faire; c'est mort; travailler sur; MySQL; terminé; azeulai; travailler sur; MCD; terminé; 20 assuré; RAF;"
    '// On charge la valeur à traiter
    a = Worksheets("Test2").Range("A2").Value
    '// On calcule le nombre d'occurance pour "Travailler sur"
    j = CalculateOccurenceNumber(a, "travailler sur")
    '// on démarre par la fin de la chaine
    For i = j + 1 To 2 Step -1
        '// on cherche la dernière occurence
        b = InStrRev(a, "travailler sur", , vbTextCompare)
        strTemp = Right(a, Len(a) - b + 1)

Debug.Print b & "    :    " & strTemp
        '// on charge un tableau temporaire
        tabTemp = Split(strTemp, ";")
        '// et on transpose sur la feuille
        Worksheets("ResultatTest2").Range("A" & i).Resize(, UBound(tabTemp)) = tabTemp
        '// On supprime la chaine traitée
        a = Replace(a, strTemp, "")
        j = j - 1

    Next

End Sub

Function CalculateOccurenceNumber(strString As String, strCharacter As String) As Integer
'// Fonction trouvée sur la toile
Dim intPosition As Integer
   intPosition = 1
    While intPosition <= Len(strString) And strCharacter <> "" And InStr(intPosition, strString, strCharacter) <> 0
        intPosition = InStr(intPosition, strString, strCharacter) + 1
        CalculateOccurenceNumber = CalculateOccurenceNumber + 1
    Wend
End Function

Voilà, mais là encore c'est subjectif car on peut avoir des modifications qui ne seront pas prises en compte.

Bonne programmation.

Hello,

Sub Split_txt()

Dim Tab_Split_Ligne, Valeur_Ligne, Tab_Split_Colonne, Valeur_Colonne
Dim rg_Data As Range
Dim Data_split As String, separateur_Colonne As String, separateur_Ligne As String
Dim i As Long, y As Long
Dim First_Col_Resti As Integer, First_Ligne_Resti As Integer

Set rg_Data = Sheets(1).Range("A1") 'Cellule contenant les données

Data_split = rg_Data.Value 'Récupération des valeurs
separateur_Colonne = "," 'Def du séparateur colonne
separateur_Ligne = ";" 'Def du séparateur Ligne
Tab_Split_Ligne = Split(Data_split, separateur_Ligne) 'Dissocie les data en fonction du separateur

First_Col_Resti = 1 'Premiere colonne de restitution
First_Ligne_Resti = 5 'Premiere ligne de restitution

i = First_Col_Resti
y = First_Ligne_Resti
For Each Valeur_Ligne In Tab_Split_Ligne 'Boucle sur toutes les valeurs d'un ligne
    Tab_Split_Colonne = Split(Valeur_Ligne, separateur_Colonne) 'Dissocie les data en fonction du separateur
    For Each Valeur_Colonne In Tab_Split_Colonne
        Cells(y, i).Value = Valeur_Colonne 'Affectation de la valeur
        i = i + 1 'Colonne suivante
    Next Valeur_Colonne
    y = y + 1
    i = First_Col_Resti
Next Valeur_Ligne

Set rg_Data = Nothing

End Sub

Salut Jean-Paul,

Pour le 1er exemple j'ai fais qlq motifs et ça donne ce qui suit

Sub m()

Worksheets("JIRA CDC - Copie2").Range("A2").Value = _

Replace(Join(Application.Transpose(Worksheets("JIRA CDC - Copie2").Range("A2:A" & _

Worksheets("JIRA CDC - Copie2").[A100000].End(xlUp).Row)), " "), " ", " ")

End Sub

Mais le code se compile pas et ça m'affiche (erreur d'execution '13' incompatibilité de Type).

Pourtant j'ai bien vérifié et à priori c'est bon pour les noms de feuille, le contenu et le nombre de ligne.

Tu saurais pas la cause ?

Rag02700
J'ai commencé à bosser avec le fichier brut dont je t'ai parlé et pareil pour le 1er exemple ça affiche (erreur d'execution '13' incompatibilité de Type).

Tu connaitrais par hasard la cause? ci-dessous le nouveau code (pour adapter)

Sub Contenu_regroupe()

Dim L_Ligne As Long

Dim Col_Résumé As Byte, Row_ET As Byte

Dim Rg_Res As Range

Dim Resultat_txt As String, Résumé As String

Dim i As Long

Col_Résumé = 1

Row_ET = 1

L_Ligne = Sheets(1).Cells(Rows.Count, Col_Résumé).End(xlUp).Row

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

With Sheets(1)

For i = Row_ET + 1 To L_Ligne

La_Tache = .Cells(i, Col_Résumé)

Select Case Résumé

Case Is <> ""

Resultat_txt = Resultat_txt & Résumé & " "

End Select

Next i

End With

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

Rg_Res = Resultat_txt

Set Rg_Res = Nothing

End Sub

Hello,

Sur quelle ligne l'erreur ?

je sais pas quelle ligne exactement mais c'est dans la boucle. Par contre ça marche nickel avec les 3 colonnes (taches, outils et statuts)

Salut le fil...

Salut Jean-Paul,

Pour le 1er exemple j'ai fais qlq motifs et ça donne ce qui suit
Sub m()

Worksheets("JIRA CDC - Copie2").Range("A2").Value = _

Replace(Join(Application.Transpose(Worksheets("JIRA CDC - Copie2").Range("A2:A" & _

Worksheets("JIRA CDC - Copie2").[A100000].End(xlUp).Row)), " "), " ", " ")

End Sub

Mais le code se compile pas et ça m'affiche (erreur d'execution '13' incompatibilité de Type).

Pourtant j'ai bien vérifié et à priori c'est bon pour les noms de feuille, le contenu et le nombre de ligne.

Tu saurais pas la cause ?

Change ta destination : Worksheets("JIRA CDC - Copie2").Range("A2").Value =... sur une autre colonne Worksheets("JIRA CDC - Copie2").Range("C2").Value =... et refait le test Excel ne dois pas apprécier que tu fasses le Transpose sur la même colonne.

J'ai essayé ça Jean-Paul mais c'est pas à cause de ça. c'est à cause du nombre de ligne je pense j'en ai plus de 45000 et askip le "Application transpose" ne dépasse pas 16385 lignes sur excel 2007. Quand j'ai réduit le nombre de lignes pour tester, ça a marché c'est peut être dû à ça plutôt.

Après plusieurs test ça s'arrête exactement à 462 lignes, au delà ça ne marche pas.

Rag02700
Tu penses que le problème avec ton 1er code peut aussi être lié au nombre de lignes ?

C'est possible puisque j'ai aussi mis un transpose.

Points à vérifier sur ton Tableau

  • Pas de Chaine de plus de 255 caractères.
  • Pas de cellules nulle (telle que « Null », « #N/A »).
  • Pas plus de 5461 lignes. (Sur les docs que j'ai pu trouver)

Après il ne te restes plus qu'a gérer l'erreur et à faire par paquets.

merci pour ces détails !

C'est pas un tableau justement, c'est juste une feuille excel. Je pense que ça peut changer des choses.

Pour les Chaines de plus de 255 caractères. => ça c'est ok

Pas de cellules nulle c'est des cellules vides non? => ça ça ne pose pas de problème si c'est le cas

Là je sais pas mais ça le bloque à 462.

Pour les paquets comment on fait alors sachant que je pourrait pas regrouper les différents paquets plus tard en un seul gros paquet confère (règle moins de 255 char)

Salut tout le monde,

Rag02700, j'ai essayé en vain d'amener toutes les valeurs sur la A2 (Cf Sub Premier_Resultat()), mais ça ne marche pas. Ca affiche erreur de compatibilité 13 alors qu'avec le fichier exemple que j'ai upload sur le forum c'est nickel. Apparemment, le nombre de ligne à traiter est trop grand (environ 60000), comme l'avais dit Jean-Paul. Du coup je suis bloqué et je peux pas dérouler la suite de la macro (Sub Split_txt() version 2 avec le "," et le ";" ). T'as une idée sur comment la contourné ?

Merci d'avance

Hello,

Il date un peu ton sujet ...

Si c'est une erreur avec le nombre de lignes (je doute) ça peut venir de ces 2 variables qui sont à max 32 000 et quelques ...

Dim First_Col_Resti As Integer, First_Ligne_Resti As Integer

Donc à moins que ta premiere colonne où tu veux ton résultat soit la colonne 50 000 ...

Ou que ta première ligne de restitution soit la ligne 55 000 ...

Tu ne devrais pas avoir d'erreur avec le nombre de ligne via mon code...

L'erreur doit venir d'ailleurs mais sans fichier ...

Ça date grave, je parle plutôt du tout 1er code où l'on collecte le contenu de toute les lignes à partir de la deuxième et on les collent sur la cellule A2. c'est plutôt celle là qui coincent parce que le nombre de ligne à mémoriser puis à restituer est possiblement grand. Or le split sur la macro 2 part de là. Donc sans le 1er, je reste bloqué. Si tu penses qu'ils ne devraient pas y avoir de problèmes. Je posterai le fichier sur lequel je travaille.

Hello

Si c'est celui la :

Sub Premier_Resultat()

Dim L_Ligne As Long
Dim Col_Taches As Byte, Row_ET As Byte
Dim Rg_Res As Range
Dim Resultat_txt As String, La_Tache As String
Dim i As Long

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

Set Rg_Res = Sheets(2).Range("A3")

With Sheets(1)
    For i = Row_ET + 1 To L_Ligne
        La_Tache = .Cells(i, Col_Taches)
        Select Case La_Tache
            Case Is <> ""
                Resultat_txt = Resultat_txt & La_Tache & " "
        End Select
    Next i
End With

Rg_Res = Resultat_txt

Set Rg_Res = Nothing

End Sub

Idem pas possible que ce soit lié au nombre de ligne sauf si la colonne des taches est > à 255 ou si tes en tetes sont > à la ligne 255 via c'est 2 variables :

Col_Taches = 1
Row_ET = 1

Mais dans ton exemple tes taches etaient sur la colonne 1 et tes en tetes sur la ligne 1 il me semble.

Le reste est en "long" ... donc tu peux aller jusque 9 223 372 036 854 775 807 de lignes ...

A moins que tu nous as bricolé un truc avec ce nombre de ligne ?????????????

Non j'ai pas bricolé au delà de ça et à priori, je dépasse pas du tout, les 255 pour les elements que tu viens de citer. Je te prepare la VO du fichier pour demain et tu pourras executer la macro pour voir ce que ça donne. Là, je ne vois pas de raison du pourquoi ça ne marche pas

Je confirme, c'est pas le nombre de lignes qui coincent. Mais c'est les textes qui sont indexés en formules. Ce ne sont pas de vraies formules mais ils sont référencés comme tel parce que ça commence par =. Du coup je pense que la macro ne les identifient pas donc l'execution se bloque. Je te mets les deux 1ers fichiers (une où la macro marche et une non) pour que tu vois de quoi je parle. Puis le fichier 3 pour que tu vois un peu comment ce texte indexé formule est intégré par ci par là dans tout le fichier original (86000 lignes environ).

Je me demande s'il est possible d'executer une macro qui transforme toutes les formules en texte et executer la macro après.

Salut,

Tu peux tester ce bout de code...

Sub Test3()
Dim a
Dim r As Range, f As Worksheet
Set f = Worksheets("Sheet3")    ' // Doit être adapté
    Set r = f.Range("A1:A" & f.Range("A" & f.Rows.Count).End(xlUp).Row)
    With r
        a = .Formula
        For i = LBound(a) To UBound(a)
            If Left(a(i, 1), 1) = "=" Then
                a(i, 1) = "'" & a(i, 1)
            End If
        Next
        r.Value = a
    End With

End Sub

Jean-Paul, c'est good ton code, après la transfo des formules, j'ai pu dérouler mon code, je vais executer tout le reste pour voir si je rencontre plus de problème par la suite. Je pense qu'on tient le bon bout

Top !

J'allais regarder mais si le code de jean paul résout ton pb pas la peine

Rechercher des sujets similaires à "test macro gestion taches"