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

Boostez vos compétences Excel avec notre communauté !

Rejoignez Excel Downloads, le rendez-vous des passionnés où l'entraide fait la force. Apprenez, échangez, progressez – et tout ça gratuitement ! 👉 Inscrivez-vous maintenant !

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

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...
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

Dernière édition:
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

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:
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?
 
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

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
 
- Navigue sans publicité
- Accède à Cléa, notre assistante IA experte Excel... et pas que...
- Profite de fonctionnalités exclusives
Ton soutien permet à Excel Downloads de rester 100% gratuit et de continuer à rassembler les passionnés d'Excel.
Je deviens Supporter XLD

Discussions similaires

Réponses
5
Affichages
151
Réponses
5
Affichages
149
Réponses
4
Affichages
199
Retour