Boucle FOR +IF incompatible

piegre

XLDnaute Junior
Bonjour à tous,

J'ai tappé ce code mais il ne fonctionne pas ( pour changer ><) :

Code:
Sub traitementdonnée()
Dim i As Long


For i = 1 To 30
    
    If UCase(Left(Cells(4, i)) = "H" Then
    Sheets("PLAN").Select
    Range("Ei:Fi").Select
    Selection.Copy
    Sheets("PLAN donnée").Range("Ei:Fi").Select
    Range("Ei:Fi").Select
    ActiveSheet.Paste

    End If
Next
End Sub

C'est une boucle for avec un If imbriqué, je lis les cellules de D1 à D30 , et quand la 1ère lettre de la case est égale à H je fais un copier coller de Ei et Fi dans un autre onglet sur les cases Ei : Fi ( à terme je voudrai mettre à la place des i, la dernière cellule non vide) mais cela ne fonctionne pas.
Avez vous une idée ?
 
Dernière modification par un modérateur:

piegre

XLDnaute Junior
Re : Boucle FOR +IF incompatible

Bon j'ai modifié mon codee et ça marche :

Code:
Sub traitementdonnée()
Dim i As Long


For i = 1 To 30
    
    If UCase(Left(Cells(4, i), 1)) = H Then
    Sheets("PLAN").Select
    Range("Ei:Fi").Select
    Selection.Copy
    Sheets("PLAN donnée").Select
    Range("Ei:Fi").Select
    ActiveSheet.Paste

    End If
Next
End Sub

Sauf quand je met Ei , il ne compte pas le i comme la variable mais comme EI, comme une case comme EH ou EJ
 
Dernière modification par un modérateur:

piegre

XLDnaute Junior
Re : Boucle FOR +IF incompatible

Pour ceux que ça intéresse j'ai trouvé :

Code:
Sub traitementdonnée()
Dim i As Integer

Worksheets("PLAN donnée").Range("A3:J1000").ClearContents

For i = 1 To 30
    
    If UCase(Left(Cells(i, 4), 1)) = H Then
    Sheets("PLAN").Select
    Range(Cells(i, 5), Cells(i, 6)).Select
    Selection.Copy
    Sheets("PLAN donnée").Select
    Range(Cells(i, 5), Cells(i, 6)).Select
    ActiveSheet.Paste


    End If
Next
End Su
 

piegre

XLDnaute Junior
Re : Boucle FOR +IF incompatible

Cependant , j'ai plusieurs lettre dans la colonne ( H,B,C,D,F,A) donc j'ai fait plusieurs ELSEIF. Le code est beaucoup trop long.Avez vous une idée pour le simplifier ?

Code:
Sub traitementdonnée()
Dim i As Integer

Worksheets("PLAN donnée").Range("A3:J1000").ClearContents

For i = 1 To 120
   
 If UCase(Left(Cells(i, 4), 1)) = H Then                      ' Si la 1ère lettre de la case Di = H
    Sheets("PLAN").Select                                        ' Selection de l'onglet "PLAN"
    Range(Cells(i, 5), Cells(i, 6)).Select                        ' Selectionne les cellulles Ei:Fi
    Selection.Copy                                                  ' Copie la selection
    Sheets("PLAN donnée").Select                              ' Selection de l'onglet "PLAN donnée"
    Range(Cells(i, 5), Cells(i, 6)).Select                        ' Selectionne les cellulles Ei:Fi
    ActiveSheet.Paste                                              ' Colle dans la selection
    
    ElseIf UCase(Left(Cells(i, 4), 1)) = b Then                'Si la 1ère lettre de la case Di = B
    
    Sheets("PLAN").Select
    Range(Cells(i, 5), Cells(i, 6)).Select
    Selection.Copy
    Sheets("PLAN donnée").Select
    Range(Cells(i, 3), Cells(i, 4)).Select
    ActiveSheet.Paste
  
    ElseIf UCase(Left(Cells(i, 4), 1)) = c Then                 'Si la 1ère lettre de la case Di = C
    
    Sheets("PLAN").Select
    Range(Cells(i, 5), Cells(i, 6)).Select
    Selection.Copy
    Sheets("PLAN donnée").Select
    Range(Cells(i, 1), Cells(i, 2)).Select
    ActiveSheet.Paste
    
    ElseIf UCase(Left(Cells(i, 4), 1)) = D Then               'Si la 1ère lettre de la case Di = D
    
    Sheets("PLAN").Select
    Range(Cells(i, 5), Cells(i, 6)).Select
    Selection.Copy
    Sheets("PLAN donnée").Select
    Range(Cells(i, 7), Cells(i, 8)).Select
    ActiveSheet.Paste
    
    ElseIf UCase(Left(Cells(i, 4), 1)) = F Then                'Si la 1ère lettre de la case Di = F
   
    Sheets("PLAN").Select
    Range(Cells(i, 5), Cells(i, 6)).Select
    Selection.Copy
    Sheets("PLAN donnée").Select
    Range(Cells(i, 7), Cells(i, 8)).Select
    ActiveSheet.Paste

    ElseIf UCase(Left(Cells(i, 4), 1)) = a Then                'Si la 1ère lettre de la case Di = A
    
    Sheets("PLAN").Select
    Range(Cells(i, 5), Cells(i, 6)).Select
    Selection.Copy
    Sheets("PLAN donnée").Select
    Range(Cells(i, 9), Cells(i, 10)).Select
    ActiveSheet.Paste
    
    
    End If
Next
End Sub
 
Dernière modification par un modérateur:

JM27

XLDnaute Barbatruc
Re : Boucle FOR +IF incompatible

Bonsoir
Je ne comprends pas ton code ( qui ne marche pas d'ailleurs)
Tu transformes ta première lettre en majuscule et puis tu la testes comme si c'est une minuscule dans certains cas (b,c,a)
tu n'auras donc jamais une égalité.
pour info il faut rajouter des " avant et après la lettre. (sinon VBA considérera que c'est une variable)
voila un code simplifié


Code:
Sub traitementdonnée()
Dim i As byte
Dim Toto As String
Worksheets("PLAN donnée").Range("A3:J1000").ClearContents
For i = 1 To 30
    Toto = UCase(Left(Cells(4, i), 1))
    Select Case Toto
        Case "H", "B", "C", "D", "F", "A"
            Sheets("PLAN").Range("E" & i & ":F" & i).Copy Destination:=Sheets("PLAN donnée").Range("E" & i & ":F" & i)
        Case Else
    End Select
Next
End Sub
 
Dernière modification par un modérateur:

JM27

XLDnaute Barbatruc
Re : Boucle FOR +IF incompatible

Bonjour
et si tu envoyais un fichier avec une demande précise.
que l'on puisse tester
Sur le fichier que j'ai réalisé pour tester cela marche !( évidemment j'ai supprimé les select , donc tu ne vois pas les copie se faire , mais elles se font : regarde dans les résultats)
 
Dernière modification par un modérateur:

piegre

XLDnaute Junior
Re : Boucle FOR +IF incompatible

Voilà j'ai mis le fichier, le code qui vous intéresse se trouve à la fin du module "Importer", donc ce que je souhaite faire :

- Dans l'onglet PLAN, je souhaite lire la colonne "D", et à chaque fois que la lettre "H" apparaît

- On copie colle la case "E" et "F" correspondante dans l'onglet "PLAN donnée" à la case "E" et "F"

Dites moi si j'ai pas été assez claire.

Je comprend pas pourquoi le code ne fonctionne pas. Les nom des onglets sont les mêmes et les cases également.
 

Pièces jointes

  • Programme Gréard.xlsm
    62.7 KB · Affichages: 27
Dernière modification par un modérateur:

JM27

XLDnaute Barbatruc
Re : Boucle FOR +IF incompatible

Bonjour
Voir dans le module JM27.
1/J'ai modifié de manière à importer les lignes qui sont uniquement documentées en colonne A de plan.
2/ comme il n'y a pas de ligne de titre dans la feuille plan et qu'il y en a deux dans la feuille plan données j'ai donc fait un transfert de ligne +2 de manière à ne pas écraser les titres.
3/ j'ai gardé le test avec les autres valeurs ( "H", "B", "C", "D", "F", "A") voir le select case
 

Pièces jointes

  • Programme Gréard JM27.xlsm
    61.9 KB · Affichages: 17
  • Programme Gréard JM27.xlsm
    61.9 KB · Affichages: 21
Dernière modification par un modérateur:

JM27

XLDnaute Barbatruc
Re : Boucle FOR +IF incompatible

Bonjour
comme indiqué dans mon message précédent cela fonctionne déja avec les autres lettres ( que j'ai modifié en majuscule dans le test)
et j'ai rajouté des données bidon en colonne A ( colonne qui indique la grandeur de la zone à tester)
 

Pièces jointes

  • Programme Gréard JM27.xlsm
    62.3 KB · Affichages: 19
  • Programme Gréard JM27.xlsm
    62.3 KB · Affichages: 22

Discussions similaires

Réponses
12
Affichages
542