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

VBA : Completer elements colonne si critere dans autres feuilles

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 !

bertrand1202

XLDnaute Occasionnel
Bonsoir

J 'ai écrit un code afin d'ajouter en page "RECAP" une ligne si le critere ne figure pas dans cette colonne mais dans celle d'une autre page.
Je demande de l'aide car ma macro reste inerte, j 'ai repris des elements du forum et essaye d' adapter .
Je joins le code et le fichier au cas où.

Peut ^etre l'oubli sautera t il aux yeux des pros du VBA , je ne décèle pas l'erreur.

Merci de votre aide .

Le code :

complementlibellecolonnes Macro
' Macro enregistrée le 22/12/2008 par Customer
'

'
Dim Ws As Worksheet
Dim Vcellule As Range
Dim Vligne As Integer
Dim Trouve As Range
Dim c As Byte 'c correspond a colonnes

On Error Resume Next 'es ce indispensable?

'on recherche ligne à ligne les elements de la colonne "A" de la feuille "RECAP" et on compare chacune des lignes à la colonne "A " des feuilles suivantes
'si l' éléments contenu dans la colonne "A" des feuilles suivantes n'est pas présent dans la colonne "a" de la feuille "RECAP",
'on insère une ligne dans la colonne "A" de la feuille "RECAP"en suivant l'ordre des numeros ( avant ou apres
'et l'on copie les colonnes "A" à"E" de la feuille sur la feuille "RECAP"
'exemple : numero10077 avant 10078 et apres 10076;

For Each Ws In Active.Workbook.Worksheets 'boucle sur les feuilles du classeur
If Ws.Name <> "RECAP" Then 'on compare le resultat de la Vcellule a celui trouvé dans la colonne"A" de la feuille "RECAP"
For Each Vcellule In Ws.Range("a4:a" & Ws.Range("A65536").End(xlUp).Row)
Set Trouve = Sheets '"RECAP").range("a4:a3000").find(Vcellule.value,lookin:xlvalue)
If Not Trouve Is Nothing Then 'si on ne trouve pas la valeur , on ajoute une ligne
Vcellule.EntireRow.Insert.Sheets ("RECAP")

For c = 1 To 5 '(colonne("a" à"e")
Copy.Paste.Sheets("RECAP").Cells(Vligne, c) = Ws.Cells(Vligne, c) 'on copie les elements des celules des colonnes (3A3 à "E3 sur la feuille "RECAP"
Next c
End If
Next Vcellule
End If
Next Ws
End Sub
 

Pièces jointes

Re : VBA : Completer elements colonne si critere dans autres feuilles

Bonsoir

J'ai essayé en modifiant copypaste et en supprimant if Trouve is nothing.
Apparemment l'erreur n'est pas à cet endroit.

Quel est l'élément qui bloque, je n'arrive pas à voir à quel endroit il y a un loup.

Merci de l'aide
 
Re : VBA : Completer elements colonne si critere dans autres feuilles

Bonjour


J'ai modifié le code et il ne se passe toujours rien , la macro ne démarre pas.

Je sollicite votre aide pour comprendre là où ça bloque. Bien que débutat, je cherche à comprendre l'erreur.

Bonne journée à tous .

Code joint:

Sub complementlibellecolonnes()
'
' complementlibellecolonnes Macro
' Macro enregistrée le 22/12/2008 par Customer
'

'
Dim Ws As Worksheet
Dim Vcellule As Range
Dim Vligne As Integer
Dim Trouve As Range
Dim c As Byte 'c correspond a colonnes

On Error Resume Next 'es ce indispensable?

'on recherche ligne à ligne les elements de la colonne "A" de la feuille "RECAP" et on compare chacune des lignes à la colonne "A " des feuilles suivantes
'si l' éléments contenu dans la colonne "A" des feuilles suivantes n'est pas présent dans la colonne "a" de la feuille "RECAP",
'on insère une ligne dans la colonne "A" de la feuille "RECAP"en suivant l'ordre des numeros ( avant ou apres
'et l'on copie les colonnes "A" à"E" de la feuille sur la feuille "RECAP"
'exemple : numero10077 avant 10078 et apres 10076;

For Each Ws In Active.Workbook.Worksheets 'boucle sur les feuilles du classeur
If Ws.Name <> "RECAP" Then 'on compare le resultat de la Vcellule a celui trouvé dans la colonne"A" de la feuille "RECAP"
For Each Vcellule In Ws.Range("a4:a" & Ws.Range("A65536").End(xlUp).Row)
Set Trouve = Ws("RECAP").Range("a4:a3000").Find(Vcellule.Value, LookIn:=xlValue)
If Not Trouve Is Nothing Then 'si on ne trouve pas la valeur , on ajoute une ligne
Vcellule.EntireRow.Insert.Sheets ("RECAP")

For c = 1 To 5 '(colonne("a" à"e")
Copy.Paste.Sheets("RECAP").Cells(Vligne, c) = Ws.Cells(Vligne, c) 'on copie les elements des celules des colonnes (3A3 à "E3 sur la feuille "RECAP"
Next c
End If
Next Vcellule
End If
Next Ws
End Sub
 
Re : VBA : Completer elements colonne si critere dans autres feuilles

Bonjour Bertrand

Au passage, quand tu dis :

Set Trouve = Ws("RECAP").Range("a4:a3000").Find(Vcellule.Value , LookIn:=xlValue)
If Not Trouve Is Nothing Then 'si on ne trouve pas la valeur , on ajoute une ligne
Vcellule.EntireRow.Insert.Sheets ("RECAP")

en fait, là tu testes si "trouve" est non vide... pour insérer si la valeur n'est pas trouvé, enlève le "not" :

Code:
If Trouve Is Nothing Then

bon après midi
@+
 
Re : VBA : Completer elements colonne si critere dans autres feuilles

Bonjour Pierrrot 93

Merci de ton aide ,apparemment , même en changeant cette donnée , ma macro ne vient pas mettre à jour la feuille "RECAP" en colonne A; Apparemment la macro ne démarre pas , le débogueur n'indique rien de particulier . Ou alors je me suis trompé sur copypaste ,j' ai remodifié et ça ne bouge pas

Je joins le fichier pour êre plus clair.

Merci de votre aide .
 

Pièces jointes

Re : VBA : Completer elements colonne si critere dans autres feuilles

Re

j'ai modifié une partie de ton code comme suit :

Code:
Sub complementlibellecolonnes()
Dim Ws As Worksheet, Vcellule As Range, Vligne As Integer
Dim Trouve As Range, c As Byte
For Each Ws In ActiveWorkbook.Worksheets
    If Ws.Name <> "RECAP" Then '
        For Each Vcellule In Ws.Range("a4:a" & Ws.Range("A65536").End(xlUp).Row)
            Set Trouve = Sheets("RECAP").Range("a4:a3000").Find(Vcellule.Value, , xlValues, xlWhole, , , False)
                If Trouve Is Nothing Then
                Vcellule.EntireRow.Insert
            End If
        Next Vcellule
    End If
Next Ws
End Sub

ton "on error resume next" était pas top...
Pour le reste vois pas trop le résultat attendu...

@+
 
Re : VBA : Completer elements colonne si critere dans autres feuilles

Bonjour Bertrand, bonjour Pierrot,

J'allais signaler le "." entre "Active" et "Workbook" qui empêchait de rentrer dans la boucle, mais pierrot a corrigé.

De toutes façons, cette macro ne peut pas donnéer le résultat souhaité.

Tu veux insérer une ligne dans la feuille récap sans être positionné sur une ligne précise et entre 2 valeurs que tu ne connais pas et sur lesquelles aucune recherche n'a été effectuée 😕

La variable Vligne n'est jamais initialisée, donc toujours à 0.

Si Vcellule n'existe pas, le mieux est d'ajouter une ligne à la fin de la plage utilisée dans "Recap".

En fin de procédure, il suffit de faire un tri sur la colonne A et le tour est joué.

@+

Gael
 
Re : VBA : Completer elements colonne si critere dans autres feuilles

Merci Pierrot 93

La macro démarre enfin , mais bloque au niveau de Vcellule.entirerow.insert.

Le message :excel ne peut pas deplacer les cellules appuyer sur ALT +FIN

Le but de la macro est de complétéer en page recap la colonne "A" avec les references qui figurent dans les autres feuilles et qui ne figurent pas dans la feuille recap.
Ceci permet de boucler lorsqu'on additionne des feuilles d'inventaires.

Merci de l'aide apportée.je continue à chercher , c'est assez rude VBA
Meric de ton aide.
 
Re : VBA : Completer elements colonne si critere dans autres feuilles

Re,

Macro corrigée:

Code:
Sub complementlibellecolonnes()
'
' complementlibellecolonnes Macro
' Macro enregistrée le 22/12/2008 par Customer
'
'
Dim Ws As Worksheet
Dim Vcellule As Range
Dim Vligne As Integer
Dim Trouve As Range
Dim c As Byte 'c correspond a colonnes
Vligne = Sheets("Recap").Range("A65536").End(xlUp).Row
For Each Ws In ActiveWorkbook.Worksheets 'boucle sur les feuilles du classeur
If Ws.Name <> "RECAP" Then 'on compare le resultat de la Vcellule a celui trouvé dans la colonne"A" de la feuille "RECAP"
Sheets(Ws.Name).Activate
For Each Vcellule In Ws.Range("a8:a" & Ws.Range("A65536").End(xlUp).Row)
Set Trouve = Sheets("RECAP").Range("a4:a3000").Find(Vcellule.Value, LookIn:=xlValues)
If Trouve Is Nothing Then 'si on ne trouve pas la valeur , on ajoute une ligne
    Vligne = Vligne + 1
    Ws.Range(Cells(Vcellule.Row, 1), Cells(Vcellule.Row, 5)).Copy _
    Destination:=Sheets("RECAP").Range("A" & Vligne)
 
End If
Next Vcellule
End If
Next Ws
Sheets("RECAP").Activate
Sheets("RECAP").Range("A4").CurrentRegion.Sort Key1:=Range("A4")
End Sub

@+

Gael
 
Dernière édition:
Re : VBA : Completer elements colonne si critere dans autres feuilles

Merci Gael et Pierrot


Dans la précipitation , je n'avais pas lu la remarque de GAEl , je vais remodifier en faisant attention ;

Je vous tiens au courant

Merci de vos remarques et de votre aide .
 
Re : VBA : Completer elements colonne si critere dans autres feuilles

Bonjour


Merci GAEL et PIERROT93 , la macro marche parfaitement et m'a permis de boucler le tableau.

Est il possible de vous demander une explication sur une partie du code car je n'ai pas tout compris , notamment ce qui fait que chaque feuille défile durant le travail et quelques autres elments.
Je continue le livre de R Walkenbach , mais il y a encore beaucoup de progres a faire, c'est stimulant.

Merci encore de l aide apportée, ça donne envie de continuer à comprendre et avancer

Bonnes fêtes de NOEL
 
Re : VBA : Completer elements colonne si critere dans autres feuilles

Bonjour à tous,

Pour ne pas avoir ces affichages, tu mets en début de procédure:

Code:
Application.screenupdating=False

Et en fin de procédure:

Code:
Application.screenupdating=True

@+

Gael
 
- 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
232
Réponses
8
Affichages
470
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…