Ceci est une page optimisée pour les mobiles. Cliquez sur ce texte pour afficher la vraie page.

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)

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)

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

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

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
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…