Microsoft 365 pb vba erreur et pb ordre des colonnes et formule gauche

Céline49

XLDnaute Junior
Bonjour,

Je ne comprends pas j'ai un message d'erreur sur une formule qui ne me posait pas problème jusqu'alors à ce niveau
.Range("A:A,E:E").Delete
mais je ne sais pas pourquoi
De plus je n'arrive pas à avoir l'ordre des colonnes que je veux et je ne comprends pas pourquoi !

par ailleurs je ne sais pas comment faire une boucle pour une formule gauche.

Quelqu'un pourrait-il m'aider
Grand merci par avance

ci-joint le fichier
 

Pièces jointes

  • Intégration vente.xlsm
    61.3 KB · Affichages: 4
Solution
Bonsoir Céline,
j' ai corrigé le code.
1)
1580585492225.png

Donc pour les 2 Onglets Cai et Bqe (Pour la colonne N° de Pièce)
J'ai conservé les 4 premiers caractéres en vert.
La ligne de code est la suivante : elle est unique donc identifiable facilement.
- TabTempBis(i, 2) = Split(TabTemp(i, 6), "/")(1) ' N° de pièce soit 1987 en vert
entre parenthése (1) = la partie gardé en Vert 1987
si vous avez envie de garder la partie en rouge 1787 remplacé le 1 par 0 entre parenthése (0)
cf ci dessous :
- TabTempBis(i, 2) = Split(TabTemp(i, 6), "/")(0) ' N° de pièce soit 1787 en Rouge
je vous ai laissé les feuilles original en Archive pour...

laurent950

XLDnaute Accro
Bonsoir Céline,
j' ai corrigé le code.
1)
1580585492225.png

Donc pour les 2 Onglets Cai et Bqe (Pour la colonne N° de Pièce)
J'ai conservé les 4 premiers caractéres en vert.
La ligne de code est la suivante : elle est unique donc identifiable facilement.
- TabTempBis(i, 2) = Split(TabTemp(i, 6), "/")(1) ' N° de pièce soit 1987 en vert
entre parenthése (1) = la partie gardé en Vert 1987
si vous avez envie de garder la partie en rouge 1787 remplacé le 1 par 0 entre parenthése (0)
cf ci dessous :
- TabTempBis(i, 2) = Split(TabTemp(i, 6), "/")(0) ' N° de pièce soit 1787 en Rouge
je vous ai laissé les feuilles original en Archive pour comparer le resultat de la procédure VBA

' ******************************************************************************************************
2)
' Encore un autres détail si vous n'avais pas besoin de la lignes des titres
il y a une variable a changer la ligne est unique aussi :
actuelement prise en compte de la ligne de titre dans la restitition
TabTemp = fl.Range(fl.Cells(1, 1), fl.Cells(fl.Cells(65536, 1).End(xlUp).Row, 10))
Alors si vous avez pas envie de la lignes de titres (Changer 1 par 2)
TabTemp = fl.Range(fl.Cells(2, 1), fl.Cells(fl.Cells(65536, 1).End(xlUp).Row, 10))

Cela devrait être bon
Cdt
laurent
 

Pièces jointes

  • Intégration vente (Correction).xlsm
    84.1 KB · Affichages: 5
Dernière édition:

Céline49

XLDnaute Junior
Merci beaucoup Laurent950 pour ces corrections qui fonctionnent effectivement parfaitement. Par contre, je viens de me rendre compte d'une imperfection pour mes n° de pièces car en sélectionnant les 4 premiers caractères, les n° de pièce que je conserve ne correspondent pas au n° de pièce contenu dans le fichier Vte (= facture de vente) ce qui ne me permets pas de pouvoir les rapprocher facilement....et il me faut absolument un numéro de pièce identique pour toute l'écriture (en général qui comprends 2 lignes...mais peut également en contenir davantage)
Voici un exemple dans le fichier de ce que je voudrais, identifié en rouge....mais est-ce possible??

ps: je suis novice dans le vba. Quel est l'intérêt d'avoir créé une variable TabTempBis et TabTempFeuile??

