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

VBA et boucle qui ne fonctionne pas

rounil09

XLDnaute Occasionnel
Bonjour,

Je n'arrive pas à me sortir d'une macro. Quelqu'un peut-il me me mettre sur la bonne voie ?
Objet de la macro "Test3" qui ne fonctionne pas.
Depuis la feuille "Liste_EP" : Copier chaque ligne des colonnes I, N, O, P, Q, dont les cellules sont = à la cellule A1
(Nota : A1 est le renvoi d'une liste déroulante contenant 60 noms)
Coller chaque ligne copiée en 1ère ligne vide de la feuille "BD_CE"
 

job75

XLDnaute Barbatruc
Re : VBA et boucle qui ne fonctionne pas

Bonjour rounil09,

Vous ne donnez pas de fichier ni de précisions sur le collage.

J'ai quand même écrit cette macro :

Code:
Sub Test()
Dim lig As Long, i As Long, plage As Range
With Sheets("BD_CE")
  lig = .Cells.Find("*", After:=.[A1], LookIn:=xlFormulas, _
    SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
  For i = 2 To 100 'pour copier les lignes 2 à 100
    lig = lig + 1 'ligne vide
    With Sheets("Liste_EP")
      Set plage = Intersect(.Rows(i), .Range("I:I,N:Q"))
    End With
    plage.Copy .Cells(lig, 1) 'copier/coller
  Next
End With
End Sub
Les lignes 2 à 100 de la feuille Liste_EP sont copiées vers la feuille BD_CE.

A vous d'adapter.

Edit : salut CHALET53, pas rafraîchi

A+
 
Dernière édition:

CHALET53

XLDnaute Barbatruc
Re : VBA et boucle qui ne fonctionne pas

Bien vu Job75 sans fichier

j'ai apporté une petite modif si notre ami veut copier toute la ligne :

Sub Test()
Dim lig As Long, i As Long, plage As Range
With Sheets("BD_CE")
lig = .Cells.Find("*", After:=.[A1], LookIn:=xlFormulas, _
SearchOrder:=xlByRows, SearchDirection:=xlPrevious).Row
For i = 2 To 100 'pour copier les lignes 2 à 100
' lig = lig + 1 'ligne vide
With Sheets("Liste_EP")
Set plage = Intersect(.Rows(i), .Range("A:Q"))
End With
If Range("I" & i) = "AAA" Or Range("N" & i) = "AAA" Or Range("O" & i) = "AAA" Or Range("P" & i) = "AAA" Or Range("Q" & i) = "AAA" Then
lig = lig + 1
plage.Copy .Cells(lig, 1) 'copier/coller
End If
Next
End With
End Sub
 

pierrejean

XLDnaute Barbatruc
Re : VBA et boucle qui ne fonctionne pas

Bonjour a tous

A tester:

Code:
Sub test()
With Sheets("Liste_EP")
For n = 2 To .Range("B" & .Rows.Count).End(xlUp).Row
  If .Range("I" & n) = .Range("A1") Or .Range("N" & n) = .Range("A1") Or .Range("O" & n) = .Range("A1") Or .Range("P" & n) = .Range("A1") Or .Range("Q" & n) = .Range("A1") Then
  derlin = Sheets("BD_CE").Range("B" & Sheets("BD_CE").Rows.Count).End(xlUp).Row + 1
  .Range("C" & n & ":R" & n).Copy Destination:=Sheets("BD_CE").Range("C" & derlin)
  Sheets("BD_CE").Range("B" & derlin) = .Range("B" & n).Value
  End If
Next n
End With
End Sub
 

job75

XLDnaute Barbatruc
Re : VBA et boucle qui ne fonctionne pas

Re, salut pierrejean,

Ma boule de cristal n'était vraiment pas en forme.

Pas étudié encore les autres solutions, la mienne :

Code:
Sub Test()
Dim F1 As Worksheet, F2 As Worksheet, lig As Long
Dim i As Long, ref As Range
Set F1 = Sheets("Liste_EP")
Set F2 = Sheets("BD_CE")
lig = F2.[B65536].End(xlUp).Row
Application.ScreenUpdating = False
For i = 2 To F1.[B65536].End(xlUp).Row
  Set ref = Intersect(F1.Rows(i), F1.Range("I:I,N:Q"))
  Set ref = ref.Find(F1.[A1], LookIn:=xlValues, LookAt:=xlWhole)
  If Not ref Is Nothing Then
    lig = lig + 1 'ligne vide
    F1.Rows(i).Copy F2.Rows(lig)
  End If
Next
End Sub
Fichier .xls joint.

A+
 

Pièces jointes

  • Test(1).xls
    59 KB · Affichages: 87
  • Test(1).xls
    59 KB · Affichages: 81
  • Test(1).xls
    59 KB · Affichages: 87

laetitia90

XLDnaute Barbatruc
Re : VBA et boucle qui ne fonctionne pas

bonjour rounil09 , CHALET53 , pierrejean ,job75
peut etre pas utile de recopier les formules ???
POUR JOB
peut tu m'expliquer cette ligne je connais pas du tout cette facon de l'ecrire
Code:
Set ref = Intersect(F1.Rows(i), F1.Range("I:I,N:Q"))
je comprends que tu prends en compte colonne i et colonne de n a q
mais tu declare ref j'aurais vu 2 declarations ref & ref1
ref1 pour la ligne
Code:
Set ref1 = ref1.Find(F1.[A1], LookIn:=xlValues, LookAt:=xlWhole)
moi rien comprendre
 

job75

XLDnaute Barbatruc
Re : VBA et boucle qui ne fonctionne pas

Bonjour Laetitia

Au lieu de 2 variables ref et ref1 j'écrase le 1er ref par le 2ème.

Juste pour faire l'économie d'une variable (on ne se sert du 1er ref qu'une fois, pour définir le 2ème).

Quant à la formule avec Intersect, c'est une solution assez commode pour définir des plages constituées de cellules non jointives.

A+
 

job75

XLDnaute Barbatruc
Re : VBA et boucle qui ne fonctionne pas

Re,

peut etre pas utile de recopier les formules ???

Tu as tout à fait raison, et les formats aussi sont copiés.

Il est bien plus rapide de ne copier que les valeurs.

Donc dans ma macro remplacer :

Code:
F1.Rows(i).Copy F2.Rows(lig)
par :

Code:
F2.Cells(lig, 2).Resize(, 17) = F1.Cells(i, 2).Resize(, 17).Value

Edit : cela dit les formules ont peut-être leur utilité : les résultats en colonne E diffèrent s'il n'y a pas de formule...

A+
 
Dernière édition:

Discussions similaires

Réponses
21
Affichages
680
Les cookies sont requis pour utiliser ce site. Vous devez les accepter pour continuer à utiliser le site. En savoir plus…