Fonction tablo vba [Résolu]

Signaler
-
 Francois -
Bonjour,

Je vous pose mon souci, j'ai un deux onglets qui possèdent deux colonnes à des endroits similaires.

Onglet1(Statut) : Colonne 1(A) et Colonne 10 (J)
Onglet2(En attente) : Colonne 1(A) et Colonne 10 (J)

Le code compare les colonnes J de chaque onglet avec la présence ou non d'un "O" ou d'un "F".

Mon souci est que je n'arrive pas à positionner pour ma feuille "Statut" la colonne Etat en colonne J sans avoir une erreur.

Mon code fonctionne pour les colonnes suivantes :

Onglet1(Statut) : Colonne 1(A) et Colonne 3 (C)
Onglet2(En attente) : Colonne 1(A) et Colonne 10 (J)

Je vous présente un fichier qui fonctionne mais j'aimerais que pour la première feuille, la Colonne3 "Etat" soit en colonne10.

Merci d'avance pour votre aide.

Lien : https://www.cjoint.com/c/KCpj3Jt0sWJ

Configuration: Windows / Edge 18.17763

3 réponses

Messages postés
15039
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827
bonjour,
dommage, tu n'expliques ni ce que tu as essayé, ni l'erreur obtenue.
je n'ai pas testé, mais je suggère de remplacer C par J en ligne 19,
de remplacer tablo(i, 3) par tablo(i, 10),
et, dans le resize, remplacer 3 par UBound(tablo, 2).
Bonjour yg_be,

Je suis désolé pour mon approximation. Dans ce que j'ai essayé il y a ceci :
"remplacer C par J en ligne 19, " & "remplacer tablo(i, 3) par tablo(i, 10), ".

J'ai effectué tous les changements que tu m'as conseillé. Cependant je n'ai pas de retour d'erreur, mais pas le résultat voulu.

As-tu une autre idée à me proposer ?

Merci pour ton aide.
Messages postés
15039
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827 > Francois
et tu avais le résultat voulu avec la colonne C?
Oui exactement.

C'est à dire que si dans la colonne "Etat" de la feuille Statut, il y a un "O" et un "F" dans la même colonne mais de l'autre feuille, alors le "O" se transforme en "F".
S'il y a un "O" de chaque coté, rien ne se passe
Et s'il y a un "F" de chaque coté rien ne se passe.
Messages postés
15039
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827
peux-tu montrer ton code adapté?
merci de tenir compte de ceci: https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code
>
Messages postés
15039
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021

Le code source qui fonctionnait selon ce modèle (j'espère que c'est ceci que tu entendais par code adapté).

Option Explicit

Dim tablo, tabloE, fs As Worksheet, fea As Worksheet
Dim i&, iE&


Sub MettreAjour()
    
    Set fs = Sheets("Statut")
    Set fea = Sheets("En attente")
   
    tablo = fs.Range("A1:C" & fs.Range("A" & Rows.Count).End(xlUp).Row)
    
    tabloE = fea.Range("A1").CurrentRegion
    
   
    For i = 3 To UBound(tablo, 1)
        If tablo(i, 3) = "O" Then
            
            For iE = 3 To UBound(tabloE, 1)
                If "XXX_" & tablo(i, 1) Like tabloE(iE, 1) And tabloE(i, 10) = "F" Then
                    tablo(i, 3) = "F"
                    
                End If
            
            Next iE
        End If
    Next
    Range("A1").Resize(UBound(tablo, 1), 3) = tablo
    
    
End Sub
Messages postés
15039
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827 > Francois
peux-tu montrer le code après que tu l'ai adapté pour le changement de colonne, pas celui qui se trouve dans le fichier que tu as envoyé?
>
Messages postés
15039
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021

Pardon j'ai mal compris, le voici :

Option Explicit

Dim tablo, tabloE, fs As Worksheet, fea As Worksheet
Dim i&, iE&


Sub MettreAjour()
    
    Set fs = Sheets("Statut")
    Set fea = Sheets("En attente")
   
    tablo = fs.Range("A1:J" & fs.Range("A" & Rows.Count).End(xlUp).Row)
    
    tabloE = fea.Range("A1").CurrentRegion
    
   
    For i = 3 To UBound(tablo, 1)
        If tablo(i, 3) = "O" Then
            
            For iE = 3 To UBound(tabloE, 1)
                If "NCR_" & tablo(i, 1) Like tabloE(iE, 1) And tabloE(i, 10) = "F" Then
                    tablo(i, 10) = "F"
                    
                End If
            
            Next iE
        End If
    Next
    Range("A1").Resize(UBound(tablo, 1), 2) = tablo
    
    
End Sub


Messages postés
15039
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827 > Francois
tu n'as pas remplacé partout tablo(i, 3) par tablo(i, 10),
en ligne 29, tu n'as pas remplacé le 3 par UBound(tablo, 2).
Dis moi si ça te semble bon ?

Option Explicit

Dim tablo, tabloE, fs As Worksheet, fea As Worksheet
Dim i&, iE&


Sub MettreAjour()
    
    Set fs = Sheets("Statut")
    Set fea = Sheets("En attente")
   
    tablo = fs.Range("A1:J" & fs.Range("A" & Rows.Count).End(xlUp).Row)
    
    tabloE = fea.Range("A1").CurrentRegion
    
   
    For i = 3 To UBound(tablo, 1)
        If tablo(i, 10) = "O" Then
            
            For iE = 3 To UBound(tabloE, 1)
                If "NCR_" & tablo(i, 1) Like tabloE(iE, 1) And tabloE(i, 10) = "F" Then
                    tablo(i, 10) = "F"
                    
                End If
            
            Next iE
        End If
    Next
    Range("A1").Resize(UBound(tablo, 2)) = tablo
    
    
End Sub
>
Messages postés
15039
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021

Merci beaucoup pour ton retour.

Quand je fais cette modification, j'obtiens une erreur sur cette ligne : "If tablo(i, 10) = "O" Then" (erreur 9)
Messages postés
15039
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827 > Francois
le 10 indique la dixième colonne du tableau. si je vois bien, ce tableau ne contient plus que neuf colonnes.
>
Messages postés
15039
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021

Oui en effet c'était une erreur de ma part, j'ai fait la modification, mais j'ai malheureusement encore une erreur

 Set fs = Sheets("Statut")
    Set fea = Sheets("En attente")
   
    tablo = fs.Range("B1:J" & fs.Range("B" & Rows.Count).End(xlUp).Row)
    
    tabloE = fea.Range("B1").CurrentRegion
    
   
    For i = 3 To UBound(tablo, 1)
        If tablo(i, 9) = "O" Then
            
            For iE = 3 To UBound(tabloE, 1)
                If "NCR_" & tablo(i, 1) Like tabloE(iE, 1) And tabloE(i, 9) = "F" Then
                    tablo(i, 9) = "F"
                    
                End If
            
            Next iE
        End If
    Next
    Range("B1").Resize(UBound(tablo, 1), UBound(tablo, 2)) = tablo
Messages postés
15039
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021
827 > Francois
quell erreur?
si les deux tableaux ont toujours les mêmes dimensions, je ferais plutôt, en ligne 6:
tabloE = fea.Range("A1").Resize(UBound(tablo, 1), UBound(tablo, 2))

CurrentRegion ne donne peut-être pas toujours ce que tu attends.
>
Messages postés
15039
Date d'inscription
lundi 9 juin 2008
Statut
Contributeur
Dernière intervention
10 avril 2021

Le problème venait bien de CurrentRegion un immense merci encore une fois.
Très bonne fin de journée.
Francois