En tout cas merci pour tout
 

Pièces jointes

  • Intégration vente (Correction).xlsm
    84.4 KB · Affichages: 3

laurent950

XLDnaute Accro
J'ai une question
qu'elle est la régle ? feuil CAI
1580852388615.png

Je pense que c'est pas possible en l'état sauf si il y a une régle précise.
Pour
TabTempBis, je découpe un texte et le resultat "1787/1987" qui est stocké dans une variable tableau (et je récupére que la valeur de la case du tableau que je stocke dans cette variable = TabTempBis
et
TabTempFeuile = je recupére une plage de cellule que je stocke en variable Objet qui est TabTempFeuile grace a un accesseur set
 
Dernière édition:

Céline49

XLDnaute Junior
Les N° Pièce que je souhaitent récupérer sont toujours celles qui sont dans la 2ème partie de la colonne N° Pièce ("1787/1987"--> récupérer 1987) et cette spécificité de n° de pièce est toujours située sur la ligne qui contient "CCLIENT" en colonne C.
Ensuite comme mon nombre de lignes dans une même pièce (=écriture) est variable d'une pièce à une autre, je pense qu'il faut rajouter ma colonne I pour identifier quand la pièce se termine.
Est-ce plus clair?
 

laurent950

XLDnaute Accro
Bonsoir Céline,
Est-ce plus clair ? Disons pas vraiment car par exemple (je pense qu'il faut rajouter ma colonne I pour identifier quand la pièce se termine) c'est vague !
Si non je pense avoir compris votre problématique métier, je vous envois le fichier.

Ps : Si le resultat attendu est effectivement correcte, juste une remise en forme (quelques secondes suffisent)

Laurent
 

Pièces jointes

  • Intégration vente (Correction V1).xlsm
    145.8 KB · Affichages: 2

laurent950

XLDnaute Accro
Bonsoir,
je pense que cette méthode est pas mal :

le code :
VB:
Sub ModifBisFinal()
Dim fl As Worksheet
Dim TabTemp As Variant
Dim TabTempFeuile As Range
Dim TabTempBis() As Variant

'Désactiver le raffraichissement d'écran
    Application.ScreenUpdating = False

' Travailler sur la feuille Vte, Cai et Bqe
For Each fl In Worksheets
  If fl.Name = "Vte" Or fl.Name = "Cai" Or fl.Name = "Bqe" Then
    Set TabTempFeuile = fl.Range(fl.Cells(1, 1), fl.Cells(fl.Cells(65536, 1).End(xlUp).Row, 10))
    TabTemp = fl.Range(fl.Cells(1, 1), fl.Cells(fl.Cells(65536, 1).End(xlUp).Row, 10))
    ReDim TabTempBis(LBound(TabTemp, 1) To UBound(TabTemp, 1), LBound(TabTemp, 1) To UBound(TabTemp, 2) - 3)
    For i = LBound(TabTemp, 1) To UBound(TabTemp, 1)
        If fl.Name = "Vte" Then
            TabTempBis(i, 1) = TabTemp(i, 2) ' Date
            TabTempBis(i, 2) = TabTemp(i, 6) ' N° de pièce
            TabTempBis(i, 3) = TabTemp(i, 3) ' Compte
            TabTempBis(i, 4) = TabTemp(i, 4) ' Libellé
                If i > 1 Then
                    TabTempBis(i, 5) = CDbl(Replace(TabTemp(i, 7), ".", ",")) ' Débit
                    TabTempBis(i, 6) = CDbl(Replace(TabTemp(i, 8), ".", ",")) ' Crédit
                Else
                    TabTempBis(i, 5) = TabTemp(i, 7) ' Débit
                    TabTempBis(i, 6) = TabTemp(i, 8) ' Crédit
                End If
        ElseIf fl.Name = "Cai" Then
            TabTempBis(i, 1) = TabTemp(i, 2) ' Date
            TabTempBis(i, 3) = TabTemp(i, 3) ' Compte
            TabTempBis(i, 4) = TabTemp(i, 4) ' Libellé
                If TabTemp(i, 6) Like "*" & "/" & "*" Then
                    TabTempBis(i, 2) = Split(TabTemp(i, 6), "/")(1) ' N° de pièce (pour ne garder que les caractères de droite, remplacer le 0 entre parenthèse par un 1)
                    TabTempBis(i, 7) = Split(TabTemp(i, 6), "/")(0) ' N° de Reference (pour ne garder que les caractères de droite, remplacer le 0 entre parenthèse par un 1)
                Else
                    TabTempBis(i, 2) = TabTemp(i, 6) ' N° de pièce
                    TabTempBis(i, 7) = TabTemp(i, 6) ' N° de pièce (pour ne garder que les caractères de droite, remplacer le 0 entre parenthèse par un 1)
                End If
                    If i > 1 Then
                        TabTempBis(i, 5) = CDbl(Replace(TabTemp(i, 7), ".", ",")) ' Débit
                        TabTempBis(i, 6) = CDbl(Replace(TabTemp(i, 8), ".", ",")) ' Crédit
                    Else
                        TabTempBis(i, 5) = TabTemp(i, 7) ' Débit
                        TabTempBis(i, 6) = TabTemp(i, 8) ' Crédit
                        TabTempBis(i, 7) = "N° Reference"
                    End If
        ElseIf fl.Name = "Bqe" Then
            TabTempBis(i, 1) = TabTemp(i, 2) ' Date
            TabTempBis(i, 3) = TabTemp(i, 3) ' Compte
            TabTempBis(i, 4) = TabTemp(i, 4) ' Libellé
                If TabTemp(i, 6) Like "*" & "/" & "*" Then
                    TabTempBis(i, 2) = Split(TabTemp(i, 6), "/")(1) ' N° de pièce (pour ne garder que les caractères de droite, remplacer le 0 entre parenthèse par un 1)
                    TabTempBis(i, 7) = Split(TabTemp(i, 6), "/")(0) ' N° de Reference (pour ne garder que les caractères de droite, remplacer le 0 entre parenthèse par un 1)
                Else
                    TabTempBis(i, 2) = TabTemp(i, 6) ' N° de pièce
                    TabTempBis(i, 7) = TabTemp(i, 6) ' N° de pièce
                End If
        End If
                If i > 1 Then
                    TabTempBis(i, 5) = CDbl(Replace(TabTemp(i, 7), ".", ",")) ' Débit
                    TabTempBis(i, 6) = CDbl(Replace(TabTemp(i, 8), ".", ",")) ' Crédit
                Else
                    TabTempBis(i, 5) = TabTemp(i, 7) ' Débit
                    TabTempBis(i, 6) = TabTemp(i, 8) ' Crédit
                    TabTempBis(i, 7) = "N° Reference"
                End If
            Next i
        ' feuille Cai
            If fl.Name = "Cai" Then
            ReDim Preserve TabTempBis(LBound(TabTempBis, 1) To UBound(TabTempBis, 1), LBound(TabTempBis, 1) To UBound(TabTempBis, 2) + 1)
                For j = LBound(TabTempBis, 1) + 1 To UBound(TabTempBis, 1)
                    For k = j + 1 To UBound(TabTempBis, 1)
                        If TabTempBis(j, 7) = CDbl(TabTempBis(k, 7)) Then
                            'TabTempBis(j, 8) = CDbl(TabTempBis(k, 7))
                            'TabTempBis(k, 8) = CDbl(TabTempBis(k, 7))
                        End If
                    Next k
                Next j
            End If
        fl.Cells(1, 11).Resize(UBound(TabTempBis, 1), UBound(TabTempBis, 2)) = TabTempBis
        Set TabTempFeuile = Nothing
        Erase TabTemp, TabTempBis
   End If
Next fl
Sheets("Cai").Activate
'Réactiver le raffraichissement d'écran
Application.ScreenUpdating = True

End Sub
1581371836134.png

cdt
laurent
 

Discussions similaires

Statistiques des forums

Discussions
312 196
Messages
2 086 094
Membres
103 116
dernier inscrit
kutobi87